Returns a paginated list of variants for a product, including the master variant.
Required scope: read_products (for API-key authentication).
GET
/
api
/
v3
/
admin
/
products
/
{product_id}
/
variants
Spree Admin SDK
import { createAdminClient } from '@spree/admin-sdk'
const client = createAdminClient({
baseUrl: 'https://your-store.com',
secretKey: 'sk_xxx',
})
const { data: variants } = await client.products.variants.list('prod_86Rf07xd4z', {
expand: ['prices', 'stock_items'],
})spree api get /products/{product_id}/variants -d '{"expand":["prices","stock_items"]}'{
"data": [
{
"id": "variant_UkLWZg9DAJ",
"product_id": "prod_UkLWZg9DAJ",
"sku": "SKU-103",
"options_text": "",
"track_inventory": true,
"media_count": 0,
"preorder_ships_at": null,
"thumbnail_url": null,
"purchasable": false,
"in_stock": false,
"backorderable": false,
"preorder": false,
"weight": 0,
"height": null,
"width": null,
"depth": null,
"price": {
"id": null,
"amount": null,
"amount_in_cents": 0,
"compare_at_amount": null,
"compare_at_amount_in_cents": null,
"currency": "USD",
"display_amount": "$0.00",
"display_compare_at_amount": null,
"price_list_id": null
},
"original_price": null,
"option_values": [],
"metadata": {},
"position": 1,
"cost_price": "17.0",
"cost_currency": "USD",
"barcode": null,
"weight_unit": "lb",
"dimensions_unit": null,
"backorder_limit": null,
"deleted_at": null,
"created_at": "2026-07-26T14:25:55.640Z",
"updated_at": "2026-07-26T14:25:55.652Z",
"preorderable": false,
"tax_category_id": "taxcat_UkLWZg9DAJ",
"available_stock": 0,
"reserved_quantity": 0,
"total_on_hand": 0,
"product_name": "Product 844847"
},
{
"id": "variant_gbHJdmfrXB",
"product_id": "prod_UkLWZg9DAJ",
"sku": "SKU-104",
"options_text": "Size: S",
"track_inventory": true,
"media_count": 0,
"preorder_ships_at": null,
"thumbnail_url": null,
"purchasable": true,
"in_stock": false,
"backorderable": true,
"preorder": false,
"weight": 142.81,
"height": 131.7,
"width": 77.21,
"depth": 115.72,
"price": {
"id": "price_gbHJdmfrXB",
"amount": "19.99",
"amount_in_cents": 1999,
"compare_at_amount": null,
"compare_at_amount_in_cents": null,
"currency": "USD",
"display_amount": "$19.99",
"display_compare_at_amount": null,
"price_list_id": null
},
"original_price": null,
"option_values": [
{
"id": "optval_UkLWZg9DAJ",
"option_type_id": "opt_UkLWZg9DAJ",
"name": "size-19",
"label": "S",
"position": 1,
"color_code": null,
"option_type_name": "foo-size-28",
"option_type_label": "Size",
"image_url": null,
"metadata": {},
"created_at": "2026-07-26T14:25:55.670Z",
"updated_at": "2026-07-26T14:25:55.670Z"
}
],
"metadata": {},
"position": 2,
"cost_price": "17.0",
"cost_currency": "USD",
"barcode": null,
"weight_unit": "lb",
"dimensions_unit": null,
"backorder_limit": null,
"deleted_at": null,
"created_at": "2026-07-26T14:25:55.667Z",
"updated_at": "2026-07-26T14:25:55.681Z",
"preorderable": false,
"tax_category_id": "taxcat_UkLWZg9DAJ",
"available_stock": 0,
"reserved_quantity": 0,
"total_on_hand": 0,
"product_name": "Product 844847"
}
],
"meta": {
"page": 1,
"limit": 25,
"count": 2,
"pages": 1,
"from": 1,
"to": 2,
"in": 2,
"previous": null,
"next": null
}
}Authorizations
Secret API key for admin access
JWT token for admin user authentication
Headers
Bearer token for admin authentication
Path Parameters
Product ID
Query Parameters
Page number
Number of records per page
Comma-separated associations to expand (e.g., images, prices, stock_items, option_values). Use dot notation for nested expand (max 4 levels).
Comma-separated list of fields to include (e.g., sku,price,stock). id is always included.
Response
200 - application/json
variants found
Was this page helpful?
⌘I
Spree Admin SDK
import { createAdminClient } from '@spree/admin-sdk'
const client = createAdminClient({
baseUrl: 'https://your-store.com',
secretKey: 'sk_xxx',
})
const { data: variants } = await client.products.variants.list('prod_86Rf07xd4z', {
expand: ['prices', 'stock_items'],
})spree api get /products/{product_id}/variants -d '{"expand":["prices","stock_items"]}'{
"data": [
{
"id": "variant_UkLWZg9DAJ",
"product_id": "prod_UkLWZg9DAJ",
"sku": "SKU-103",
"options_text": "",
"track_inventory": true,
"media_count": 0,
"preorder_ships_at": null,
"thumbnail_url": null,
"purchasable": false,
"in_stock": false,
"backorderable": false,
"preorder": false,
"weight": 0,
"height": null,
"width": null,
"depth": null,
"price": {
"id": null,
"amount": null,
"amount_in_cents": 0,
"compare_at_amount": null,
"compare_at_amount_in_cents": null,
"currency": "USD",
"display_amount": "$0.00",
"display_compare_at_amount": null,
"price_list_id": null
},
"original_price": null,
"option_values": [],
"metadata": {},
"position": 1,
"cost_price": "17.0",
"cost_currency": "USD",
"barcode": null,
"weight_unit": "lb",
"dimensions_unit": null,
"backorder_limit": null,
"deleted_at": null,
"created_at": "2026-07-26T14:25:55.640Z",
"updated_at": "2026-07-26T14:25:55.652Z",
"preorderable": false,
"tax_category_id": "taxcat_UkLWZg9DAJ",
"available_stock": 0,
"reserved_quantity": 0,
"total_on_hand": 0,
"product_name": "Product 844847"
},
{
"id": "variant_gbHJdmfrXB",
"product_id": "prod_UkLWZg9DAJ",
"sku": "SKU-104",
"options_text": "Size: S",
"track_inventory": true,
"media_count": 0,
"preorder_ships_at": null,
"thumbnail_url": null,
"purchasable": true,
"in_stock": false,
"backorderable": true,
"preorder": false,
"weight": 142.81,
"height": 131.7,
"width": 77.21,
"depth": 115.72,
"price": {
"id": "price_gbHJdmfrXB",
"amount": "19.99",
"amount_in_cents": 1999,
"compare_at_amount": null,
"compare_at_amount_in_cents": null,
"currency": "USD",
"display_amount": "$19.99",
"display_compare_at_amount": null,
"price_list_id": null
},
"original_price": null,
"option_values": [
{
"id": "optval_UkLWZg9DAJ",
"option_type_id": "opt_UkLWZg9DAJ",
"name": "size-19",
"label": "S",
"position": 1,
"color_code": null,
"option_type_name": "foo-size-28",
"option_type_label": "Size",
"image_url": null,
"metadata": {},
"created_at": "2026-07-26T14:25:55.670Z",
"updated_at": "2026-07-26T14:25:55.670Z"
}
],
"metadata": {},
"position": 2,
"cost_price": "17.0",
"cost_currency": "USD",
"barcode": null,
"weight_unit": "lb",
"dimensions_unit": null,
"backorder_limit": null,
"deleted_at": null,
"created_at": "2026-07-26T14:25:55.667Z",
"updated_at": "2026-07-26T14:25:55.681Z",
"preorderable": false,
"tax_category_id": "taxcat_UkLWZg9DAJ",
"available_stock": 0,
"reserved_quantity": 0,
"total_on_hand": 0,
"product_name": "Product 844847"
}
],
"meta": {
"page": 1,
"limit": 25,
"count": 2,
"pages": 1,
"from": 1,
"to": 2,
"in": 2,
"previous": null,
"next": null
}
}
