Prérequis
Avant de commencer, vous avez besoin des éléments suivants :- Un compte marchand Dodo Payments
- Une clé API disponible dans Developer → API Keys du tableau de bord, stockée dans
DODO_PAYMENTS_API_KEY - Un secret de webhook disponible dans Developer → Webhooks, stocké dans
DODO_PAYMENTS_WEBHOOK_KEY - Au moins un produit d’abonnement créé sous Products
Intégration de l’API
Sessions de checkout
Créez un abonnement en construisant une session de checkout avec votre produit d’abonnement. Le client autorise un moyen de paiement et l’abonnement est activé lorsqu’il termine le checkout.- Node.js SDK
- Python SDK
- REST API
Réponse de l’API
La réponse inclut uncheckout_url :
Webhooks
Les webhooks notifient votre serveur lorsque des événements d’abonnement surviennent. Configurez votre endpoint sous Developer → Webhooks dans le tableau de bord. Pour configurer votre endpoint de webhook, consultez Webhooks.Types d’événements d’abonnement
Suivez ces événements pour gérer le cycle de vie de l’abonnement :subscription.active— L’abonnement est activésubscription.updated— Un champ de l’abonnement a été modifiésubscription.on_hold— Un renouvellement ou une facturation liée à un changement de forfait a échouésubscription.failed— La création de l’abonnement a échoué (définitif ; le client doit se réabonner)subscription.renewed— Une facturation récurrente a réussisubscription.past_due— Un renouvellement a échoué et la période de grâce a commencé ; le client conserve son accès jusqu’àpast_due_ends_atsubscription.plan_changed— Le forfait a été augmenté, réduit ou modifiésubscription.cancelled— L’abonnement a été annulésubscription.expired— L’abonnement a atteint la fin de sa période
paused, unpaused et update_payment_method, consultez Webhooks d’abonnement.
Scénarios de paiement
Flux de paiement réussi La séquence des webhooks dépend de la présence ou non d’une période d’essai pour l’abonnement. Facturation immédiate (0 jour d’essai) :subscription.active: le mandat est autorisé et l’abonnement est activé.payment.succeeded: confirme la première facturation. Attendez-vous à le recevoir dans les 2 à 10 minutes suivant le checkout.
- Au début de l’essai (checkout) :
subscription.activeest déclenché une fois le moyen de paiement autorisé. Aucune facturation récurrente n’est encore effectuée. La première facturation réelle est reportée à la fin de l’essai. - À la fin de l’essai : le montant récurrent est facturé et vous recevez
payment.succeededavecsubscription.renewed.
subscription.renewed: est déclenché à chaque cycle de facturation lorsque le paiement du renouvellement est débité, toujours avecpayment.succeeded. Il contient également lenext_billing_datemis à jour.
Chaque fois qu’un montant est effectivement débité pour un produit d’abonnement, vous recevez
subscription.renewed et payment.succeeded. Utilisez subscription.renewed plutôt que payment.succeeded seul comme signal pour prolonger l’accès au cycle suivant.- Échec de l’abonnement
subscription.failed- La création de l’abonnement a échoué, car le mandat n’a pas pu être créé.payment.failed- Indique un paiement échoué.
- Abonnement suspendu
subscription.on_hold- L’abonnement est suspendu en raison de l’échec du paiement d’un renouvellement ou d’une facturation liée à un changement de forfait. Si votre entreprise prévoit une période de grâce, un renouvellement échoué fait d’abord passer l’abonnement àpast_due(subscription.past_due), puis àon_hold(oucancelled, selon la configuration de votre période de grâce) uniquement lorsque celle-ci prend fin. Consultez États des abonnements.- Lorsqu’un abonnement est suspendu, il ne se renouvelle pas automatiquement tant que le moyen de paiement n’a pas été mis à jour.
Bonne pratique : pour simplifier l’implémentation, nous vous recommandons de suivre principalement les événements d’abonnement afin de gérer le cycle de vie de l’abonnement.
subscription.failed par rapport à subscription.on_hold
Ces deux événements sont faciles à confondre, mais ils nécessitent une gestion très différente :
Gérer un abonnement suspendu
Lorsqu’un abonnement passe à l’étaton_hold, vous devez mettre à jour le moyen de paiement pour le réactiver. Cette section explique dans quels cas les abonnements sont suspendus et comment les gérer.
Quand les abonnements sont suspendus
Un abonnement est suspendu lorsque :- Le paiement du renouvellement échoue : la facturation automatique du renouvellement échoue en raison de fonds insuffisants, d’une carte expirée ou d’un refus bancaire
- La facturation liée à un changement de forfait échoue : une facturation immédiate lors d’une augmentation ou d’une réduction de forfait échoue
- L’autorisation du moyen de paiement échoue : le moyen de paiement ne peut pas être autorisé pour les facturations récurrentes
Réactiver les abonnements suspendus
Pour réactiver un abonnement à l’étaton_hold, utilisez l’API Update Payment Method. Cette opération :
- Crée une facturation pour les sommes restantes dues
- Génère une facture pour cette facturation
- Traite le paiement avec le nouveau moyen de paiement
- Réactive l’abonnement à l’état
activeune fois le paiement réussi
1
Handle subscription.on_hold webhook
Lorsque vous recevez un webhook
subscription.on_hold, mettez à jour l’état de votre application et informez le client :2
Update payment method
Lorsque le client est prêt à mettre à jour son moyen de paiement, appelez l’API Update Payment Method :
Vous pouvez également utiliser l’ID d’un moyen de paiement existant si le client a enregistré des moyens de paiement :
3
Monitor webhook events
Après avoir mis à jour le moyen de paiement, surveillez les événements de webhook suivants :
payment.succeeded- La facturation des sommes restantes dues a réussisubscription.active- L’abonnement a été réactivé
Exemple de payload d’événement d’abonnement
Modifier les forfaits d’abonnement
Vous pouvez augmenter ou réduire un forfait d’abonnement à l’aide de l’endpoint API de changement de forfait. Cela vous permet de modifier le produit, la quantité et de gérer la proratisation de l’abonnement.Change Plan API Reference
Pour obtenir des informations détaillées sur la modification des forfaits d’abonnement, consultez notre documentation de l’API Change Plan.
Options de proratisation
Lors de la modification d’un forfait d’abonnement, vous disposez de quatre options pour gérer la facturation immédiate :1. prorated_immediately
- Crédite la portion inutilisée du cycle de facturation actuel, proratisée selon le temps restant. Le crédit couvre le forfait de base, la quantité et les éventuels modules complémentaires
- Facture ensuite un cycle complet selon le nouveau forfait, la nouvelle quantité et les nouveaux modules complémentaires. La facturation elle-même n’est jamais proratisée
- Facturation immédiate nette = (nouveau cycle complet) moins (fraction restante x ancien cycle complet). Si le crédit est supérieur, la différence est conservée comme crédit associé à l’abonnement pour les renouvellements futurs
- Pendant une période d’essai, cette option bascule immédiatement l’utilisateur vers le nouveau forfait et facture le client immédiatement
2. full_immediately
- Facture au client le montant total de l’abonnement du nouveau forfait, sans crédit pour le cycle précédent
- Qu’il s’agisse d’une augmentation ou d’une réduction, le client paie l’intégralité du prix du nouveau forfait à partir de zéro
- Utile lorsque vous souhaitez facturer le montant total, quelle que soit la durée restante de l’ancien forfait
3. difference_immediately
- Le client paie uniquement la différence entre le prix de l’ancien forfait et celui du nouveau
- Le montant ne dépend pas du moment du cycle où la modification est effectuée. La même augmentation coûte le même prix au jour 1 et au jour 29
- En cas d’augmentation, la différence est immédiatement facturée au client. Par exemple, $30/mois → $80/mois = $50 facturés immédiatement
- En cas de réduction, la différence de prix est conservée comme crédit associé à l’abonnement et appliquée automatiquement aux renouvellements futurs. Par exemple, $50/mois → $20/mois = $30 conservés comme crédit
4. do_not_bill
- Applique immédiatement la modification du forfait, mais ne facture rien au moment de la modification. Le nouveau forfait, la nouvelle quantité et les nouveaux modules complémentaires sont utilisables immédiatement
- Comme aucune facturation n’est effectuée immédiatement, une augmentation permet au client de bénéficier gratuitement du forfait supérieur pendant le reste du cycle actuel. Une réduction prend effet immédiatement, sans crédit pour la portion inutilisée du cycle déjà payée
- Les modules complémentaires accordés via
do_not_billne sont pas crédités lors d’une modification ultérieure du forfait, car ils n’ont jamais été facturés. Une modification ultérieure facture intégralement la nouvelle quantité de modules complémentaires - Le forfait mis à jour (ainsi que la quantité et les modules complémentaires) est facturé au prochain renouvellement prévu, et la date de facturation d’origine est conservée
Comportement
- Lorsque vous appelez cette API, Dodo Payments lance immédiatement une facturation selon l’option de proratisation sélectionnée
- Avec
prorated_immediately, un crédit correspondant à la portion inutilisée du cycle actuel est calculé à chaque modification, qu’il s’agisse d’une augmentation ou d’une réduction. Si ce crédit dépasse la facturation du nouveau cycle, le solde est ajouté au crédit de l’abonnement. Ces crédits sont spécifiques à cet abonnement et servent uniquement à compenser les futurs paiements récurrents du même abonnement - Avec
difference_immediately, le montant net correspond toujours exactement à la différence de prix. Pour les réductions, l’excédent est conservé comme crédit associé à l’abonnement, comme avecprorated_immediately - L’option
full_immediatelyignore les calculs de crédit et facture le montant total du nouveau forfait - L’option
do_not_billapplique immédiatement la modification, mais reporte la facturation à la prochaine date de renouvellement, qui est conservée
Traitement de la facturation
- La facturation immédiate lancée lors de la modification du forfait est généralement traitée en moins de 2 minutes
- Si cette facturation immédiate échoue pour quelque raison que ce soit, l’abonnement est automatiquement suspendu jusqu’à la résolution du problème
Abonnements à la demande
Les abonnements à la demande vous permettent de facturer vos clients de manière flexible, et pas uniquement selon une fréquence fixe. Cette fonctionnalité est disponible pour tous les comptes.
subscription_data.on_demand dans le corps de votre requête. Cela vous permet d’autoriser un moyen de paiement sans effectuer de facturation immédiate ou de définir un prix initial personnalisé.
Pour facturer un abonnement à la demande :
Pour les facturations suivantes, utilisez l’endpoint POST /subscriptions//charge et indiquez le montant à facturer au client pour cette transaction.
Pour consulter un guide complet étape par étape, notamment avec des exemples de requêtes/réponses, des politiques de nouvelle tentative sûres et la gestion des webhooks, consultez le Guide des abonnements à la demande.
Points essentiels à connaître sur la facturation des abonnements
Les essais créent une autorisation de $0, et non une facturation. Lorsqu’un abonnement comporte une période d’essai, le début de l’essai crée une autorisation de mandat de $0 pour enregistrer la carte ; la première facturation réelle intervient à la fin de l’essai. Dans la liste des paiements, un abonnement en période d’essai gratuite affiche exactement un paiement dont
total_amount vaut 0. Un essai payant facture à la place son trial_amount à l’avance.Cycle de vie de l’abonnement :
past_due = un renouvellement a échoué et la période de grâce est en cours (le client conserve son accès). on_hold = un renouvellement a échoué (récupérable : invitez le client à mettre à jour son moyen de paiement ; les nouvelles tentatives de recouvrement s’appliquent). expired = la période s’est terminée sans renouvellement et ne peut pas être réactivée. Le client doit se réabonner. cancelled = l’abonnement a été terminé par le client ou le marchand. La plupart des échecs de renouvellement sont des refus du côté de l’émetteur (fonds insuffisants, carte refusée), et non une erreur Dodo.Référence API associée
Create Subscription (Deprecated)
API héritée permettant de créer directement un abonnement. Utilisez Checkout Sessions pour les nouvelles intégrations
Change Subscription Plan
Référence API permettant d’augmenter, de réduire ou de modifier les forfaits d’abonnement avec des options de proratisation
Update Payment Method
Référence API permettant de mettre à jour les moyens de paiement et de réactiver les abonnements suspendus
Patch Subscription
Référence API permettant de mettre à jour les détails et la configuration d’un abonnement