Skip to content

List all variants

View as Markdown
get /api/variants

Retrieves the collection of Product Variant resources.

Returns the paginated collection of variants across all products, rather than the variants of a single product. Use it to sync your catalog, to search by sku or barcode without knowing the parent product, or to price many variants in one pass.

For the variants of one known product, use List variants instead.

search matches, case-insensitively and partially, against the variant sku, the variant barcode, and the parent product title in the current locale.

createdAt and updatedAt accept [after], [before], [strictly_after] and [strictly_before] bounds. Pass ISO 8601 UTC timestamps and keep the high-water mark of the last run to fetch only what changed:

?updatedAt[after]=2026-08-01T00:00:00Z&order[updatedAt]=asc

expand takes a comma-separated list of tokens, each replacing an IRI reference with the full object: optionValues, medias, metafields, metaobject and product. Tokens are independent, except metaobject, which only takes visible effect combined with metafields.

Query parameters

NameTypeRequiredDescription
resolveContext[channel]string-Channel IRI used to resolve the variant price. Required together with resolveContext[country].
resolveContext[country]string-Country IRI used to resolve the variant price. Required together with resolveContext[channel].
resolveContext[at]string-ISO 8601 UTC timestamp at which the price is resolved. Defaults to the current time when omitted.
expandstring-Comma-separated list of relations to embed as full objects instead of IRI strings. Supported values: optionValues, medias, metafields, metaobject, product. Tokens are independent; unknown values are silently ignored. metaobject only has a visible effect when combined with metafields (it embeds the referenced metaobject on each metafield of type metaobject_reference or list__metaobject_reference).
pageinteger-The collection page number
itemsPerPageinteger-The number of items per page
properties[]string[]-Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
id[]string[]-Only the items with one of these ids, each a UUID or the item IRI.
createdAt[after]string-Product Variant createdAt
createdAt[before]string-Product Variant createdAt
createdAt[strictly_after]string-Product Variant createdAt
createdAt[strictly_before]string-Product Variant createdAt
updatedAt[after]string-Product Variant updatedAt
updatedAt[before]string-Product Variant updatedAt
updatedAt[strictly_after]string-Product Variant updatedAt
updatedAt[strictly_before]string-Product Variant updatedAt
skustring-Product Variant sku
sku[]string[]-Product Variant sku
barcodestring-Product Variant barcode
barcode[]string[]-Product Variant barcode
metafieldobject-Filter owners by metafield value. Each key is a namespace.key pair from a metafield definition of this owner type; pairs are combined with AND. Scalar types match exactly on the stored string; list types match when the stored array contains the requested value. An unknown namespace.key returns an empty collection. Example: ?metafield[specs.material]=leather.
searchstring-Free-text search across: sku, barcode, product.title (case-insensitive, partial match)
order[sku]string-Product Variant order[sku]
order[barcode]string-Product Variant order[barcode]
order[createdAt]string-Product Variant order[createdAt]
order[updatedAt]string-Product Variant order[updatedAt]

Response

200 - Product Variant collection

PropertyTypeRequiredDescription
searchobject-
Show search fields
PropertyTypeRequiredDescription
@typestring-
mappingobject[]-
Show mapping fields
PropertyTypeRequiredDescription
@typestring-
propertystring | null-
requiredboolean-
variablestring-
templatestring-
variableRepresentationstring-
totalItemsinteger-
viewobject-
Show view fields
PropertyTypeRequiredDescription
@idstring-
@typestring-
firststring | null-
laststring | null-
nextstring | null-
previousstring | null-
memberProduct.Variant[]required
Show member fields
PropertyTypeRequiredDescription
@contextstring | object-
@idstringrequired
@typestringrequired
barcodestringrequiredThe barcode, unique UPC, or ISBN number for the product.
createdAtstring-The date and time when the resource was created (ISO 8601 format).
idstring-The resource's unique identifier (UUID).
measurementEmbeddedMeasurementResource | null-The measurement used to compute per-unit prices for the variant.
Show measurement fields
PropertyTypeRequiredDescription
measuredType"volume" | "weight" | "length" | "area" | "unit"requiredThe kind of physical quantity measured (volume, weight, length, area or unit).
quantityUnit"ml" | "cl" | "l" | "mg" | "g" | "kg" | "mm" | "cm" | "m" | "m2" | "unit"requiredThe unit the variant's quantity is expressed in.
quantityValueintegerrequiredThe variant's quantity, expressed in the quantity unit.
referenceUnit"ml" | "cl" | "l" | "mg" | "g" | "kg" | "mm" | "cm" | "m" | "m2" | "unit"requiredThe unit used as the basis for per-unit price calculations.
referenceValueintegerrequiredThe number of reference units used for per-unit price calculations.
mediasarray-A list of Media, ordered by position. Only media of type "image" can be associated with a variant. Returned as IRI strings by default; pass ?expand=medias to embed full Media objects. Requires the medias:read scope. Returned empty when the scope is missing.
metafieldsarray-Metafields owned by this variant. Serialized as IRI strings by default; pass ?expand=metafields to embed full MetafieldResource objects. Requires the metafields:read scope. Returned empty when the scope is missing.
optionValuesarray-A list of Option Value, each one representing an option value associated with the variant. Requires the products:read scope. Returned empty when the scope is missing.
productstring | Product | nullrequiredThe product resource it belongs to. Requires the products:read scope. Returned null when the scope is missing.
resolvedPriceResolvedPriceResource | null-The price resolved for the current resolveContext (country, channel and instant). Null unless resolveContext[country], resolveContext[channel] and resolveContext[at] are all provided.
Show resolvedPrice fields
PropertyTypeRequiredDescription
atstring-The instant used to resolve the price (defaults to request time).
channelIdstring-The Channel used to resolve the price.
countryIdstring-The Country used to resolve the price.
currencystring-ISO 4217 currency code (mirrors price.currency for convenience).
discountPriceEmbeddedMoneyResource | null-The discount price including tax, if any.
discountTaxExcludedPriceEmbeddedMoneyResource | null-The discount price excluding tax, if any.
lowestPriceLast30DaysEmbeddedMoneyResource | null-Lowest price including tax observed on the rolling window [at - 30 days, at] for the same (variant, channel, country). Falls back to the current price when no prior data exists.
lowestPriceLast30DaysAtstring | null-The instant at which lowestPriceLast30Days was active. Falls back to at when no prior data exists.
priceEmbeddedMoneyResource-The price including tax.
saleOfferIdstring-The SaleOffer that was resolved.
taxExcludedPriceEmbeddedMoneyResource-The price excluding tax.
taxRatenumber-Tax rate applied, in percent (e.g. 20.0).
skustringrequiredA unique identifier for the product variant.
updatedAtstring-The date and time when the resource was last modified (ISO 8601 format).

Errors

403 - Access denied. The caller is missing one or more permissions required for this operation.

Content-Type: application/problem+json

PropertyTypeRequiredDescription
@contextstring | object-
@idstringrequired
@typestringrequired
detailstring-
missingPermissionsstring[]-Permissions that the caller is missing for this operation. Present only when the 403 is caused by a denied permission.
statusinteger-
titlestring-
typestring-