API: products
Retrieve your products, get some statistics, or keep track of your inventory. This endpoint also lets you update the inventory if needed.
Please note that you can't create products with the API. Products are created or updated whenever an order is completed or a URL is fetched from the Dashboard or API. You will need to define products on your site using our HTML attributes or with our JavaScript API.
GET /products
This method returns a list of products.
Resource URL
GET https://app.snipcart.com/api/products
Headers
Name | Value | Required? | Description |
---|---|---|---|
Accept | application/json |
Yes | Our API only accepts application/json content type, so you must always specify Accept: application/json header in each request you make. |
Parameters
Name | Required? | Type | Description |
---|---|---|---|
limit |
No | int |
The maximum number of items returned by the request. Default value is 20. |
offset |
No | int |
The number of items that will be skipped. Default value is 0. |
userDefinedId |
No | string |
The product ID defined by the user. |
from |
No | datetime |
Filter products to return those that have been bought from specified date. |
to |
No | datetime |
Filter products to return those that have been bought until specified date. |
orderBy |
No | string |
Sort products to return them in the requested order. Possible values: nbrSales (return products sorted by the number of times they were sold), salesValue (return products sorted by the total sales generated by these products) and creationDate (return products sorted by creation date, newest products first). |
Example request
curl -H "Accept: application/json" \
https://app.snipcart.com/api/products?limit=50&offset=0 \
-u {API_KEY}:
Example response
{
"totalItems": 29,
"offset": 0,
"limit": 50,
"items": [
{
"mode": "Test",
"userDefinedId": "HGW",
"url": "/snipcart-jekyll-integration",
"price": 20.99,
"name": "How Google Works",
"description": "",
"image": "http://d.gr-assets.com/books/1422538855l/23158207.jpg",
"archived": false,
"statistics": {
"numberOfSales": 29,
"totalSales": 608.71
},
"customFields": [],
"metadata": {
"votes": 95,
"score": 336
},
"id": "325bfaef-d665-4c9a-a965-f5bd6ab46934",
"creationDate": "2016-05-25T21:21:27.213Z",
"modificationDate": "2016-11-01T16:20:44.377Z"
},
{
"mode": "Test",
"userDefinedId": "AP1",
"url": "/product-examples.html",
"price": 299.99,
"name": "Android Phone",
"description": "",
"image": "",
"archived": false,
"inventoryManagementMethod": "Variant",
"stock": 1,
"totalStock": 11,
"allowOutOfStockPurchases": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0
},
"customFields": [
{
"name": "Size",
"operation": "+200.00",
"type": "dropdown",
"options": "16GB|32GB[+50.00]|128GB[+200.00]",
"required": false,
"value": "128GB",
"optionsArray": [
"16GB",
"32GB",
"128GB"
]
},
{
"name": "Color",
"operation": "",
"type": "dropdown",
"options": "Black|Blue|Red|White",
"required": false,
"value": "Blue",
"optionsArray": [
"Black",
"Blue",
"Red",
"White"
]
}
],
"variants": [
{
"stock": 10,
"variation": [
{
"name": "Size",
"option": "16GB"
},
{
"name": "Color",
"option": "Black"
}
],
"allowOutOfStockPurchases": true
},
{
"stock": 1,
"variation": [
{
"name": "Size",
"option": "32GB"
},
{
"name": "Color",
"option": "Red"
}
],
"allowOutOfStockPurchases": false
}
],
"metadata": {
"meta": true
},
"id": "3932ecd1-6508-4209-a7c6-8da4cc75590d",
"creationDate": "2016-11-03T12:51:04.297Z",
"modificationDate": "2016-11-03T12:51:28.873Z"
}
]
}
GET /products/{id}
This method returns a product by its identifier. The ID can be the unique ID generated by Snipcart or the ID specified by the user.
Resource URL
GET https://app.snipcart.com/api/products/3932ecd1-6508-4209-a7c6-8da4cc75590d
Headers
Name | Value | Required? | Description |
---|---|---|---|
Accept | application/json |
Yes | Our API only accepts application/json content type, so you must always specify Accept: application/json header in each request you make. |
Parameters
Name | Required? | Type | Description |
---|---|---|---|
id |
No | string |
The unique ID of the product generated by Snipcart. Can also be the user defined ID. |
Example request
curl -H "Accept: application/json" \
https://app.snipcart.com/api/products/AP1 \
-u {API_KEY}:
Example response
{
"mode": "Test",
"userDefinedId": "AP1",
"url": "/product-examples.html",
"price": 299.99,
"name": "Android Phone",
"description": "",
"image": "",
"archived": false,
"inventoryManagementMethod": "Variant",
"stock": 1,
"totalStock": 11,
"allowOutOfStockPurchases": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0
},
"customFields": [
{
"name": "Size",
"operation": "+200.00",
"type": "dropdown",
"options": "16GB|32GB[+50.00]|128GB[+200.00]",
"required": false,
"value": "128GB",
"optionsArray": [
"16GB",
"32GB",
"128GB"
]
},
{
"name": "Color",
"operation": "",
"type": "dropdown",
"options": "Black|Blue|Red|White",
"required": false,
"value": "Blue",
"optionsArray": [
"Black",
"Blue",
"Red",
"White"
]
}
],
"variants": [
{
"stock": 10,
"variation": [
{
"name": "Size",
"option": "16GB"
},
{
"name": "Color",
"option": "Black"
}
],
"allowOutOfStockPurchases": true
},
{
"stock": 1,
"variation": [
{
"name": "Size",
"option": "32GB"
},
{
"name": "Color",
"option": "Red"
}
],
"allowOutOfStockPurchases": false
}
],
"metadata": null,
"id": "3932ecd1-6508-4209-a7c6-8da4cc75590d",
"creationDate": "2016-11-03T12:51:04.297Z",
"modificationDate": "2016-11-03T12:51:28.873Z"
}
POST /products
This method fetches the URL passed in parameter and generates products found on the page. When the fetchUrl
value is a standard HTML page, we will find all buttons on the page having the snipcart-add-item
css class. These products will then be imported into Snipcart.
You can also define your products with a JSON object. You can take a look at our JSON Crawler entry to understand how to define products.
In the response, you can expect to receive newly imported products as a JSON array.
Resource URL
POST https://app.snipcart.com/api/products
Headers
Name | Value | Required? | Description |
---|---|---|---|
Accept | application/json |
Yes | Our API only accepts application/json content type, so you must always specify Accept: application/json header in each request you make. |
Content-Type | application/json |
Yes | The request body needs to be JSON so we specify the content type. |
Parameters
Name | Required? | Type | Description |
---|---|---|---|
fetchUrl |
Yes | string |
The URL where we will find product details. |
Example request
curl https://app.snipcart.com/api/products
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-u {API_KEY}: \
-d "{fetchUrl: 'https://yoursite.com/products.json'}"
Example response
[
{
"mode": "Test",
"userDefinedId": "123",
"url": "/products.json",
"price": 10.00,
"name": "Product 123",
"description": null,
"image": null,
"archived": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0
},
"customFields": [],
"metadata": null,
"id": "3e330cf2-6962-4875-8c9d-73f337b6de3e",
"creationDate": "2016-12-13T15:54:24.5595583Z",
"modificationDate": "2016-12-13T15:54:24.5595583Z"
},
{
"mode": "Test",
"userDefinedId": "456",
"url": "/products.json",
"price": 40.00,
"name": "Product 456",
"description": null,
"image": null,
"archived": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0
},
"customFields": [],
"metadata": null,
"id": "c148bdb5-92ea-4c50-a7ec-46763dd1217a",
"creationDate": "2016-12-13T15:54:24.5908458Z",
"modificationDate": "2016-12-13T15:54:24.5908458Z"
}
]
PUT /products/{id}
This method allows to update a specific product. The ID can be the unique ID generated by Snipcart or the ID specified by the user.
Since products are not defined on our side, you can only change some attributes such as inventory values.
Resource URL
GET https://app.snipcart.com/api/products/3932ecd1-6508-4209-a7c6-8da4cc75590d
Headers
Name | Value | Required? | Description |
---|---|---|---|
Accept | application/json |
Yes | Our API only accepts application/json content type, so you must always specify Accept: application/json header in each request you make. |
Parameters
Name | Required? | Type | Description |
---|---|---|---|
id |
No | string |
The unique ID of the product generated by Snipcart. Can also be the user defined ID. This parameter is passed through the URL and not the request body |
inventoryManagementMethod |
No | enum |
Specifies how inventory should be tracked for this product. Can be Single or Variant . Variant can be used when a product has some dropdown custom fields. |
variants |
No | object |
Allows to set stock per product variant. See variant description below. |
stock |
No | int |
The number of items in stock. Will be used when inventoryManagementMethod is Single . |
allowOutOfStockPurchases |
No | bool |
If true a customer will be able to buy the product even if it's out of stock. The stock level might be negative. If false it will be impossible to buy the product. |
Variant parameters
When inventoryManagementMethod
is Variant
you must define a list of variants with their stock level for the product.
Name | Required ? | Type | Description |
---|---|---|---|
variation |
yes | array |
The specifics of the variation. Must be custom fields possible values. For example [{ "name": "Size", "option": "32GB" }, { "name": "Color", "option": "Black " }] |
stock |
No | int |
The number of items of this variation in stock. |
allowOutOfStockPurchases |
No | bool |
If true a customer will be able to buy the product variation even if it's out of stock. The stock level might be negative. If false it will be impossible to buy the product variation. |
Example request
curl https://app.snipcart.com/api/products/AP1
-X PUT \
-H "Accept: application/json" \
-H "Content-type: application/json" \
-u {API_KEY} \
-d "{ 'inventoryManagementMethod': 'Single', 'stock': 20 }"
Example response
{
"mode": "Test",
"userDefinedId": "AP1",
"url": "/product-examples.html",
"price": 299.99,
"name": "Android Phone",
"description": "",
"image": "",
"archived": false,
"inventoryManagementMethod": "Single",
"stock": 20,
"totalStock": 20,
"allowOutOfStockPurchases": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0
},
"customFields": [
{
"name": "Size",
"operation": "+200.00",
"type": "dropdown",
"options": "16GB|32GB[+50.00]|128GB[+200.00]",
"required": false,
"value": "128GB",
"optionsArray": [
"16GB",
"32GB",
"128GB"
]
},
{
"name": "Color",
"operation": "",
"type": "dropdown",
"options": "Black|Blue|Red|White",
"required": false,
"value": "Blue",
"optionsArray": [
"Black",
"Blue",
"Red",
"White"
]
}
],
"metadata": null,
"id": "3932ecd1-6508-4209-a7c6-8da4cc75590d",
"creationDate": "2016-11-03T12:51:04.297Z",
"modificationDate": "2016-11-03T12:51:28.873Z"
}
DELETE /products/{id}
This method archives the product. An archived product won't be visible in the products listing anymore. However, it will be automatically restored if it's added to a cart again or manually fetched.
Resource URL
DELETE https://app.snipcart.com/api/products/{id}
Headers
Name | Value | Required? | Description |
---|---|---|---|
Accept | application/json |
Yes | Our API only accepts application/json content type, so you must always specify Accept: application/json header in each request you make. |
Content-Type | application/json |
Yes | The request body needs to be JSON so we specify the content type. |
Parameters
Name | Required? | Type | Description |
---|---|---|---|
id |
No | string |
The unique ID of the product generated by Snipcart. Can also be the user defined ID. This parameter is passed through the URL and not the request body |
Example request
curl https://app.snipcart.com/api/products/{id}
-X "DELETE" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-u {API_KEY}: