---
title: Variants now support multiple barcodes - Shopify developer changelog
description: >-
  Shopify’s developer changelog documents all changes to Shopify’s platform.
  Find the latest news and learn about new platform opportunities.
source_url:
  html: >-
    https://shopify.dev/changelog/product-variant-barcode-is-being-replaced-by-barcodes
  md: >-
    https://shopify.dev/changelog/product-variant-barcode-is-being-replaced-by-barcodes.md
metadata:
  effectiveApiVersion: 2026-10
  affectedApi:
    - displayName: Admin GraphQL API
      handle: admin-graphql
  primaryTag:
    displayName: API
    handle: api
  secondaryTag:
    displayName: Deprecation announcement
    handle: deprecation-announcement
  indicatesActionRequired: true
  createdAt: '2026-09-01T19:50:49-04:00'
  postedAt: '2026-09-08T13:35:00-04:00'
  updatedAt: '2026-09-08T13:33:07-04:00'
  effectiveAt: '2026-09-02T12:00:00-04:00'
---

# Variants now support multiple barcodes

DateSeptember 8, 2026

Version[2026-10](https://shopify.dev/changelog?api_version=2026-10)

Flags[Deprecation announcement](https://shopify.dev/changelog?filter=deprecation-announcement)[Action required](https://shopify.dev/changelog?action_required=true)

SurfacesAPI

Affected APIs[Admin GraphQL API](https://shopify.dev/changelog?api_type=admin-graphql)

Merchants often sell the same variant under more than one identifier: a manufacturer UPC alongside a private-label EAN, a GTIN, a reissued ISBN, or an ASIN for a marketplace listing. Until now a variant held a single barcode value, so the extras ended up in metafields, tags, or outside Shopify entirely.

## What's new

You can now read a variant's full set from the new barcodes connection on ProductVariant, and write it with the barcodes input on the [productSet mutation](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet), [productVariantsBulkCreate mutation](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkCreate), and [productVariantsBulkUpdate mutation](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productVariantsBulkUpdate).

Each barcode can declare a type: UPC, EAN, ISBN, GTIN, or ASIN. We validate the value against that standard's character, length, prefix, and check-digit rules. If you don't declare a type, we store the value exactly as you sent it, so untyped data keeps working as before.

## Usage guidance

* A variant accepts up to 20 barcodes, each up to 255 characters.
* The first barcode you send is what the existing `barcode` field returns, and it sorts first in the `barcodes` connection.
* A single variant input can't set both `barcode` and `barcodes`.
* Sending `barcodes` replaces the variant's entire set, so include the barcodes you want to keep.
* The `barcode` filter on the products and productVariants queries now matches any barcode on a variant.
* Sending a barcode with a `type` will be validated against that standard's rules. If you don't declare a type, we store the value exactly as you sent it.

## Compatibility with `ProductVariant.barcode`

`ProductVariant.barcode` is now deprecated, but nothing breaks today and `barcode` keeps working:

* Reading `barcode` returns the first entry in the `barcodes` connection.
* Writing `barcode` updates the first barcode in the `barcodes` connection and leaves the variant's other barcodes untouched. Sending a blank value clears the first barcode and replaces it with the next barcode in the set until there are no barcodes remaining.
* A single variant input can't set both `barcode` and `barcodes`.

Adding or changing a barcode in the first position of the connection lets you keep control over surfaces you haven't migrated yet while still getting the full multiple barcode experience.

### Be aware of potential silent truncation

Once a second barcode is added to a variant, an integration reading only barcode sees one of them with no signal that others exist. If your app syncs product identifiers to an ERP, a marketplace, a POS, or a supplier feed, move those reads to the barcodes connection.

We'll announce a removal date in a future post, with a full API version of notice before the field goes away.

To get started, refer to [ProductVariant](https://shopify.dev/docs/api/admin-graphql/latest/objects/ProductVariant), [ProductVariantBarcode](https://shopify.dev/docs/api/admin-graphql/latest/objects/ProductVariantBarcode), [BarcodeInput](https://shopify.dev/docs/api/admin-graphql/latest/input-objects/BarcodeInput), and [BarcodeType](https://shopify.dev/docs/api/admin-graphql/latest/enums/BarcodeType).
