Skip to main content

Product API reference

You can make a GET request for the information of any product using the Ajax Product API.

All Ajax API requests should use locale-aware URLs to give visitors a consistent experience.


Anchor to GET /{locale}/products/{product-handle}.jsGET /{locale}/products/{product-handle}.js

Get the JSON of a product using the product handle.

All monetary properties are returned in the customer's presentment currency. To check the customer's presentment currency, you can use the currency field of the /{locale}/cart.js endpoint. To learn more about selling in multiple currencies, see Support multiple currencies and languages.

fetch(window.Shopify.routes.root + 'products/red-rain-coat.js')
.then(response => response.json())
.then(product => alert('The title of this product is ' + product.title));

The JSON of the product.

Example:

{
"id": 329678821,
"title": "Red Rain Coat",
"handle": "red-rain-coat",
"description": "<p>Lorem Ipsum.</p>",
"published_at": "2014-06-12T16:28:11-04:00",
"created_at": "2014-06-12T16:28:13-04:00",
"vendor": "Shopify",
"type": "Coat",
"tags": [
"Spring"
],
"price": 12900,
"price_min": 12900,
"price_max": 12900,
"available": true,
"price_varies": false,
"compare_at_price": null,
"compare_at_price_min": 0,
"compare_at_price_max": 0,
"compare_at_price_varies": false,
"variants": [
{
"id": 794864229,
"title": "Small",
"options": [
"Small"
],
"option1": "Small",
"option2": null,
"option3": null,
"price": 12900,
"weight": 0,
"compare_at_price": null,
"inventory_management": "shopify",
"available": true,
"sku": null,
"requires_shipping": true,
"taxable": true,
"barcode": "49738645"
},
{
"id": 794864233,
"title": "Medium",
"options": [
"Medium"
],
"option1": "Medium",
"option2": null,
"option3": null,
"price": 12900,
"weight": 0,
"compare_at_price": null,
"inventory_management": "shopify",
"available": true,
"sku": null,
"requires_shipping": true,
"taxable": true,
"barcode": "49738657"
},
{
"id": 794864237,
"title": "Large",
"options": [
"Large"
],
"option1": "Large",
"option2": null,
"option3": null,
"price": 12900,
"weight": 0,
"compare_at_price": null,
"inventory_management": "shopify",
"available": true,
"sku": null,
"requires_shipping": true,
"taxable": true,
"barcode": "49738673"
}
],
"images": [
"//cdn.shopify.com/s/files/1/0040/7092/products/red-rain-coat.jpeg?v=1402604893"
],
"featured_image": "//cdn.shopify.com/s/files/1/0040/7092/products/red-rain-coat.jpeg?v=1402604893",
"options": [
{
"name": "Size",
"position": 1
}
],
"url": "/products/red-rain-coat"
}
Note

The JSON of the product can contain a maximum of 250 variants in the variants array.

Anchor to Selling plan exampleSelling plan example

Products with selling plans will have the following additional properties available at /{locale}/products/<handle>.js.

{
"id":5290511958181,
// ...
"variants":[
{
"id":34620489400485,
// ...
"requires_selling_plan":false,
"selling_plan_allocations":[
{
"price":3120,
"compare_at_price":3900,
"per_delivery_price":3120,
"selling_plan_id":360613,
"selling_plan_group_id":14699254537353206000
},
{
"price":3510,
"compare_at_price":3900,
"per_delivery_price":3510,
"selling_plan_id":393381,
"selling_plan_group_id":14699254537353206000
}
]
}
],
"requires_selling_plan":false,
"selling_plan_groups":[
{
"id":14699254537353206000,
"name":"Subscribe and Save",
"options":[
{
"name":"Delivery Frequency",
"position":1,
"values":[
"Month",
"Week"
]
},
{
"name":"Billing Frequency",
"position":2,
"values":[
"Month",
"Week"
]
}
],
"selling_plans":[
{
"id":360613,
"name":"Pay every month, delivery every month | save 20%",
"description":"No commitment · Auto-renews · Skip or cancel anytime",
"options":[
{
"name":"Delivery Frequency",
"position":1,
"value":"Month"
},
{
"name":"Billing Frequency",
"position":2,
"value":"Month"
}
],
"recurring_deliveries":true
},
{

Was this page helpful?