Tous les événements ci-dessous sont livrés sur vos endpoints webhook habituels (voir
Webhooks : vue d’ensemble pour la configuration, les
en-têtes et la vérification de signature). Abonnez-vous aux noms tels quels.
Le corps livré
Les champs de data sont en camelCase (subscriptionId, currentPeriodEnd), l’enveloppe
en snake_case (created_at). Ne présumez pas d’une convention unique.
Événements d’abonnement
Lisez data.status, jamais le seul nom de l’événement. subscription.canceled avec
status: "active" veut dire « départ programmé, droits maintenus ». subscription.created avec
status: "unpaid" veut dire « le premier paiement n’a pas abouti ».
Événements de facture et de paiement
invoice.paid et payment.completed sont livrés au moins une fois : sur un renouvellement
réussi, les deux peuvent arriver deux fois. Dédupliquez sur data.invoiceId / data.orderId.
Ce qui n’est pas émis
Pour ne pas attendre un événement qui ne viendra pas :
checkout.session.completed en mode subscription : n’existe que pour les paiements
ponctuels. Écoutez subscription.created.
invoice.created : jamais émis. La première trace d’une facture est invoice.finalized.
invoice.overdue : réservé aux factures manuelles, jamais aux factures d’abonnement.
- Rien à la fin d’un essai ni sur un changement de quantité. Pour l’essai, surveillez
invoice.finalized puis invoice.paid.
Un parcours type