Référence des événements
Chaque événement est un objet JSON contenant un type, un ID unique et les données de la ressource concernée. Abonnez-vous à ces événements lors de la création d’un endpoint webhook.
Les événements sont émis en mode livemode: true en production
et livemode: false en sandbox. Un même endpoint ne reçoit
que les événements du mode correspondant à sa clé API.
En cas de retry, le même événement peut être livré plusieurs fois avec le même
id. Stockez les IDs d’événements déjà traités et ignorez
les doublons pour garantir l’idempotence de votre handler.
Événements Paiements
| Événement | Déclencheur |
|---|---|
payment_intent.created | PaymentIntent créé. |
payment_intent.succeeded | Paiement réussi — déclencher la livraison. |
payment_intent.payment_failed | Paiement échoué après la dernière tentative. |
payment_intent.canceled | PaymentIntent annulé manuellement. |
checkout_session.completed | Session checkout passée en statut complete. |
checkout_session.expired | Session expirée sans paiement. |
transaction.succeeded | Transaction finalisée côté opérateur. |
transaction.failed | Transaction échouée côté opérateur. |
refund.created | Remboursement initié. |
refund.succeeded | Remboursement restitué à l'acheteur. |
refund.failed | Remboursement échoué côté opérateur. |
payment_link.paid | Lien de paiement utilisé avec succès. |
Événements Clients
| Événement | Déclencheur |
|---|---|
customer.created | Nouveau |
customer.updated | Données client modifiées. |
customer.deleted | Customer anonymisé (conformité RGPD). |
payment_method.attached | Méthode de paiement ajoutée au client. |
payment_method.detached | Méthode de paiement retirée du client. |
Événements Abonnements
| Événement | Déclencheur |
|---|---|
subscription.created | Nouvel abonnement créé. |
subscription.updated | Abonnement modifié (plan, quantité…). |
subscription.renewed | Renouvellement réussi — facture réglée. |
subscription.past_due | Échec de renouvellement — déclencher relance. |
subscription.canceled | Résiliation effective. |
subscription.trial_will_end | 3 jours avant la fin de la période d'essai. |
invoice.created | Facture générée automatiquement. |
invoice.finalized | Facture finalisée et envoyée au client. |
invoice.paid | Facture réglée. |
invoice.payment_failed | Échec de paiement de la facture. |
Événements Compte
| Événement | Déclencheur |
|---|---|
kyc.submitted | Dossier KYC soumis pour validation. |
kyc.approved | KYC validé — compte pleinement opérationnel. |
kyc.rejected | KYC rejeté — action requise du marchand. |
payout.created | Virement vers le compte bancaire initié. |
payout.paid | Virement effectué avec succès. |
payout.failed | Virement échoué — vérifier les coordonnées bancaires. |
Structure d’un événement
Implémenter un handler
Votre handler webhook doit répondre avec un code HTTP 2xx
dans les 10 secondes. Pour les traitements longs, enfilez la tâche
dans une queue asynchrone et répondez immédiatement.
Commencez toujours par vérifier la signature Sangho-Signature
avant tout traitement. Consultez le
guide de vérification de signature
pour les exemples complets par langage.
Votre handler doit ignorer silencieusement les types d’événements qu’il ne reconnaît
pas et retourner un 200. Sangho peut émettre de nouveaux
types d’événements sans préavis — un handler qui retourne une erreur sur un type
inconnu sera mis en retry inutilement.
Utilisez POST /webhooks/{id}/test/ pour envoyer un événement
fictif à votre endpoint et valider votre intégration sans déclencher un vrai paiement.
L’événement de test a livemode: false quel que soit
l’environnement.