Skip to main content

The REST Admin API is a legacy API as of October 1, 2024. Starting April 1, 2025, all new public apps must be built exclusively with the GraphQL Admin API. For details and migration steps, visit our migration guide.

Product Variant

Requires products access scope.
Important

Listing, creating, updating, and deleting product variants is deprecated as of REST API 2024-04. For more information, refer to the guide to the new product model.

Important

Apps can no longer set inventory using inventory_quantity. For more information, refer to the Inventory Level resource.

A variant can be added to a Product resource to represent one version of a product with several options. The Product resource will have a variant for every possible combination of its options. Each product can have a maximum of three options and a maximum of 100 variants.
Was this section helpful?

Anchor to

The Product Variant resource

Anchor to

Properties


barcode

The barcode, UPC, or ISBN number for the product.


compare_at_price

The original price of the item before an adjustment or a sale.


created_at

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


fulfillment_service

The handle of a fulfillment service that stocks a product variant.

As of API version 2025-01, all fulfillment services permit SKU sharing. This field returns gift_card for gift card variants and manual for all other variants. Use the InventoryLevel resource to determine where a variant is stocked.

Setting this field activates inventory at the specified fulfillment service's location, but doesn't unstock the variant from other locations. The field value itself still returns manual after the write (except for gift card variants, which continue to return gift_card). Prefer the InventoryLevel resource for managing location assignments explicitly.

Learn more about managing inventory quantities and states.


grams
deprecated

The weight of the product variant in grams.


id
->
id

The unique numeric identifier for the product variant.


image_id

The unique numeric identifier for a product's image. The image must be associated to the same product as the variant.


inventory_item_id

The unique identifier for the inventory item, which is used in the Inventory API to query for inventory information.


inventory_management

The fulfillment service that tracks the number of items in stock for the product variant. As of API version 2025-01, all fulfillment services permit SKU sharing, so this field returns shopify for all variants. Use the InventoryLevel resource to determine where a variant is stocked. Valid values:

Show inventory_management properties
  • shopify: Shopify tracks inventory for this variant.
  • null: You aren't tracking inventory on the variant.

inventory_policy

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

Show inventory_policy properties
  • deny: Customers are not allowed to place orders for the product variant if it's out of stock.
  • continue: Customers are allowed to place orders for the product variant if it's out of stock.
Default value: deny.

inventory_quantity
read-only

An aggregate of inventory across all locations. To adjust inventory at a specific location, use the InventoryLevel resource.


old_inventory_quantity
deprecated

This property is deprecated. Use the InventoryLevel resource instead.


Was this section helpful?
{}

The Product Variant resource

{
"barcode": "1234_pink",
"compare_at_price": "299.00",
"created_at": "2012-08-24T14:01:47-04:00",
"fulfillment_service": "manual",
"grams": 567,
"id": 808950810,
"image_id": 434522,
"inventory_item_id": 342916,
"inventory_management": "shopify",
"inventory_policy": "continue",
"inventory_quantity": 10,
"old_inventory_quantity": 5,
"option": {
"option1": "Pink"
},
"presentment_prices": {
"presentment_prices": [
{
"price": {
"currency_code": "USD",
"amount": "199.99"
},
"compare_at_price": {
"currency_code": "USD",
"amount": "249.99"
}
},
{
"price": {
"currency_code": "EUR",
"amount": "158.95"
},
"compare_at_price": {
"currency_code": "EUR",
"amount": "198.95"
}
},
{
"price": {
"currency_code": "GBP",
"amount": "143.00"
},
"compare_at_price": {
"currency_code": "GBP",
"amount": "179.00"
}
},
{
"price": {
"currency_code": "JPY",
"amount": "22400"
},
"compare_at_price": {
"currency_code": "JPY",
"amount": "28000"
}
}
]
},
"position": 1,
"price": "199.00",
"product_id": 632910392,
"requires_shipping": true,
"sku": "IPOD2008PINK",
"taxable": true,
"tax_code": "DA040000",
"title": "Pink",
"updated_at": "2012-08-24T14:01:47-04:00",
"weight": 100,
"weight_unit": "oz"
}

Anchor to POST request, Create a new Product Variant
post
Create a new Product Variant

Creates a new product variant

