Skip to main content
query

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 productVariant 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.

•ID!
required

The ID of the ProductVariant to return.


Was this section helpful?

•ProductVariant

The ProductVariant 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 ProductVariant object to manage the full lifecycle and configuration of a product's variants. Common use cases for using the ProductVariant object 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 ProductVariant is associated with a parent Product object. ProductVariant 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:

Learn more about Shopify's product model.

•Boolean!
non-null

Whether the product variant is available for sale.

•String

The value of the barcode associated with the product.

•Money

The compare-at price of the variant in the default shop currency.

•ProductVariantContextualPricing!
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.

Arguments

•ContextualPricingContext!
required

The context used to generate contextual pricing for the variant.


•DateTime!
non-null

The date and time when the variant was created.

•String!
non-null

A default cursor that returns the single next record, sorted ascending by ID.

•DeliveryProfile

The delivery profile for the variant.

•String!
non-null

Display name of the variant, based on product's title + variant's title.

•EventConnection!
non-null

The paginated list of events associated with the host subject.

Arguments

•Int

The first n elements from the paginated list.

•String

The elements that come after the specified cursor.

•Int

The last n elements from the paginated list.

•String

The elements that come before the specified cursor.

•Boolean
Default:false

Reverse the order of the underlying list.

•EventSortKeys
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.

•String

A filter made up of terms, connectives, modifiers, and comparators. You can apply one or more filters to a query. Learn more about Shopify API search syntax.

•string

The action that occured.

Example:

  • action:create
Anchor to comments
•boolean

Whether or not to include comment-events in your search, passing false will exclude comment-events, any other value will include comment-events.

Example:

  • false
  • true
Anchor to created_at
•time

Filter by the date and time when the event occurred. Event data is retained for 1 year.

Example:

  • created_at:>2025-10-21
  • created_at:<now
•id

Filter by id range.

Example:

  • id:1234
  • id:>=1234
  • id:<=1234
Anchor to subject_type
•string

The resource type affected by this event. See EventSubjectType for possible values.

Example:

  • PRODUCT_VARIANT
  • PRODUCT
  • COLLECTION

•ID!
non-null

A globally-unique ID.

•InventoryItem!
non-null

The inventory item, which is used to query for inventory information.

•ProductVariantInventoryPolicy!
non-null

Whether customers are allowed to place an order for the product variant when it's out of stock.

•Int

The total sellable quantity of the variant.

•UnsignedInt64!
non-null

The ID of the corresponding resource in the REST Admin API.

•MediaConnection!
non-null

The media associated with the product variant.

Arguments

•Int

The first n elements from the paginated list.

•String

The elements that come after the specified cursor.

•Int

The last n elements from the paginated list.

•String

The elements that come before the specified cursor.

•Boolean
Default:false

Reverse the order of the underlying list.


•Metafield

A custom field, including its namespace and key, that's associated with a Shopify resource for the purposes of adding and storing additional information.

Arguments

•String

The container the metafield belongs to. If omitted, the app-reserved namespace will be used.

•String!
required

The key for the metafield.


•MetafieldConnection!
non-null

A list of custom fields that a merchant associates with a Shopify resource.

Arguments

•String

The metafield namespace to filter by. If omitted, all metafields are returned.

•[String!]

List of keys of metafields in the format namespace.key, will be returned in the same format.

•Int

The first n elements from the paginated list.

•String

The elements that come after the specified cursor.

•Int

The last n elements from the paginated list.

•String

The elements that come before the specified cursor.

•Boolean
Default:false

Reverse the order of the underlying list.


•Int!
non-null

The order of the product variant in the list of product variants. The first position in the list is 1.

•Money!
non-null

The price of the product variant in the default shop currency.

•Product!
non-null

The product that this variant belongs to.

•ProductConnection!
non-null

A list of products that have product variants that contain this variant as a product component.

Arguments

•Int

The first n elements from the paginated list.

•String

The elements that come after the specified cursor.

•Int

The last n elements from the paginated list.

•String

The elements that come before the specified cursor.

•Boolean
Default:false

Reverse the order of the underlying list.

•String

A filter made up of terms, connectives, modifiers, and comparators. You can apply one or more filters to a query. Learn more about Shopify API search syntax.

Anchor to default
•string

Filter by a case-insensitive search of multiple fields in a document.

Example:

  • query=Bob Norman
  • query=title:green hoodie
Anchor to barcode
•string

Filter by the product variant barcode field.

Example:

  • barcode:ABC-abc-1234
Anchor to bundles
•boolean

Filter by a product bundle. A product bundle is a set of two or more related products, which are commonly offered at a discount.

Example:

  • bundles:true
Anchor to category_id
•string

Filter by the product category ID (product.category.id). A product category is the category of a product from Shopify's Standard Product Taxonomy.

Example:

  • category_id:sg-4-17-2-17
Anchor to collection_id
•id

Filter by the collection id field.

Example:

  • collection_id:108179161409
