API : rabais
Gérez les rabais de votre boutique de façon programmatique grâce à l'API REST de Snipcart. Cette ressource vous permet de lister, récupérer, créer, mettre à jour et supprimer les rabais de votre compte — les mêmes rabais que vous pouvez configurer dans le tableau de bord, exposés afin que vous puissiez les piloter depuis vos propres systèmes.
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. L'URL de base est toujours https://app.snipcart.com/api.
⚠️ Important : Les rabais sont lus et écrits sous la forme de l'objet rabais brut. La même forme d'objet est utilisée à la fois pour les requêtes et les réponses, de sorte que tout champ documenté sur la réponse peut aussi être envoyé lors de la création ou de la mise à jour. Plusieurs champs ne s'appliquent qu'à un déclencheur (trigger) ou à un type précis (voir ci-dessous) et sont autrement ignorés ou laissés à null.
Déclencheurs et types
Un rabais comporte deux dimensions :
trigger— la condition qui active le rabais. Détermine quels champs de « déclencheur » sont obligatoires.type— l'action que le rabais applique une fois déclenché. Détermine quels champs d'« action » sont obligatoires.
Valeurs de trigger (chaîne) : Code, Product, Total, QuantityOfAProduct, CartContainsOnlySpecifiedProducts, CartContainsSomeSpecifiedProducts, CartContainsAtLeastAllSpecifiedProducts, CartContainsOnlyProductsFromSpecifiedCategories, CartContainsSomeProductsFromSpecifiedCategories.
Valeurs de type (chaîne) : Rate, AlternatePrice, FixedAmount, Shipping, FixedAmountOnItems, GetFreeItems, RateOnItems, AmountOnSubscription, RateOnSubscription, FixedAmountOnCategory, RateOnCategory.
Quels champs s'appliquent où (imposé par la validation côté serveur) :
| Déclencheur | Champ obligatoire |
|---|---|
Code |
code |
Product |
itemId |
Total |
(aucun champ obligatoire; utilisez totalToReach pour le seuil) |
QuantityOfAProduct |
quantityOfAProduct |
CartContainsOnlySpecifiedProducts, CartContainsSomeSpecifiedProducts, CartContainsAtLeastAllSpecifiedProducts |
triggerProductIds |
CartContainsOnlyProductsFromSpecifiedCategories, CartContainsSomeProductsFromSpecifiedCategories |
triggerCategories |
| Type | Champ(s) obligatoire(s) |
|---|---|
Rate, RateOnSubscription |
rate |
RateOnItems |
rate, productIds |
RateOnCategory |
rate, categories |
FixedAmount, AmountOnSubscription |
amount |
FixedAmountOnItems |
amount, productIds |
FixedAmountOnCategory |
amount, categories |
AlternatePrice |
alternatePrice |
Shipping |
shippingCost, shippingDescription |
GetFreeItems |
numberOfItemsRequired, numberOfFreeItems |
Table des matières
GET /discounts
Retourne tous les rabais de votre compte (sans pagination — la liste complète est retournée sous forme de tableau JSON).
URL de la ressource
GET https://app.snipcart.com/api/discountsEn-têtes
| Nom | Obligatoire? | Description |
|---|---|---|
Accept |
Oui | Doit être application/json. |
Exemple de requête
curl -H "Accept: application/json" \
https://app.snipcart.com/api/discounts \
-u {API_KEY}:Exemple de réponse
[
{
"id": "2223490d-84c1-480c-b713-50cb0b819313",
"name": "10% off everything",
"combinable": true,
"trigger": "Code",
"code": "SNIP10",
"type": "Rate",
"rate": 10.0,
"amount": null,
"totalToReach": null,
"itemId": null,
"alternatePrice": null,
"maxNumberOfUsages": 100,
"maxNumberOfUsagesPerCustomer": null,
"expires": null,
"archived": false,
"numberOfUsages": 12,
"numberOfUsagesUncompleted": 1,
"shippingDescription": null,
"shippingCost": null,
"shippingGuaranteedDaysToDelivery": null,
"creationDate": "2024-01-15T18:30:00Z",
"modificationDate": "2024-01-15T18:30:00Z"
},
{
"id": "19a8d615-09f5-4808-80c2-96cd32d141f3",
"name": "Free shipping over $150",
"combinable": true,
"trigger": "Total",
"code": null,
"type": "Shipping",
"totalToReach": 150.0,
"rate": null,
"amount": null,
"shippingDescription": "Free shipping",
"shippingCost": 0.0,
"shippingGuaranteedDaysToDelivery": 10,
"maxNumberOfUsages": null,
"expires": null,
"archived": false,
"numberOfUsages": 0,
"numberOfUsagesUncompleted": 0,
"creationDate": "2024-02-01T12:00:00Z",
"modificationDate": "2024-02-01T12:00:00Z"
}
]GET /discounts/{id}
Retourne un seul rabais d'après son identifiant unique. Répond avec 404 Not Found si aucun rabais portant cet identifiant n'existe sur votre compte.
URL de la ressource
GET https://app.snipcart.com/api/discounts/{id}En-têtes
| Nom | Obligatoire? | Description |
|---|---|---|
Accept |
Oui | Doit être application/json. |
Paramètres de chemin
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
id |
Oui | guid |
L'identifiant unique du rabais. |
Exemple de requête
curl -H "Accept: application/json" \
https://app.snipcart.com/api/discounts/2223490d-84c1-480c-b713-50cb0b819313 \
-u {API_KEY}:Exemple de réponse
{
"id": "2223490d-84c1-480c-b713-50cb0b819313",
"name": "10% off everything",
"combinable": true,
"trigger": "Code",
"code": "SNIP10",
"type": "Rate",
"rate": 10.0,
"amount": null,
"totalToReach": null,
"itemId": null,
"alternatePrice": null,
"maxNumberOfUsages": 100,
"maxNumberOfUsagesPerCustomer": null,
"expires": null,
"archived": false,
"numberOfUsages": 12,
"numberOfUsagesUncompleted": 1,
"shippingDescription": null,
"shippingCost": null,
"shippingGuaranteedDaysToDelivery": null,
"creationDate": "2024-01-15T18:30:00Z",
"modificationDate": "2024-01-15T18:30:00Z"
}POST /discounts
Crée un nouveau rabais. Retourne 201 Created avec le rabais créé. Les champs du corps obligatoires dépendent du trigger et du type choisis (voir Déclencheurs et types); un 400 est retourné avec des erreurs de validation si un champ obligatoire pour le déclencheur ou le type sélectionné est manquant, ou si un rabais à déclencheur Code réutilise un code actif.
URL de la ressource
POST https://app.snipcart.com/api/discountsEn-têtes
| Nom | Obligatoire? | Description |
|---|---|---|
Accept |
Oui | Doit être application/json. |
Content-Type |
Oui | Doit être application/json. |
Paramètres du corps
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
name |
Oui | string |
Le nom amical du rabais. |
trigger |
Oui | string |
Condition qui active le rabais. L'une des valeurs de déclencheur. |
type |
Oui | string |
Action que le rabais applique. L'une des valeurs de type. |
code |
Lorsque trigger vaut Code |
string |
Le code que le client doit saisir. Doit être unique parmi les rabais actifs. |
totalToReach |
Lorsque trigger vaut Total |
decimal |
Le montant minimum de la commande qui active le rabais. |
itemId |
Lorsque trigger vaut Product |
string |
L'identifiant unique du produit (data-item-id). |
quantityOfAProduct |
Lorsque trigger vaut QuantityOfAProduct |
int |
Seuil de quantité pour le ou les produits ciblés. |
triggerProductIds |
Lorsque trigger est l'une des valeurs CartContains*SpecifiedProducts |
string |
Identifiants de produits séparés par des virgules qui doivent se trouver dans le panier. |
triggerCategories |
Lorsque trigger est l'une des valeurs CartContains*Categories |
string |
Noms de catégories séparés par des virgules qui doivent se trouver dans le panier. |
rate |
Lorsque type vaut Rate, RateOnSubscription, RateOnItems ou RateOnCategory |
decimal |
Le pourcentage déduit (p. ex. 10 pour 10 %). |
amount |
Lorsque type vaut FixedAmount, AmountOnSubscription, FixedAmountOnItems ou FixedAmountOnCategory |
decimal |
Le montant fixe déduit. |
productIds |
Lorsque type vaut FixedAmountOnItems ou RateOnItems |
string |
Identifiants de produits (data-item-id) séparés par des virgules auxquels le rabais s'applique. |
categories |
Lorsque type vaut FixedAmountOnCategory ou RateOnCategory |
string |
Tableau encodé en JSON des noms de catégories auxquels le rabais s'applique. |
alternatePrice |
Lorsque type vaut AlternatePrice |
string |
Le nom de la liste de prix alternative à utiliser. |
shippingCost |
Lorsque type vaut Shipping |
decimal |
Le coût de livraison offert au client (utilisez 0 pour la livraison gratuite). |
shippingDescription |
Lorsque type vaut Shipping |
string |
Le nom de la méthode de livraison affiché au client. |
shippingGuaranteedDaysToDelivery |
Non | int |
Délai de livraison estimé en jours pour un rabais Shipping. |
numberOfItemsRequired |
Lorsque type vaut GetFreeItems |
int |
Articles requis dans le panier avant que les articles gratuits ne soient accordés. |
numberOfFreeItems |
Lorsque type vaut GetFreeItems |
int |
Nombre d'articles gratuits accordés. |
maxNumberOfUsages |
Non | int |
Nombre total maximum d'utilisations. Si null, le rabais peut être utilisé indéfiniment. |
maxNumberOfUsagesPerCustomer |
Non | int |
Nombre maximum d'utilisations par client. Doit être ≥ 0. |
maxAmountToReach |
Non | decimal |
Plafond sur le montant total du rabais appliqué lorsque le rabais est combinable. |
combinable |
Non | boolean |
Indique si ce rabais peut coexister avec d'autres rabais dans le panier. Vaut true par défaut. Un rabais non combinable dans le panier bloque tous les autres. |
currency |
Non | string |
Restreint le rabais à une seule devise (omis de la réponse lorsqu'il n'est pas défini). |
expires |
Non | datetime |
Date à laquelle le rabais expire. Si null, il n'expire jamais. Interprété dans le fuseau horaire de votre compte. |
appliesOnAllRecurringOrders |
Non | boolean |
Pour les types de rabais d'abonnement, indique si le rabais s'applique à toutes les commandes récurrentes ou seulement au premier paiement. |
⚠️ Important : Lorsque type vaut Shipping, la création du rabais crée aussi un taux de livraison personnalisé associé à partir de shippingCost, shippingDescription et shippingGuaranteedDaysToDelivery.
Exemple de requête
curl https://app.snipcart.com/api/discounts \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-u {API_KEY}: \
-d '{
"name": "Free shipping over $150",
"trigger": "Total",
"totalToReach": 150,
"type": "Shipping",
"shippingDescription": "Free shipping",
"shippingCost": 0,
"shippingGuaranteedDaysToDelivery": 10
}'Exemple de réponse
{
"id": "19a8d615-09f5-4808-80c2-96cd32d141f3",
"name": "Free shipping over $150",
"combinable": true,
"trigger": "Total",
"code": null,
"itemId": null,
"totalToReach": 150.0,
"type": "Shipping",
"rate": null,
"amount": null,
"alternatePrice": null,
"maxNumberOfUsages": null,
"maxNumberOfUsagesPerCustomer": null,
"expires": null,
"archived": false,
"numberOfUsages": 0,
"numberOfUsagesUncompleted": 0,
"shippingDescription": "Free shipping",
"shippingCost": 0.0,
"shippingGuaranteedDaysToDelivery": 10,
"creationDate": "2024-02-01T12:00:00Z",
"modificationDate": "2024-02-01T12:00:00Z"
}PUT /discounts/{id}
Met à jour un rabais existant. Retourne 200 OK avec le rabais mis à jour, ou 404 Not Found si le rabais n'existe pas sur votre compte. Envoyez l'objet rabais complet : les mêmes champs du corps que POST s'appliquent, en plus de archived.
URL de la ressource
PUT https://app.snipcart.com/api/discounts/{id}En-têtes
| Nom | Obligatoire? | Description |
|---|---|---|
Accept |
Oui | Doit être application/json. |
Content-Type |
Oui | Doit être application/json. |
Paramètres de chemin
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
id |
Oui | guid |
L'identifiant unique du rabais. |
Paramètres du corps
Mêmes champs que POST /discounts. En plus :
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
archived |
Non | boolean |
Indique si le rabais est archivé. Les rabais archivés sont inactifs mais conservés pour l'historique. |
Exemple de requête
curl https://app.snipcart.com/api/discounts/19a8d615-09f5-4808-80c2-96cd32d141f3 \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-u {API_KEY}: \
-X PUT \
-d '{
"name": "Free shipping over $150",
"trigger": "Total",
"totalToReach": 150,
"type": "Shipping",
"shippingDescription": "Free shipping",
"shippingCost": 0,
"shippingGuaranteedDaysToDelivery": 10,
"archived": false
}'Exemple de réponse
{
"id": "19a8d615-09f5-4808-80c2-96cd32d141f3",
"name": "Free shipping over $150",
"combinable": true,
"trigger": "Total",
"code": null,
"itemId": null,
"totalToReach": 150.0,
"type": "Shipping",
"rate": null,
"amount": null,
"alternatePrice": null,
"maxNumberOfUsages": null,
"expires": null,
"archived": false,
"numberOfUsages": 0,
"numberOfUsagesUncompleted": 0,
"shippingDescription": "Free shipping",
"shippingCost": 0.0,
"shippingGuaranteedDaysToDelivery": 10,
"creationDate": "2024-02-01T12:00:00Z",
"modificationDate": "2024-02-01T13:45:00Z"
}DELETE /discounts/{id}
Supprime un rabais existant. Retourne 204 No Content en cas de succès, ou 404 Not Found si le rabais n'existe pas sur votre compte.
⚠️ Important : Un rabais qui a déjà été utilisé dans une commande complétée ne peut pas être supprimé (numberOfUsages > 0) — la requête retourne 400 Bad Request. Archivez-le plutôt via PUT.
URL de la ressource
DELETE https://app.snipcart.com/api/discounts/{id}En-têtes
| Nom | Obligatoire? | Description |
|---|---|---|
Accept |
Oui | Doit être application/json. |
Paramètres de chemin
| Nom | Obligatoire? | Type | Description |
|---|---|---|---|
id |
Oui | guid |
L'identifiant unique du rabais. |
Exemple de requête
curl https://app.snipcart.com/api/discounts/19a8d615-09f5-4808-80c2-96cd32d141f3 \
-H "Accept: application/json" \
-u {API_KEY}: \
-X DELETE