Anchor to Parameters of Create a new Product VariantParameters


api_version
string
required

product_id
string
required

Was this section helpful?

Anchor to post-products-product-id-variants-examplesExamples

Create a new product variant

Path parameters
product_id=632910392
string
required

Create a new product variant with a metafield

Path parameters
product_id=632910392
string
required

Create a new product variant with an image

Path parameters
product_id=632910392
string
required
Was this section helpful?
post

/admin/api/2026-01/products/632910392/variants.json

curl -d '{"variant":{"option1":"Yellow","price":"1.00"}}' \
-X POST "https://your-development-store.myshopify.com/admin/api/2026-01/products/632910392/variants.json" \
-H "X-Shopify-Access-Token: {access_token}" \
-H "Content-Type: application/json"
{}

Response

JSON
HTTP/1.1 201 Created
{
"variant": {
"id": 1070325042,
"product_id": 632910392,
"title": "Yellow",
"price": "1.00",
"position": 5,
"inventory_policy": "deny",
"compare_at_price": null,
"option1": "Yellow",
"option2": null,
"option3": null,
"created_at": "2026-01-09T17:30:30-05:00",
"updated_at": "2026-01-09T17:30:30-05:00",
"taxable": true,
"barcode": null,
"fulfillment_service": "manual",
"grams": 0,
"inventory_management": "shopify",
"requires_shipping": true,
"sku": null,
"weight": 0,
"weight_unit": "lb",
"inventory_item_id": 1070325042,
"inventory_quantity": 0,
"old_inventory_quantity": 0,
"presentment_prices": [
{
"price": {
"amount": "1.00",
"currency_code": "USD"
},
"compare_at_price": null
}
],
"admin_graphql_api_id": "gid://shopify/ProductVariant/1070325042",
"image_id": null
}
}

Retrieves a list of product variants. Note: This endpoint implements pagination by using links that are provided in the response header. To learn more, refer to Make paginated requests to the REST Admin API.


api_version
string
required

product_id
string
required

fields

A comma-separated list of fields to include in the response


limit
≤ 250
default 50

Return up to this many results per page


presentment_currencies

Return presentment prices in only certain currencies, specified by a comma-separated list of ISO 4217 currency codes.


since_id

Restrict results to after the specified ID


Was this section helpful?

Retrieve all variants for a product

Path parameters
product_id=632910392
string
required

Retrieve all variants for a product after a specified ID

Path parameters
product_id=632910392
string
required
Query parameters
since_id=49148385

Restrict results to after the specified ID

Retrieve all variants for a product with prices in specified presentment currencies

Path parameters
product_id=632910392
string
required
Query parameters
presentment_currencies=USD,CAD

Return presentment prices in only certain currencies, specified by a comma-separated list of ISO 4217 currency codes.

Was this section helpful?
get

/admin/api/2026-01/products/632910392/variants.json

curl -X GET "https://your-development-store.myshopify.com/admin/api/2026-01/products/632910392/variants.json" \
-H "X-Shopify-Access-Token: {access_token}"
{}

Response

