Passer au contenu principal

Vue d’ensemble

Le système de promotions Yabetoo se compose de deux entités :

Coupon

Définit la réduction à appliquer (pourcentage ou montant fixe)

Code Promo

Code utilisable par les clients, lié à un coupon avec des restrictions supplémentaires
Coupon "Summer Sale 20%"
├── Code Promo "SUMMER20" (public, max 1000 utilisations)
├── Code Promo "SUMMERVIP" (VIP, min 50€ d'achat)
└── Code Promo "SUMMER-JEAN" (limité aux clients: cus_xxx)

Coupons

Qu’est-ce qu’un Coupon ?

Un Coupon définit le type et le montant de la réduction. Il peut être réutilisé par plusieurs codes promo avec différentes restrictions.
Format de l’identifiant : coupon_ suivi de 24 caractères alphanumériques.Exemple : coupon_summer2024_20percent

Attributs du Coupon

AttributTypeDescription
idstringIdentifiant unique
namestringNom du coupon (interne)
percentOffnumber | nullPourcentage de réduction (0-100)
amountOffnumber | nullMontant fixe de réduction
currencyOptionsobjectMontants par devise
durationenumonce, forever, repeating
durationInMonthsnumber | nullDurée en mois (si repeating)
maxRedemptionsnumber | nullNombre max d’utilisations
timesRedeemednumberUtilisations actuelles
redeemByDateTime | nullDate d’expiration
appliesToSkusstring[]SKUs éligibles (optionnel)
validbooleanCoupon actif

Types de réduction

Réduction en pourcentage

Applique un pourcentage de réduction sur le montant total.
curl -X POST https://api.yabetoo.com/v1/coupons \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer Sale 20%",
    "percentOff": 20,
    "duration": "once"
  }'
Exemple : 20% sur un panier de 100€ = 80€ à payer

Durée de la réduction

Once

Une seule foisLa réduction s’applique uniquement au premier paiement.Idéal pour : offres de bienvenue, premiers achats

Forever

ToujoursLa réduction s’applique à tous les paiements futurs.Idéal pour : réductions permanentes, partenariats

Repeating

Limité dans le tempsLa réduction s’applique pendant X mois.Idéal pour : promotions temporaires sur abonnements
// Réduction pendant 3 mois sur un abonnement
{
  "name": "3 mois à -50%",
  "percentOff": 50,
  "duration": "repeating",
  "durationInMonths": 3
}

Restrictions par SKU

Limitez un coupon à certains produits/SKUs :
{
  "name": "Promo Formations",
  "percentOff": 30,
  "duration": "once",
  "appliesToSkus": [
    "sku_formation_js",
    "sku_formation_react",
    "sku_formation_node"
  ]
}
Si appliesToSkus est défini, la réduction ne s’applique qu’aux SKUs listés. Les autres articles du panier ne bénéficient pas de la réduction.

Codes Promo

Qu’est-ce qu’un Code Promo ?

Un Code Promo (PromotionCode) est le code que les clients utilisent. Il est associé à un coupon et peut avoir des restrictions supplémentaires.
Format de l’identifiant : promo_ suivi de 24 caractères alphanumériques.Exemple : promo_summer20_public

Attributs du Code Promo

AttributTypeDescription
idstringIdentifiant unique
couponIdstringCoupon associé
codestringCode utilisable (auto-majuscules)
activebooleanCode actif
expiresAtDateTime | nullDate d’expiration
maxRedemptionsnumber | nullNombre max d’utilisations
timesRedeemednumberUtilisations actuelles
minimumAmountnumber | nullMontant minimum d’achat
minimumAmountCurrencystring | nullDevise du minimum
firstTimeTransactionbooleanRéservé aux premiers achats
customerIdsstring[]Liste blanche de clients

Créer un Code Promo

curl -X POST https://api.yabetoo.com/v1/promotion-codes \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "couponId": "coupon_summer2024",
    "code": "SUMMER20",
    "maxRedemptions": 1000,
    "expiresAt": "2024-08-31T23:59:59Z"
  }'
Le code est automatiquement converti en majuscules. summer20 devient SUMMER20.

Restrictions avancées

Exiger un montant d’achat minimum :
{
  "couponId": "coupon_20percent",
  "code": "SAVE20",
  "minimumAmount": 50,
  "minimumAmountCurrency": "EUR"
}
Le code ne fonctionne que si le panier dépasse 50€.

Validation d’un Code Promo

Lors de l’utilisation d’un code promo, le système effectue plusieurs vérifications :
1

Code existe et actif

Le code doit exister et active doit être true
2

Non expiré

La date actuelle doit être avant expiresAt
3

Limite non atteinte

timesRedeemed doit être inférieur à maxRedemptions
4

Coupon valide

Le coupon associé doit être valide (valid: true)
5

Montant minimum

