API : produits
L'API produits vous permet de récupérer vos produits, de consulter leurs statistiques de ventes et de gérer l'inventaire (niveaux de stock et variantes). Les produits ne peuvent pas être créés directement via cette ressource — ils sont générés lorsqu'une commande est complétée ou lorsque vous récupérez une URL (via le tableau de bord ou le point de terminaison POST /products ci-dessous). Définissez vos produits sur votre propre site avec nos attributs HTML ou notre SDK JavaScript.
Les requêtes sont authentifiées avec votre clé API secrète, transmise comme nom d'utilisateur en authentification HTTP Basic avec un mot de passe vide. Avec curl : -u {API_KEY}:. Voir Authentification pour plus de détails.
Table des matières
GET /products
Retourne une liste paginée de produits accompagnés de leurs statistiques de ventes. Chaque élément est un extrait de produit.
URL de la ressource
GET https://app.snipcart.com/api/productsEn-têtes
| Nom | Valeur | Obligatoire? | Description |
|---|---|---|---|
Accept |
application/json |
Oui | L'API ne retourne que du application/json. |
Paramètres de requête
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
offset |
Non | integer |
Nombre d'éléments à ignorer. Valeur par défaut : 0. |
limit |
Non | integer |
Nombre maximal d'éléments à retourner. Valeur par défaut : 20. |
orderBy |
Non | string |
Ordre de tri. Une des valeurs NbrSales (les plus vendus en premier), SalesValue (les ventes totales les plus élevées en premier) ou CreationDate (les plus récents en premier). Par défaut, le tri se fait par nombre de ventes. |
userDefinedId |
Non | string |
Filtre les produits dont l'identifiant défini par l'utilisateur contient cette valeur. |
keywords |
Non | string |
Filtre les produits dont le nom, la description ou l'identifiant défini par l'utilisateur contient cette valeur. |
from |
Non | datetime |
Restreint les statistiques de ventes aux commandes complétées à cette date ou après. |
to |
Non | datetime |
Restreint les statistiques de ventes aux commandes complétées à cette date ou avant. |
archived |
Non | boolean |
Si true, inclut les produits archivés. Valeur par défaut : false (les produits archivés sont exclus). |
excludeZeroSales |
Non | boolean |
Si true, ne retourne que les produits ayant au moins une vente. Valeur par défaut : false. |
Exemple de requête
curl -H "Accept: application/json" \
"https://app.snipcart.com/api/products?limit=50&offset=0" \
-u {API_KEY}:Exemple de réponse
{
"totalItems": 29,
"offset": 0,
"limit": 50,
"items": [
{
"statistics": {
"numberOfSales": 29,
"totalSales": 608.71
},
"price": 20.99,
"categories": [],
"id": "325bfaef-d665-4c9a-a965-f5bd6ab46934",
"userDefinedId": "HGW",
"account_Id": 12345,
"mode": "Test",
"url": "/snipcart-jekyll-integration",
"creationDate": "2016-05-25T21:21:27.213Z",
"modificationDate": "2016-11-01T16:20:44.377Z",
"name": "How Google Works",
"description": "",
"image": "https://example.com/how-google-works.jpg",
"archived": false,
"customFields": [],
"metadata": {
"votes": 95,
"score": 336
},
"fileGuid": null
},
{
"statistics": {
"numberOfSales": 0,
"totalSales": 0.0
},
"totalStock": 11,
"price": 299.99,
"categories": [],
"id": "3932ecd1-6508-4209-a7c6-8da4cc75590d",
"userDefinedId": "AP1",
"account_Id": 12345,
"mode": "Test",
"url": "/product-examples.html",
"creationDate": "2016-11-03T12:51:04.297Z",
"modificationDate": "2016-11-03T12:51:28.873Z",
"name": "Android Phone",
"description": "",
"image": "",
"archived": false,
"stock": 1,
"allowOutOfStockPurchases": false,
"inventoryManagementMethod": "Variant",
"customFields": [
{
"name": "Size",
"type": "dropdown",
"options": "16GB|32GB[+50.00]|128GB[+200.00]",
"required": false,
"value": "128GB",
"operation": 200.00,
"optionsArray": [
"16GB",
"32GB",
"128GB"
]
}
],
"variants": [
{
"stock": 10,
"variation": [
{ "name": "Size", "option": "16GB" },
{ "name": "Color", "option": "Black" }
],
"allowOutOfStockPurchases": true
},
{ "...": "..." }
],
"metadata": null,
"fileGuid": null
}
]
}GET /products/{id}
Retourne un seul produit par identifiant. {id} peut être soit l'identifiant unique généré par Snipcart (un GUID), soit l'identifiant défini par l'utilisateur que vous avez défini sur votre bouton d'achat.
URL de la ressource
GET https://app.snipcart.com/api/products/{id}En-têtes
| Nom | Valeur | Obligatoire? | Description |
|---|---|---|---|
Accept |
application/json |
Oui | L'API ne retourne que du application/json. |
Paramètres de chemin
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
id |
Oui | string |
Le GUID généré par Snipcart, ou l'identifiant défini par l'utilisateur du produit. |
Exemple de requête
curl -H "Accept: application/json" \
https://app.snipcart.com/api/products/AP1 \
-u {API_KEY}:Exemple de réponse
{
"totalStock": 11,
"price": 299.99,
"categories": [],
"id": "3932ecd1-6508-4209-a7c6-8da4cc75590d",
"userDefinedId": "AP1",
"account_Id": 12345,
"mode": "Test",
"url": "/product-examples.html",
"name": "Android Phone",
"description": "",
"image": "",
"fileGuid": null,
"creationDate": "2016-11-03T12:51:04.297Z",
"modificationDate": "2016-11-03T12:51:28.873Z",
"archived": false,
"inventoryManagementMethod": "Variant",
"stock": 1,
"allowOutOfStockPurchases": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0.0
},
"customFields": [
{
"name": "Size",
"type": "dropdown",
"options": "16GB|32GB[+50.00]|128GB[+200.00]",
"required": false,
"value": "128GB",
"operation": 200.00,
"optionsArray": [
"16GB",
"32GB",
"128GB"
]
}
],
"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
}POST /products
Récupère l'URL passée dans le corps de la requête et importe les produits trouvés sur la page. Lorsque fetchUrl pointe vers une page HTML standard, Snipcart importe tous les boutons portant la classe CSS snipcart-add-item. Vous pouvez aussi faire pointer fetchUrl vers un document JSON — consultez l'indexeur JSON pour connaître la structure attendue.
La réponse est un tableau JSON des produits qui ont été importés.
⚠️ Important : Ce point de terminaison est soumis à une limite de débit. Ne l'appelez pas dans une boucle serrée.
URL de la ressource
POST https://app.snipcart.com/api/productsEn-têtes
| Nom | Valeur | Obligatoire? | Description |
|---|---|---|---|
Accept |
application/json |
Oui | L'API ne retourne que du application/json. |
Content-Type |
application/json |
Oui | Le corps de la requête est en JSON. |
Paramètres du corps
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
fetchUrl |
Oui | string |
L'URL où les détails du produit seront trouvés. Si aucun schéma n'est fourni, http:// est présumé. |
Exemple de requête
curl https://app.snipcart.com/api/products \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-u {API_KEY}: \
-d '{ "fetchUrl": "https://yoursite.com/products.json" }'Exemple de réponse
[
{
"price": 10.00,
"categories": [],
"id": "3e330cf2-6962-4875-8c9d-73f337b6de3e",
"userDefinedId": "123",
"account_Id": 12345,
"mode": "Test",
"url": "/products.json",
"name": "Product 123",
"description": null,
"image": null,
"fileGuid": null,
"creationDate": "2016-12-13T15:54:24.5595583Z",
"modificationDate": "2016-12-13T15:54:24.5595583Z",
"archived": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0.0
},
"metadata": null
},
{
"price": 40.00,
"categories": [],
"id": "c148bdb5-92ea-4c50-a7ec-46763dd1217a",
"userDefinedId": "456",
"account_Id": 12345,
"mode": "Test",
"url": "/products.json",
"name": "Product 456",
"description": null,
"image": null,
"fileGuid": null,
"creationDate": "2016-12-13T15:54:24.5908458Z",
"modificationDate": "2016-12-13T15:54:24.5908458Z",
"archived": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0.0
},
"metadata": null
}
]PUT /products/{id}
Met à jour les paramètres d'inventaire d'un produit. {id} peut être le GUID généré par Snipcart ou l'identifiant défini par l'utilisateur.
Comme les produits sont définis sur votre propre site plutôt que dans Snipcart, seuls les champs liés à l'inventaire peuvent être modifiés ici. Le corps de la requête est un objet produit, mais seuls inventoryManagementMethod, stock, variants et allowOutOfStockPurchases sont lus — tous les autres champs du corps sont ignorés.
⚠️ Important : La mise à jour d'un produit le désarchive également (archived est défini à false).
URL de la ressource
PUT https://app.snipcart.com/api/products/{id}En-têtes
| Nom | Valeur | Obligatoire? | Description |
|---|---|---|---|
Accept |
application/json |
Oui | L'API ne retourne que du application/json. |
Content-Type |
application/json |
Oui | Le corps de la requête est en JSON. |
Paramètres de chemin
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
id |
Oui | string |
Le GUID généré par Snipcart, ou l'identifiant défini par l'utilisateur du produit. Transmis dans l'URL, et non dans le corps. |
Paramètres du corps
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
inventoryManagementMethod |
Non | string |
La façon dont l'inventaire est suivi pour ce produit. Une des valeurs Single, Variant ou Disabled. Utilisez Variant lorsque le produit comporte des champs personnalisés dropdown. |
stock |
Non | integer |
Nombre d'articles en stock. Utilisé lorsque inventoryManagementMethod est Single. |
variants |
Non | array |
Niveaux de stock par variante. Utilisés lorsque inventoryManagementMethod est Variant. Voir les champs des variantes ci-dessous. |
allowOutOfStockPurchases |
Non | boolean |
Si true, le produit peut être acheté même lorsqu'il est en rupture de stock (le stock peut devenir négatif). Si false, les achats en rupture de stock sont bloqués. |
Chaque entrée de variants comporte les champs suivants :
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
variation |
Oui | array |
La combinaison qui identifie cette variante, sous forme de paires name/option correspondant aux valeurs des champs personnalisés du produit, p. ex. [{ "name": "Size", "option": "32GB" }, { "name": "Color", "option": "Black" }]. |
stock |
Non | integer |
Nombre d'articles de cette variante en stock. |
allowOutOfStockPurchases |
Non | boolean |
Si true, cette variante peut être achetée même lorsqu'elle est en rupture de stock (le stock peut devenir négatif). Si false, les achats en rupture de stock sont bloqués. |
Exemple de requête
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 }'Exemple de réponse
{
"totalStock": 20,
"price": 299.99,
"categories": [],
"id": "3932ecd1-6508-4209-a7c6-8da4cc75590d",
"userDefinedId": "AP1",
"account_Id": 12345,
"mode": "Test",
"url": "/product-examples.html",
"name": "Android Phone",
"description": "",
"image": "",
"fileGuid": null,
"creationDate": "2016-11-03T12:51:04.297Z",
"modificationDate": "2016-11-03T12:51:28.873Z",
"archived": false,
"inventoryManagementMethod": "Single",
"stock": 20,
"allowOutOfStockPurchases": false,
"statistics": {
"numberOfSales": 0,
"totalSales": 0.0
},
"metadata": null
}DELETE /products/{id}
Archive un produit. {id} peut être le GUID généré par Snipcart ou l'identifiant défini par l'utilisateur. Le produit archivé est retourné dans la réponse.
⚠️ Important : Cette opération ne supprime pas définitivement le produit — elle définit archived à true. Un produit archivé n'apparaît plus dans la liste de produits par défaut, mais il est automatiquement restauré s'il est de nouveau ajouté à un panier ou récupéré à nouveau.
URL de la ressource
DELETE https://app.snipcart.com/api/products/{id}En-têtes
| Nom | Valeur | Obligatoire? | Description |
|---|---|---|---|
Accept |
application/json |
Oui | L'API ne retourne que du application/json. |
Paramètres de chemin
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
id |
Oui | string |
Le GUID généré par Snipcart, ou l'identifiant défini par l'utilisateur du produit. Transmis dans l'URL, et non dans le corps. |
Exemple de requête
curl https://app.snipcart.com/api/products/AP1 \
-X DELETE \
-H "Accept: application/json" \
-u {API_KEY}:Exemple de réponse
{
"price": 299.99,
"categories": [],
"id": "3932ecd1-6508-4209-a7c6-8da4cc75590d",
"userDefinedId": "AP1",
"account_Id": 12345,
"mode": "Test",
"url": "/product-examples.html",
"name": "Android Phone",
"description": "",
"image": "",
"fileGuid": null,
"creationDate": "2016-11-03T12:51:04.297Z",
"modificationDate": "2016-11-03T12:51:28.873Z",
"archived": true,
"statistics": {
"numberOfSales": 0,
"totalSales": 0.0
},
"metadata": null
}