product Variant
Retrieves a product variant by its ID.
A product variant is a specific version of a product that comes in more than one option, such as size or color. For example, if a merchant sells t-shirts with options for size and color, then a small, blue t-shirt would be one product variant and a large, blue t-shirt would be another.
Use the query when you need to:
- Access essential product variant data (for example, title, price, image, and metafields).
- Build product detail pages and manage inventory.
- Handle international sales with localized pricing and content.
- Manage product variants that are part of a bundle or selling plan.
Learn more about working with Shopify's product model.
Arguments
- id (ID!)
- •ID!required
The ID of the
to return.
Anchor to Possible returnsPossible returns
- ProductVariant (ProductVariant)
- Anchor to ProductVariantProduct•Product
Variant Variant The
object represents a version of a product that comes in more than one option, such as size or color. For example, if a merchant sells t-shirts with options for size and color, then a small, blue t-shirt would be one product variant and a large, blue t-shirt would be another.Use the
object to manage the full lifecycle and configuration of a product's variants. Common use cases for using theobject include:- Tracking inventory for each variant
- Setting unique prices for each variant
- Assigning barcodes and SKUs to connect variants to fulfillment services
- Attaching variant-specific images and media
- Setting delivery and tax requirements
- Supporting product bundles, subscriptions, and selling plans
A
is associated with a parentProductobject.serves as the central link between a product's merchandising configuration, inventory, pricing, fulfillment, and sales channels within the GraphQL Admin API schema. Each variant can reference other GraphQL types such as:: Used for inventory trackingImage: Used for variant-specific images: Used for subscriptions and selling plans
Learn more about Shopify's product model.
- Anchor to availableForSaleavailable•Boolean!
For Sale non-null Whether the product variant is available for sale.
- Anchor to barcodebarcode•String
The value of the barcode associated with the product.
- Anchor to compareAtPricecompare•Money
At Price The compare-at price of the variant in the default shop currency.
- Anchor to contextualPricingcontextual•Product
Pricing Variant Contextual Pricing! non-null The pricing that applies for a customer in a given context. As of API version 2025-04, only active markets are considered in the price resolution.
- Anchor to contextcontext•Contextual
Pricing Context! required The context used to generate contextual pricing for the variant.
Arguments
- Anchor to createdAtcreated•Date
At Time! non-null The date and time when the variant was created.
- Anchor to defaultCursordefault•String!
Cursor non-null A default cursor that returns the single next record, sorted ascending by ID.
- Anchor to deliveryProfiledelivery•Delivery
Profile Profile The delivery profile for the variant.
- Anchor to displayNamedisplay•String!
Name non-null Display name of the variant, based on product's title + variant's title.
- Anchor to eventsevents•Event
Connection! non-null The paginated list of events associated with the host subject.
- Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to queryquery•String
A filter made up of terms, connectives, modifiers, and comparators. | comments | boolean | Whether or not to include comment-events in your search, passing
falsewill exclude comment-events, any other value will include comment-events. | | | -false
-true| | created_at | time | Filter by the date and time when the event occurred. Event data is retained for 1 year. | | | -
-| | id | id | Filter byidrange. | | | -id:1234
-id:>=1234
-id:<=1234| | subject_type | string | The resource type affected by this event. See EventSubjectType for possible values. | | | -
-
-| You can apply one or more filters to a query. Learn more about Shopify API search syntax.- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
- Anchor to sortKeysort•Event
Key Sort Keys Default:ID Sort the underlying list using a key. If your query is slow or returns an error, then try specifying a sort key that matches the field used in the search.
Arguments
- •ID!non-null
A globally-unique ID.
- Anchor to inventoryIteminventory•Inventory
Item Item! non-null The inventory item, which is used to query for inventory information.
- Anchor to inventoryPolicyinventory•Product
Policy Variant Inventory Policy! non-null Whether customers are allowed to place an order for the product variant when it's out of stock.
- Anchor to inventoryQuantityinventory•Int
Quantity The total sellable quantity of the variant.
- Anchor to legacyResourceIdlegacy•Unsigned
Resource Id Int64! non-null The ID of the corresponding resource in the REST Admin API.
- Anchor to mediamedia•Media
Connection! non-null The media associated with the product variant.
- Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
Arguments
- Anchor to metafieldmetafield•Metafield
A custom field, including its
namespaceandkey, that's associated with a Shopify resource for the purposes of adding and storing additional information.- •String!required
The key for the metafield.
- Anchor to namespacenamespace•String
The container the metafield belongs to. If omitted, the app-reserved namespace will be used.
Arguments
- •String!
- Anchor to metafieldsmetafields•Metafield
Connection! non-null A list of custom fields that a merchant associates with a Shopify resource.
- Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to keyskeys•[String!]
List of keys of metafields in the format
namespace.key, will be returned in the same format.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to namespacenamespace•String
The metafield namespace to filter by. If omitted, all metafields are returned.
- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
Arguments
- Anchor to positionposition•Int!non-null
The order of the product variant in the list of product variants. The first position in the list is 1.
- Anchor to priceprice•Money!non-null
The price of the product variant in the default shop currency.
- Anchor to productproduct•Product!non-null
The product that this variant belongs to.
- Anchor to productParentsproduct•Product
Parents Connection! non-null A list of products that have product variants that contain this variant as a product component.
- Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to queryquery•String
A filter made up of terms, connectives, modifiers, and comparators.
name type description acceptable_values default_value example_use default string Filter by a case-insensitive search of multiple fields in a document. - query=Bob Norman
-query=title:green hoodiebarcode string Filter by the product variant barcodefield. - bundles boolean Filter by a [product bundle](https://shopify.dev/docs/apps/build/product-merchandising/bundles). A product bundle is a set of two or more related products, which are commonly offered at a discount. - bundles:truecategory_id string Filter by the product category ID ( product.category.id). A product category is the category of a productfrom Shopify's Standard Product Taxonomy. - collection_id id Filter by the collection idfield. - combined_listing_role string Filter by the role of the product in a combined listing. - parent
-child
-- created_at time Filter by the date and time when the product was created. -
-
-delivery_profile_id id Filter by the delivery profile idfield. - error_feedback string Filter by products with publishing errors. gift_card boolean Filter by the product field. - handle string Filter by a comma-separated list of product handles. - handle:the-minimal-snowboardhas_only_composites boolean Filter by products that have only composite variants. - has_only_default_variant boolean Filter by products that have only a default variant. A default variant is the only variant if no other variants are specified. - has_variant_with_components boolean Filter by products that have variants with associated components. - id id Filter by idrange.- id:1234
-id:>=1234
-id:<=1234inventory_total integer Filter by inventory count. -
-
-is_price_reduced boolean Filter by products that have a reduced price. For more information, refer to the object. - metafields.{namespace}.{key} mixed Filters resources by metafield value. Format: metafields.{namespace}.{key}:{value}. Learn more aboutquerying by metafield value. -
-out_of_stock_somewhere boolean Filter by products that are out of stock in at least one location. - price bigdecimal Filter by the product variant pricefield. - price:100.57product_configuration_owner string Filter by the app idfield. - product_publication_status string Filter by channel approval process status of the resource on a channel, such as the online store. The value is a composite of the channel appID( Channel.app.id) and one of the valid values. For simple visibility checks, use published_statusinstead. -
- `*{channel_app_id}-rejected * {channel_app_id}-needs_action`
-
- `*{channel_app_id}-published * {channel_app_id}-demoted*{channel_app_id}-scheduled *{channel_app_id}-provisionally_published` - product_type string Filter by a comma-separated list of [product types](https://help.shopify.com/manual/products/details/product-type). | | publication_ids | string | Filter by a comma-separated list of publication IDs that are associated with the product. | | | -| | publishable_status | string | Deprecated: This parameter is deprecated as of 2025-12 and will be removed in a future API version. Use published_status for visibility checks. Filter by the publishable status of the resource on a channel. The value is a composite of the channelappID (Channel.app.id) and one of the valid status values. | -
-
-
-| | -
-| | published_at | time | Filter by the date and time when the product was published to the online store and other sales channels. | | | -
-
-| | published_status | string | Filter resources by their visibility and publication state on a channel. Online store channel filtering: -: Returns all resources in the online store channel, regardless of publication status. -published/visible: Returns resources that are published to the online store. -unpublished: Returns resources that are not published to the online store. Channel-specific filtering using a channel ID, channel handle, channelappID (Channel.app.id), or app handle with suffixes: -: Returns resources published to the specified channel. -: Same as(kept for backwards compatibility). -: Returns resources added to the channel but not yet published. -: Returns resources not added to the channel or not published. Other: -unavailable: Returns resources not published to any channel. | -
-published
-visibleunpublished
-
-
-
-
-
-
-
-
-unavailable| | -
-
-
-
-| | sku | string | Filter by the product variantskufield. Learn more about SKUs. | | | -| | status | string | Filter by a comma-separated list of statuses. You can use statuses to manage inventory. Shopify only displays products with anstatus in online stores, sales channels, and apps. | -active
-archived
-draft|active| -status:active,draft| | tag | string | Filter objects by thetagfield. | | | -| | tag_not | string | Filter by objects that don’t have the specified tag. | | | -| | title | string | Filter by the producttitlefield. | | | -title:The Minimal Snowboard| | tracks_inventory | boolean | Filter by products that have inventory tracking enabled. | | | -| | updated_at | time | Filter by the date and time when the product was last updated. | | | -
-
-| | variant_id | id | Filter by the product variantidfield. | | | -| | variant_title | string | Filter by the product varianttitlefield. | | | -| | vendor | string | Filter by the origin or source of the product. Learn more about vendors and managing vendor information. | | | -vendor:Snowdevil
-| You can apply one or more filters to a query. Learn more about Shopify API search syntax.
- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
Arguments
- Anchor to productVariantComponentsproduct•Product
Variant Components Variant Component Connection! non-null A list of the product variant components.
- Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
Arguments
- Anchor to requiresComponentsrequires•Boolean!
Components non-null Whether a product variant requires components. The default value is
false. Iftrue, then the product variant can only be purchased as a parent bundle with components and it will be omitted from channels that don't support bundles.- Anchor to selectedOptionsselected•[Selected
Options Option!]! non-null List of product options applied to the variant.
- Anchor to sellableOnlineQuantitysellable•Int!
Online Quantity non-null The total sellable quantity of the variant for online channels. This doesn't represent the total available inventory or capture limitations based on customer location.
- Anchor to sellingPlanGroupsselling•Selling
Plan Groups Plan Group Connection! non-null A list of all selling plan groups defined in the current shop associated with the product variant.
- Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
Arguments
- Anchor to sellingPlanGroupsCountselling•Count
Plan Groups Count Count of selling plan groups associated with the product variant.
- Anchor to showUnitPriceshow•Boolean!
Unit Price non-null Whether to show the unit price for this product variant.
- •String
A case-sensitive identifier for the product variant in the shop. Required in order to connect to a fulfillment service.
- Anchor to taxabletaxable•Boolean!non-null
Whether a tax is charged when the product variant is sold.
- Anchor to titletitle•String!non-null
The title of the product variant.
- Anchor to translationstranslations•[Translation!]!non-null
The published translations associated with the resource.
- Anchor to localelocale•String!required
Filters translations locale.
- Anchor to marketIdmarket•ID
Id Filters translations by market ID. Use this argument to retrieve content specific to a market.
Arguments
- Anchor to unitPriceunit•Money
Price V2 The unit price value for the variant based on the variant measurement.
- Anchor to unitPriceMeasurementunit•Unit
Price Measurement Price Measurement The unit price measurement for the variant.
- Anchor to updatedAtupdated•Date
At Time! non-null The date and time (ISO 8601 format) when the product variant was last modified.
- Anchor to imageimage•ImageDeprecated
- Anchor to cropcrop•Crop
Region Deprecated - Anchor to maxHeightmax•Int
Height Deprecated - Anchor to maxWidthmax•Int
Width Deprecated - Anchor to scalescale•IntDeprecatedDefault:1
Arguments
- Anchor to metafieldDefinitionsmetafield•Metafield
Definitions Definition Connection! non-nullDeprecated - Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to namespacenamespace•String
Filter metafield definitions by namespace.
- Anchor to pinnedStatuspinned•Metafield
Status Definition Pinned Status Default:ANY Filter by the definition's pinned status.
- Anchor to queryquery•String
A filter made up of terms, connectives, modifiers, and comparators.
name type description acceptable_values default_value example_use default string Filter by a case-insensitive search of multiple fields in a document. - query=Bob Norman
-query=title:green hoodiecreated_at time Filter by the date and time when the metafield definition was created. -
-
-id id Filter by idrange.- id:1234
-id:>=1234
-id:<=1234key string Filter by the metafield definition keyfield. - key:some-keynamespace string Filter by the metafield definition namespacefield. - namespace:some-namespaceowner_type string Filter by the metafield definition field. - type string Filter by the metafield definition typefield. - updated_at time Filter by the date and time when the metafield definition was last updated. -
-| You can apply one or more filters to a query. Learn more about Shopify API search syntax.
- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
- Anchor to sortKeysort•Metafield
Key Definition Sort Keys Default:ID Sort the underlying list using a key. If your query is slow or returns an error, then try specifying a sort key that matches the field used in the search.
Arguments
- Anchor to presentmentPricespresentment•Product
Prices Variant Price Pair Connection! non-nullDeprecated - Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to presentmentCurrenciespresentment•[Currency
Currencies Code!] The presentment currencies prices should return in.
- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
Arguments
- Anchor to sellingPlanGroupCountselling•Int!
Plan Group Count non-nullDeprecated - Anchor to storefrontIdstorefront•Storefront
Id ID! non-nullDeprecated - Anchor to taxCodetax•String
Code Deprecated