JSON
HTTP/1.1 200 OK
{
"variants": [
{
"id": 39072856,
"product_id": 632910392,
"title": "Green",
"price": "199.00",
"position": 3,
"inventory_policy": "continue",
"compare_at_price": null,
"option1": "Green",
"option2": null,
"option3": null,
"created_at": "2026-01-09T17:04:11-05:00",
"updated_at": "2026-01-09T17:04:11-05:00",
"taxable": true,
"barcode": "1234_green",
"fulfillment_service": "manual",
"grams": 567,
"inventory_management": "shopify",
"requires_shipping": true,
"sku": "IPOD2008GREEN",
"weight": 1.25,
"weight_unit": "lb",
"inventory_item_id": 39072856,
"inventory_quantity": 30,
"old_inventory_quantity": 30,
"presentment_prices": [
{
"price": {
"amount": "199.00",
"currency_code": "USD"
},
"compare_at_price": null
}

Anchor to GET request, Receive a count of all Product Variants
get
Receive a count of all Product Variants

Retrieves a count of product variants


api_version
string
required

product_id
string
required

Was this section helpful?

Retrieve a count all variants for a product

Path parameters
product_id=632910392
string
required
Was this section helpful?
get

/admin/api/2026-01/products/632910392/variants/count.json

curl -X GET "https://your-development-store.myshopify.com/admin/api/2026-01/products/632910392/variants/count.json" \
-H "X-Shopify-Access-Token: {access_token}"
{}

Response

JSON
HTTP/1.1 200 OK
{
"count": 4
}

Retrieves a single product variant by ID


api_version
string
required

variant_id
string
required

fields

A comma-separated list of fields to include in the response


Was this section helpful?

Retrieve a product variant by ID

Path parameters
variant_id=808950810
string
required
Was this section helpful?
get

/admin/api/2026-01/variants/808950810.json

curl -X GET "https://your-development-store.myshopify.com/admin/api/2026-01/variants/808950810.json" \
-H "X-Shopify-Access-Token: {access_token}"
{}

Response

JSON
HTTP/1.1 200 OK
{
"variant": {
"id": 808950810,
"product_id": 632910392,
"title": "Pink",
"price": "199.00",
"position": 1,
"inventory_policy": "continue",
"compare_at_price": null,
"option1": "Pink",
"option2": null,
"option3": null,
"created_at": "2026-01-09T17:04:11-05:00",
"updated_at": "2026-01-09T17:04:11-05:00",
"taxable": true,
"barcode": "1234_pink",
"fulfillment_service": "manual",
"grams": 567,
"inventory_management": "shopify",
"requires_shipping": true,
"sku": "IPOD2008PINK",
"weight": 1.25,
"weight_unit": "lb",
"inventory_item_id": 808950810,
"inventory_quantity": 10,
"old_inventory_quantity": 10,
"presentment_prices": [
{
"price": {
"amount": "199.00",
"currency_code": "USD"
},
"compare_at_price": null
}
],
"tax_code": "DA040000",
"admin_graphql_api_id": "gid://shopify/ProductVariant/808950810",
"image_id": 562641783
}
}

Updates an existing product variant


api_version
string
required

variant_id
string
required

Was this section helpful?

Add a metafield to an existing variant

Path parameters
variant_id=808950810
string
required

Add an existing image to an existing variant

Path parameters
variant_id=808950810
string
required

Update the title and price of an existing variant

Path parameters
variant_id=808950810
string
required
Was this section helpful?
put

/admin/api/2026-01/variants/808950810.json

curl -d '{"variant":{"id":808950810,"metafields":[{"key":"new","value":"newvalue","type":"single_line_text_field","namespace":"global"}]}}' \
-X PUT "https://your-development-store.myshopify.com/admin/api/2026-01/variants/808950810.json" \
-H "X-Shopify-Access-Token: {access_token}" \
-H "Content-Type: application/json"
{}

Response

JSON
HTTP/1.1 200 OK
{
"variant": {
"id": 808950810,
"product_id": 632910392,
"title": "Pink",
"price": "199.00",
"position": 1,
"inventory_policy": "continue",
"compare_at_price": null,
"option1": "Pink",
"option2": null,
"option3": null,
"created_at": "2026-01-09T17:04:11-05:00",
"updated_at": "2026-01-09T17:04:11-05:00",
"taxable": true,
"barcode": "1234_pink",
"fulfillment_service": "manual",
"grams": 567,
"inventory_management": "shopify",
"requires_shipping": true,
"sku": "IPOD2008PINK",
"weight": 1.25,
"weight_unit": "lb",
"inventory_item_id": 808950810,
"inventory_quantity": 10,
"old_inventory_quantity": 10,
"presentment_prices": [
{
"price": {
"amount": "199.00",
"currency_code": "USD"
},
"compare_at_price": null
}
],
"admin_graphql_api_id": "gid://shopify/ProductVariant/808950810",
"image_id": 562641783
}
}


api_version
string
required

product_id
string
required

variant_id
string
required

Was this section helpful?
Was this section helpful?
del

/admin/api/2026-01/products/632910392/variants/808950810.json

curl -X DELETE "https://your-development-store.myshopify.com/admin/api/2026-01/products/632910392/variants/808950810.json" \
-H "X-Shopify-Access-Token: {access_token}"
{}

Response

JSON
HTTP/1.1 200 OK
{}