Skip to main content
POST /checkout crée l’adresse de la page de paiement hébergée de votre boutique. Votre client y choisit son moyen de paiement (mobile money, carte…) : aucune donnée de paiement ne transite jamais par votre serveur ni par l’API.
Permission : checkout.write. Compteur de débit séparé (100 par minute). Référence : Checkout.

Un lien simple

Redirigez votre client vers checkout_url. Le produit doit être publié et appartenir à la boutique de la clé, sinon 404.

Avec un code promo

Passez discount_code : le code est vérifié avant de créer le lien, avec exactement les règles de la page de paiement.
Si le code est valide, la réponse détaille la remise et l’adresse contient ?promo=LANCE20 : la page de paiement l’applique automatiquement.
Si le code est inconnu, inactif, expiré ou épuisé : 422 invalid_discount_code avec la raison. Vous ne fabriquez donc jamais un lien dont le code serait refusé. Pour un produit gratuit, aucun code ne s’applique.
Le prix ne voyage jamais dans l’adresse. Le serveur recalcule et revalide tout au moment de l’achat : modifier l’adresse ne change rien au montant payé.

Champs optionnels

string
Variante du produit (taille, édition…). 404 si elle n’appartient pas au produit.
integer
default:"1"
De 1 à 100.
object
email, first_name, last_name, phone : préremplit le formulaire de paiement.
string
Référence libre (80 caractères) pour retrouver l’origine d’une vente, par exemple votre identifiant de panier.
string
Suivi marketing conservé avec la vente.

Savoir si le client a payé

Ne vous fiez pas à la redirection de retour du client : il peut fermer son navigateur. La source de vérité est l’événement sale.completed, envoyé par Pulse dès le paiement confirmé. Vous pouvez aussi lire la vente avec GET /sales/{id} et vérifier payment_status.
Utilisez la même Idempotency-Key pour un même panier : si votre serveur réessaie, il récupère le même lien au lieu d’en créer un second.