Anchor to combined_listing_role
•string

Filter by the role of the product in a combined listing.

Valid values:

  • parent
  • child
  • no_role

Example:

  • combined_listing_role:parent
Anchor to created_at
•time

Filter by the date and time when the product was created.

Example:

  • created_at:>'2020-10-21T23:39:20Z'
  • created_at:<now
  • created_at:<='2024'
Anchor to delivery_profile_id
•id

Filter by the delivery profile id field.

Example:

  • delivery_profile_id:108179161409
Anchor to error_feedback
•string

Filter by products with publishing errors.

Anchor to gift_card
•boolean

Filter by the product isGiftCard field.

Example:

  • gift_card:true
•string

Filter by a comma-separated list of product handles.

Example:

  • handle:the-minimal-snowboard
Anchor to has_only_composites
•boolean

Filter by products that have only composite variants.

Example:

  • has_only_composites:true
Anchor to 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.

Example:

  • has_only_default_variant:true
Anchor to has_variant_with_components
•boolean

Filter by products that have variants with associated components.

Example:

  • has_variant_with_components:true
•id

Filter by id range.

Example:

  • id:1234
  • id:>=1234
  • id:<=1234
Anchor to inventory_total
•integer

Filter by inventory count.

Example:

  • inventory_total:0
  • inventory_total:>150
  • inventory_total:>=200
Anchor to is_price_reduced
•boolean

Filter by products that have a reduced price. For more information, refer to the CollectionRule object.

Example:

  • is_price_reduced:true
Anchor to metafields.{namespace}.{key}
•mixed

Filters resources by metafield value. Format: metafields.{namespace}.{key}:{value}. Learn more about querying by metafield value.

Example:

  • metafields.custom.on_sale:true
  • metafields.product.material:"gid://shopify/Metaobject/43458085"
Anchor to out_of_stock_somewhere
•boolean

Filter by products that are out of stock in at least one location.

Example:

  • out_of_stock_somewhere:true
•bigdecimal

Filter by the product variant price field.

Example:

  • price:100.57
Anchor to product_configuration_owner
•string

Filter by the app id field.

Example:

  • product_configuration_owner:10001
Anchor to 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 app ID (Channel.app.id) and one of the valid values. For simple visibility checks, use published_status instead.

Valid values:

  • * {channel_app_id}-approved
  • * {channel_app_id}-rejected
  • * {channel_app_id}-needs_action
  • * {channel_app_id}-awaiting_review
  • * {channel_app_id}-published
  • * {channel_app_id}-demoted
  • * {channel_app_id}-scheduled
  • * {channel_app_id}-provisionally_published

Example:

  • product_publication_status:189769876-approved
Anchor to product_type
•string

Filter by a comma-separated list of product types.

Example:

  • product_type:snowboard
Anchor to publication_ids
•string

Filter by a comma-separated list of publication IDs that are associated with the product.

Example:

  • publication_ids:184111530305,184111694145
Anchor to 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 channel app ID (Channel.app.id) and one of the valid status values.

Valid values:

  • * {channel_app_id}-unset
  • * {channel_app_id}-pending
  • * {channel_app_id}-approved
  • * {channel_app_id}-not_approved

Example:

  • publishable_status:580111-unset
  • publishable_status:580111-pending
Anchor to published_at
•time

Filter by the date and time when the product was published to the online store and other sales channels.

Example:

  • published_at:>2020-10-21T23:39:20Z
  • published_at:<now
  • published_at:<=2024
Anchor to published_status
•string

Filter resources by their visibility and publication state on a channel. Online store channel filtering: - online_store_channel: 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 the channel app ID (Channel.app.id) with suffixes: - {channel_app_id}-published: Returns resources published to the specified channel. - {channel_app_id}-visible: Same as {channel_app_id}-published (kept for backwards compatibility). - {channel_app_id}-intended: Returns resources added to the channel but not yet published. - {channel_app_id}-hidden: Returns resources not added to the channel or not published. Other: - unavailable: Returns resources not published to any channel.

Valid values:

  • online_store_channel
  • published
  • visible
  • unpublished
  • * {channel_app_id}-published
  • * {channel_app_id}-visible
  • * {channel_app_id}-intended
  • * {channel_app_id}-hidden
  • unavailable

Example:

  • published_status:online_store_channel
  • published_status:published
  • published_status:580111-published
  • published_status:580111-hidden
  • published_status:unavailable
•string

Filter by the product variant sku field. Learn more about SKUs.

Example:

  • sku:XYZ-12345
•string

Filter by a comma-separated list of statuses. You can use statuses to manage inventory. Shopify only displays products with an ACTIVE status in online stores, sales channels, and apps.

Valid values:

  • active Default
  • archived
  • draft

Example:

  • status:active,draft
•string

Filter objects by the tag field.

Example:

  • tag:my_tag
Anchor to tag_not
•string

Filter by objects that don’t have the specified tag.

Example:

  • tag_not:my_tag
•string

Filter by the product title field.