Le panier doit atteindre minimumAmount si défini
6

Premier achat

Si firstTimeTransaction, vérifier que c’est la première commande
7

Client autorisé

Si customerIds défini, vérifier que le client est dans la liste
8

SKUs éligibles

Si le coupon a appliesToSkus, vérifier que le panier contient ces SKUs
9

Devise supportée

La devise de la commande doit être supportée par le coupon

Erreurs de validation

ErreurDescription
INVALID_CODECode inexistant ou inactif
EXPIREDCode ou coupon expiré
MAX_REDEMPTIONSLimite d’utilisations atteinte
MINIMUM_NOT_METMontant minimum non atteint
NOT_FIRST_PURCHASERéservé aux premiers achats
SKUS_NOT_ELIGIBLEAucun SKU éligible dans le panier
CURRENCY_MISMATCHDevise non supportée
CUSTOMER_NOT_ALLOWEDClient non autorisé
COUPON_INVALIDCoupon désactivé

Historique des utilisations

Chaque utilisation d’un coupon/code promo est enregistrée dans CouponRedemption :
{
  "id": "redemption_abc123",
  "couponId": "coupon_summer2024",
  "promotionCodeId": "promo_summer20",
  "customerId": "cus_xyz789",
  "customerEmail": "client@example.com",
  "orderId": "ord_def456",
  "discountAmount": 20,
  "currency": "EUR",
  "createdAt": "2024-07-15T14:30:00Z"
}
Cet historique permet :
  • L’audit des remises accordées
  • L’analyse des performances des promotions
  • La vérification des utilisations par client

Calcul de la réduction

Réduction en pourcentage

const discount = (subtotal * coupon.percentOff) / 100;

Réduction montant fixe

const discount = coupon.getAmountOffForCurrency(currency);
// Retourne le montant pour la devise ou null si non supporté

Exemple complet

Panier: 120€
Coupon: 20% de réduction

Calcul:
- Sous-total: 120€
- Réduction: 120 × 0.20 = 24€
- Total: 120 - 24 = 96€

Réponses API

{
  "id": "coupon_summer2024_20percent",
  "object": "coupon",
  "name": "Summer Sale 20%",
  "percentOff": 20,
  "amountOff": null,
  "currencyOptions": {},
  "duration": "once",
  "durationInMonths": null,
  "maxRedemptions": 1000,
  "timesRedeemed": 156,
  "redeemBy": "2024-08-31T23:59:59.000Z",
  "appliesToSkus": null,
  "valid": true,
  "createdAt": "2024-06-01T00:00:00.000Z",
  "updatedAt": "2024-07-15T14:30:00.000Z"
}

Opérations courantes

Créer un coupon

curl -X POST https://api.yabetoo.com/v1/coupons \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Black Friday 30%",
    "percentOff": 30,
    "duration": "once",
    "maxRedemptions": 500,
    "redeemBy": "2024-11-30T23:59:59Z"
  }'

Créer un code promo

curl -X POST https://api.yabetoo.com/v1/promotion-codes \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "couponId": "coupon_blackfriday",
    "code": "BLACKFRIDAY30"
  }'

Valider un code promo

curl -X POST https://api.yabetoo.com/v1/promotion-codes/validate \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "code": "SUMMER20",
    "amount": 100,
    "currency": "EUR",
    "customerEmail": "client@example.com"
  }'

Désactiver un code promo

curl -X PATCH https://api.yabetoo.com/v1/promotion-codes/promo_xxx \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "active": false
  }'

Bonnes pratiques

  • Utilisez des codes mémorables et faciles à saisir
  • Évitez les caractères ambigus (0/O, 1/l)
  • Incluez le contexte : SUMMER20, WELCOME15, VIP50
  • Gardez les codes courts (6-12 caractères)
  • Définissez toujours une limite (maxRedemptions ou expiresAt)
  • Les promotions sans limite peuvent impacter vos marges
  • Prévoyez une marge de sécurité sur les limites
  • Analysez les CouponRedemption régulièrement
  • Mesurez le taux de conversion par code
  • Comparez les performances des différentes promotions
  • Affichez clairement les conditions d’utilisation
  • Indiquez la date d’expiration aux clients
  • Expliquez pourquoi un code est refusé

Exemples de cas d’usage

{
  "coupon": {
    "name": "Welcome 10€",
    "amountOff": 10,
    "currency": "EUR",
    "duration": "once"
  },
  "promotionCode": {
    "code": "WELCOME10",
    "firstTimeTransaction": true,
    "minimumAmount": 30,
    "minimumAmountCurrency": "EUR"
  }
}
Résultat : -10€ pour les nouveaux clients avec panier > 30€

Prochaines étapes

Créer une session de paiement

Utilisez les codes promo dans vos checkout sessions

Webhooks

Recevez des notifications lors des utilisations de codes promo