Coupons
Créez des coupons et gérez leurs réserves de codes uniques pour vos e-mails.
Créer un coupon
Crée un coupon. Insérez-le dans un e-mail avec {{coupon "key"}} : au rendu de l’e-mail, chaque destinataire reçoit un code. Nécessite une clé API avec la portée full.
- Un coupon à codes uniques contient une réserve de codes à usage unique. Chaque destinataire se voit attribuer le plus ancien code libre, un par campagne ou par automatisation, et reçoit de nouveau le même code chaque fois que cet e-mail est rendu pour lui. Importez les codes de votre boutique ici ou avec Ajouter des codes à un coupon, ou générez des codes dans Emailit et importez-les dans votre boutique.
- Un coupon à code fixe a un seul code,
static_code, pour tout le monde.
Quand une commande indique un code dans coupon_codes, le code est marqué comme utilisé. Consultez Produits, coupons et panier.
/couponsCorps de la requête
keystringObligatoireLe nom que vous utilisez dans le contenu, unique dans l’espace de travail. De 1 à 64 lettres minuscules, chiffres, - ou _, en commençant par une lettre ou un chiffre. Les majuscules sont converties en minuscules.
namestringObligatoireNom du coupon affiché dans le tableau de bord, 191 caractères au maximum.
descriptionstring | nullNote pour votre équipe. Un texte plus long est coupé à 1 000 caractères.
kindstringunique (par défaut) ou static.
static_codestring | null191 caractères au maximum. Obligatoire pour un coupon à code fixe : le code que tout le monde reçoit. Pour un coupon à codes uniques, le texte que reçoivent les destinataires quand la réserve est vide ou que le coupon a expiré. Sans lui, ils reçoivent une chaîne vide.
discount_labelstring | nullCourte description de la réduction, comme 10% off. Un texte plus long est coupé à 191 caractères.
expires_atstring | nullDate-heure ISO 8601. Passé cette date, les destinataires d’un coupon à codes uniques reçoivent static_code au lieu d’un code, y compris dans les e-mails rendus de nouveau. Emailit n’applique pas l’expiration dans votre boutique.
codesstring[] | stringCodes à ajouter à la réserve : un tableau, ou un texte avec un code par ligne. Pour un texte CSV, la première colonne est lue et un en-tête comme code ou coupon_code est ignoré. Un code compte de 2 à 64 lettres, chiffres, -, _ ou ., et commence par une lettre ou un chiffre. Les codes non valides sont écartés et les doublons ne sont ajoutés qu’une fois. 10 000 codes au maximum.
Réponse
Renvoie 201 Created avec l’objet coupon. Renvoie 422 quand un champ n’est pas valide ou qu’un autre coupon a déjà cette clé.
{
"object": "coupon",
"id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
"key": "welcome-10",
"name": "Welcome 10% off",
"description": "First-order discount for new subscribers.",
"kind": "unique",
"static_code": "WELCOME10",
"discount_label": "10% off",
"expires_at": "2026-12-31T23:59:59.000Z",
"codes_total": 3,
"codes_available": 3,
"codes_assigned": 0,
"codes_redeemed": 0,
"created_at": "2026-10-01T09:00:12.304Z",
"updated_at": "2026-10-01T09:00:12.304Z"
}{
"message": "Validation failed. key: A coupon with this key already exists.",
"errors": {
"key": [
"A coupon with this key already exists."
]
}
}Récupérer un coupon
Récupère un coupon par son ID ou sa clé, avec le nombre de ses codes. Nécessite une clé API avec la portée full.
/coupons/{id}Paramètres de chemin
idstringObligatoireL’ID du coupon (cpn_...) ou la key du coupon.
L’objet coupon
objectstringToujours coupon.
idstringID du coupon (cpn_...).
keystringLe nom que vous utilisez dans le contenu des e-mails : {{coupon "welcome-10"}}. Consultez Produits, coupons et panier.
namestringNom du coupon affiché dans le tableau de bord.
descriptionstring | nullNote pour votre équipe.
kindstring-
unique: une réserve de codes à usage unique. Chaque destinataire reçoit son propre code, un par campagne ou par automatisation, et de nouveau le même code quand l’e-mail est rendu de nouveau. -
static: un seul code,static_code, pour tout le monde.
static_codestring | nullLe code partagé d’un coupon à code fixe. Pour un coupon à codes uniques, le texte que reçoivent les destinataires quand il ne reste aucun code ou que le coupon a expiré. Sans lui, ils reçoivent une chaîne vide.
discount_labelstring | nullCourte description de la réduction, comme 10% off.
expires_atstring | nullPassé cette date, les destinataires d’un coupon à codes uniques reçoivent static_code au lieu d’un code.
codes_totalintegerCodes dans la réserve.
codes_availableintegerCodes qui peuvent encore être distribués : non attribués à un contact et non utilisés dans une commande.
codes_assignedintegerCodes attribués à un contact, y compris ceux déjà utilisés.
codes_redeemedintegerCodes utilisés dans une commande (coupon_codes).
created_at, updated_atstringDates de création et de dernière modification du coupon, au format ISO 8601 UTC.
{
"object": "coupon",
"id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
"key": "welcome-10",
"name": "Welcome 10% off",
"description": "First-order discount for new subscribers.",
"kind": "unique",
"static_code": "WELCOME10",
"discount_label": "10% off",
"expires_at": "2026-12-31T23:59:59.000Z",
"codes_total": 5000,
"codes_available": 3812,
"codes_assigned": 1188,
"codes_redeemed": 143,
"created_at": "2026-10-01T09:00:12.304Z",
"updated_at": "2026-10-01T09:00:12.304Z"
}{
"error": "Coupon not found",
"message": "Coupon not found."
}Mettre à jour un coupon
Met à jour un coupon. Seuls les champs envoyés changent. Pour ajouter des codes, utilisez Ajouter des codes à un coupon : codes est ignoré dans cette requête. Nécessite une clé API avec la portée full.
Si vous modifiez la key, mettez aussi à jour les balises {{coupon "key"}} de vos e-mails : Emailit recherche les coupons par la clé indiquée dans le contenu.
/coupons/{id}Paramètres de chemin
idstringObligatoireL’ID du coupon (cpn_...) ou la key actuelle du coupon.
Corps de la requête
N’importe lequel des champs key, name, description, kind, static_code, discount_label et expires_at, avec les règles de Créer un coupon. Envoyez null pour description, static_code, discount_label ou expires_at pour effacer le champ. Un coupon qui est ou devient static doit garder un static_code.
Réponse
Renvoie 200 OK avec l’objet coupon mis à jour. Renvoie 404 si aucun coupon ne correspond à id et 422 quand un champ n’est pas valide ou que la nouvelle clé est déjà prise.
{
"object": "coupon",
"id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
"key": "welcome-10",
"name": "Welcome 10% off",
"description": "First-order discount for new subscribers.",
"kind": "unique",
"static_code": "WELCOME10",
"discount_label": "10% off",
"expires_at": "2027-01-31T23:59:59.000Z",
"codes_total": 5000,
"codes_available": 3812,
"codes_assigned": 1188,
"codes_redeemed": 143,
"created_at": "2026-10-01T09:00:12.304Z",
"updated_at": "2026-10-09T15:47:20.061Z"
}{
"error": "Coupon not found",
"message": "Coupon not found."
}{
"message": "Validation failed. static_code: A static coupon needs its code.",
"errors": {
"static_code": [
"A static coupon needs its code."
]
}
}Lister les coupons
Liste les coupons de votre espace de travail, du plus récent au plus ancien, avec le nombre de leurs codes. Nécessite une clé API avec la portée full.
/couponsParamètres de requête
pageintegerNuméro de page pour la pagination (minimum : 1, par défaut : 1).
limitintegerNombre de coupons à renvoyer (minimum : 1, maximum : 100, par défaut : 25).
searchstringCorrespondance insensible à la casse sur le nom ou la clé du coupon.
matchstringall (par défaut) exige que tous les filtres correspondent. Avec or, il suffit qu’un filtre corresponde. Consultez Filtrage et tri.
orderstringClé de tri de cette liste. Consultez les clés de tri ci-dessous.
directionstringasc ou desc.
Filtres et tri
Les filtres de liste sont des paramètres de requête key.condition=value sur un seul niveau. Consultez Filtrage et tri pour match, order, direction et la liste des conditions par type.
Clés de filtre
| Clé | Type | Conditions | Remarques |
|---|---|---|---|
key | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
name | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
kind | enum | exact, not_exact | Valeurs : unique, static |
expires_at | date | exact, before, after, empty, not_empty | |
created_at | date | exact, before, after, empty, not_empty |
Clés de tri
Passez dans order l’une de ces clés et dans direction la valeur asc ou desc : key, name, kind, expires_at, created_at
Réponse
Renvoie une page d’objets coupon dans data, avec total_records, next_page_url et previous_page_url. Les URL de page ne contiennent que page et limit : ajoutez de nouveau votre recherche et vos filtres quand vous les suivez.
{
"data": [
{
"object": "coupon",
"id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
"key": "welcome-10",
"name": "Welcome 10% off",
"description": "First-order discount for new subscribers.",
"kind": "unique",
"static_code": "WELCOME10",
"discount_label": "10% off",
"expires_at": "2026-12-31T23:59:59.000Z",
"codes_total": 5000,
"codes_available": 3812,
"codes_assigned": 1188,
"codes_redeemed": 143,
"created_at": "2026-10-01T09:00:12.304Z",
"updated_at": "2026-10-01T09:00:12.304Z"
}
],
"total_records": 1,
"next_page_url": null,
"previous_page_url": null
}Supprimer un coupon
Supprime un coupon avec tous ses codes, y compris ceux qui sont attribués et utilisés. Les commandes gardent les codes dans leur coupon_codes. Nécessite une clé API avec la portée full.
/coupons/{id}Paramètres de chemin
idstringObligatoireL’ID du coupon (cpn_...) ou la key du coupon.
{
"object": "coupon",
"id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
"deleted": true
}{
"error": "Coupon not found",
"message": "Coupon not found."
}Lister les codes d’un coupon
Liste les codes d’un coupon, du plus ancien au plus récent : l’ordre dans lequel ils sont distribués. Utilisez format=csv pour les exporter, par exemple pour importer des codes générés dans votre boutique. Nécessite une clé API avec la portée full.
/coupons/{id}/codesParamètres de chemin
idstringObligatoireL’ID du coupon (cpn_...) ou la key du coupon.
Paramètres de requête
pageintegerNuméro de page pour la pagination (minimum : 1, par défaut : 1).
limitintegerNombre de codes à renvoyer (minimum : 1, maximum : 100, par défaut : 50).
statusstring-
available: non attribué à un contact et non utilisé dans une commande ; il peut donc encore être distribué. -
assigned: attribué à un contact et non utilisé. -
redeemed: utilisé dans une commande.
formatstringjson (par défaut) ou csv. Le CSV renvoie dans un seul fichier, sans pagination, tous les codes qui correspondent à status, avec les colonnes code, status, email, assigned_at et redeemed_at. Les filtres key.condition et le tri ne s’appliquent pas au CSV.
matchstringall (par défaut) exige que tous les filtres correspondent. Avec or, il suffit qu’un filtre corresponde. Consultez Filtrage et tri.
orderstringClé de tri de cette liste. Consultez les clés de tri ci-dessous.
directionstringasc ou desc.
Filtres et tri
Les filtres de liste sont des paramètres de requête key.condition=value sur un seul niveau. Consultez Filtrage et tri pour match, order, direction et la liste des conditions par type.
Clés de filtre
| Clé | Type | Conditions | Remarques |
|---|---|---|---|
code | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
email | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
assigned_at | date | exact, before, after, empty, not_empty | |
redeemed_at | date | exact, before, after, empty, not_empty | |
created_at | date | exact, before, after, empty, not_empty |
Clés de tri
Passez dans order l’une de ces clés et dans direction la valeur asc ou desc : code, email, assigned_at, redeemed_at, created_at
Réponse
Renvoie une page de codes de coupon dans data, avec total_records, next_page_url et previous_page_url. Chaque code a :
objectstringToujours coupon_code.
idstringID du code (cpc_...).
codestringLe code.
contact_id, emailstring | nullLe contact auquel le code est attribué, ou null.
source_idstring | nullLa campagne (cmp_...) ou l’automatisation (aut_...) dont l’e-mail a reçu le code.
assigned_atstring | nullDate d’attribution du code.
redeemed_at, redeemed_order_idstring | nullDate à laquelle le code a été utilisé, et commande qui l’a utilisé (ord_...).
created_atstringDate d’ajout du code à la réserve.
{
"data": [
{
"object": "coupon_code",
"id": "cpc_3s6oCjlRbLFujYObEAcuiZmGKqu",
"code": "WELCOME-H4TZ8RCN",
"contact_id": "con_3MjLVacsYA6keJucAbOs3o3XhyA",
"email": "grace@example.com",
"source_id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"assigned_at": "2026-10-08T09:00:41.773Z",
"redeemed_at": null,
"redeemed_order_id": null,
"created_at": "2026-10-01T09:00:12.304Z"
},
{
"object": "coupon_code",
"id": "cpc_3u9TrZTopqOgaqT9FcZFareUFGj",
"code": "WELCOME-P2WD6YFE",
"contact_id": "con_3EwrXnu9OaQWlfI1AyPUUEoYjQs",
"email": "ada@example.com",
"source_id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"assigned_at": "2026-10-08T09:00:41.802Z",
"redeemed_at": null,
"redeemed_order_id": null,
"created_at": "2026-10-01T09:00:12.304Z"
}
],
"total_records": 1045,
"next_page_url": "/v2/coupons/cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ/codes?page=2&limit=2",
"previous_page_url": null
}code,status,email,assigned_at,redeemed_at
WELCOME-7KQ2M9XA,redeemed,ada@example.com,2026-10-08T09:00:41.751Z,2026-10-08T14:32:10.000Z
WELCOME-H4TZ8RCN,assigned,grace@example.com,2026-10-08T09:00:41.773Z,
WELCOME-QX3B9NMV,available,,,{
"error": "Coupon not found",
"message": "Coupon not found."
}Ajouter des codes à un coupon
Ajoute des codes à la réserve d’un coupon à codes uniques. Importez avec codes des codes qui existent dans votre boutique, ou laissez Emailit créer des codes aléatoires avec generate, puis importez-les dans votre boutique avec Lister les codes d’un coupon (format=csv). Les codes déjà présents dans la réserve sont ignorés. Les coupons à code fixe ont un seul code et renvoient 422. Nécessite une clé API avec la portée full.
/coupons/{id}/codesParamètres de chemin
idstringObligatoireL’ID du coupon (cpn_...) ou la key du coupon.
Corps de la requête
Envoyez codes ou generate. Si vous envoyez les deux, generate est utilisé.
codesstring[] | string10 000 codes au maximum : un tableau, ou un texte avec un code par ligne. Pour un texte CSV, la première colonne est lue et un en-tête comme code ou coupon_code est ignoré. Un code compte de 2 à 64 lettres, chiffres, -, _ ou ., et commence par une lettre ou un chiffre. Les codes qui ne correspondent pas sont renvoyés dans invalid.
generateobjectCrée des codes aléatoires composés de lettres majuscules et de chiffres, sans 0, O, 1 ni I, faciles à confondre.
-
count(entier, obligatoire) : de 1 à 10 000 codes. -
prefix(chaîne) : 20 lettres, chiffres,-ou_au maximum, placés devant chaque code. Par exempleWELCOME-. -
length(entier) : nombre de caractères aléatoires après le préfixe, de 4 à 32. Par défaut : 8. Les valeurs hors de cette plage sont ramenées à la borne la plus proche.
Réponse
addedintegerCodes ajoutés à la réserve.
skippedintegerCodes qui étaient déjà dans la réserve.
invalidstring[]Valeurs importées qui ne sont pas des codes valides et n’ont pas été ajoutées.
couponobjectL’objet coupon avec les nouveaux décomptes.
Renvoie 404 si aucun coupon ne correspond à id, et 422 pour un coupon à code fixe, quand aucun code valide n’a été envoyé, quand plus de 10 000 codes ont été envoyés, ou quand generate.count ou generate.prefix est hors limites.
{
"added": 5000,
"skipped": 0,
"invalid": [],
"coupon": {
"object": "coupon",
"id": "cpn_3sMKUvFbx63T9hhDoNea7fmo1fQ",
"key": "welcome-10",
"name": "Welcome 10% off",
"description": "First-order discount for new subscribers.",
"kind": "unique",
"static_code": "WELCOME10",
"discount_label": "10% off",
"expires_at": "2026-12-31T23:59:59.000Z",
"codes_total": 5003,
"codes_available": 5003,
"codes_assigned": 0,
"codes_redeemed": 0,
"created_at": "2026-10-01T09:00:12.304Z",
"updated_at": "2026-10-01T09:00:12.304Z"
}
}{
"message": "Validation failed. codes: Static coupons have one code; set static_code instead.",
"errors": {
"codes": [
"Static coupons have one code; set static_code instead."
]
}
}