Example:

  • title:The Minimal Snowboard
Anchor to updated_at
•time

Filter by the date and time when the product was last updated.

Example:

  • updated_at:>'2020-10-21T23:39:20Z'
  • updated_at:<now
  • updated_at:<='2024'
Anchor to variant_id
•id

Filter by the product variant id field.

Example:

  • variant_id:45779434701121
Anchor to variant_title
•string

Filter by the product variant title field.

Example:

  • variant_title:'Special ski wax'
•string

Filter by the origin or source of the product. Learn more about vendors and managing vendor information.

Example:

  • vendor:Snowdevil
  • vendor:Snowdevil OR vendor:Icedevil

Anchor to productVariantComponentsproductVariantComponents
•ProductVariantComponentConnection!
non-null

A list of the product variant components.

Arguments

•Int

The first n elements from the paginated list.

•String

The elements that come after the specified cursor.

•Int

The last n elements from the paginated list.

•String

The elements that come before the specified cursor.

•Boolean
Default:false

Reverse the order of the underlying list.


•Boolean!
non-null

Whether a product variant requires components. The default value is false. If true, 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.

•[SelectedOption!]!
non-null

List of product options applied to the variant.

Anchor to sellableOnlineQuantitysellableOnlineQuantity
•Int!
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.

•SellingPlanGroupConnection!
non-null

A list of all selling plan groups defined in the current shop associated with the product variant.

Arguments

•Int

The first n elements from the paginated list.

•String

The elements that come after the specified cursor.

•Int

The last n elements from the paginated list.

•String

The elements that come before the specified cursor.

•Boolean
Default:false

Reverse the order of the underlying list.


Anchor to sellingPlanGroupsCountsellingPlanGroupsCount
•Count

Count of selling plan groups associated with the product variant.

•Boolean!
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.

•Boolean!
non-null

Whether a tax is charged when the product variant is sold.

•String!
non-null

The title of the product variant.

•[Translation!]!
non-null

The published translations associated with the resource.

Arguments

•String!
required

Filters translations locale.

•ID

Filters translations by market ID. Use this argument to retrieve content specific to a market.


•MoneyV2

The unit price value for the variant based on the variant measurement.

Anchor to unitPriceMeasurementunitPriceMeasurement
•UnitPriceMeasurement

The unit price measurement for the variant.

•DateTime!
non-null

The date and time (ISO 8601 format) when the product variant was last modified.

•Image
Deprecated

Arguments

•Int
Deprecated
•Int
Deprecated
•CropRegion
Deprecated
•Int
DeprecatedDefault:1

Anchor to metafieldDefinitionsmetafieldDefinitions
•MetafieldDefinitionConnection!
non-nullDeprecated

Arguments

•String

Filter metafield definitions by namespace.

•MetafieldDefinitionPinnedStatus
Default:ANY

Filter by the definition's pinned status.

•Int

The first n elements from the paginated list.

•String

The elements that come after the specified cursor.

•Int

The last n elements from the paginated list.

•String

The elements that come before the specified cursor.

•Boolean
Default:false

Reverse the order of the underlying list.

•MetafieldDefinitionSortKeys
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.

•String

A filter made up of terms, connectives, modifiers, and comparators. You can apply one or more filters to a query. Learn more about Shopify API search syntax.

Anchor to default
•string

Filter by a case-insensitive search of multiple fields in a document.

Example:

  • query=Bob Norman
  • query=title:green hoodie
Anchor to created_at
•time

Filter by the date and time when the metafield definition was created.

Example:

  • created_at:>2020-10-21T23:39:20Z
  • created_at:<now
  • created_at:<=2024
•id

Filter by id range.

Example:

  • id:1234
  • id:>=1234
  • id:<=1234
•string

Filter by the metafield definition key field.

Example:

  • key:some-key
Anchor to namespace
•string

Filter by the metafield definition namespace field.

Example:

  • namespace:some-namespace
Anchor to owner_type
•string

Filter by the metafield definition ownerType field.

Example:

  • owner_type:PRODUCT
•string

Filter by the metafield definition type field.

Example:

  • type:single_line_text_field
Anchor to updated_at
•time

Filter by the date and time when the metafield definition was last updated.

Example:

  • updated_at:>2020-10-21T23:39:20Z
  • updated_at:<now
  • updated_at:<=2024

•ProductVariantPricePairConnection!
non-nullDeprecated

Arguments

Anchor to presentmentCurrenciespresentmentCurrencies
•[CurrencyCode!]

The presentment currencies prices should return in.

•Int

The first n elements from the paginated list.

•String

The elements that come after the specified cursor.

•Int

The last n elements from the paginated list.

•String

The elements that come before the specified cursor.

•Boolean
Default:false

Reverse the order of the underlying list.


Anchor to sellingPlanGroupCountsellingPlanGroupCount
•Int!
non-nullDeprecated
•StorefrontID!
non-nullDeprecated
•String
Deprecated

Was this section helpful?