Refunds
Un Refund permet de restituer tout ou partie du montant d’une Transaction réussie à l’acheteur. Le remboursement est effectué via la même méthode de paiement que le paiement original — vous ne pouvez pas rembourser sur un autre canal.
Vous pouvez effectuer plusieurs remboursements partiels sur une même transaction, tant que le total remboursé ne dépasse pas le montant original.
Les délais de restitution des fonds dépendent de l’opérateur :
Mobile Money (Airtel, Moov) : 24–72h.
Carte bancaire : 3–10 jours ouvrés selon la banque émettrice.
PayPal : instantané à 24h. Sangho envoie un webhook
refund.succeeded dès que l’opérateur confirme.
Cycle de vie
| Statut | Signification |
|---|---|
pending | Remboursement créé, en attente de traitement. |
processing | Transmis à l'opérateur, en cours de traitement. |
succeeded | Fonds restitués à l'acheteur. |
failed | Échec du remboursement côté opérateur. Les fonds ne sont pas débités. |
cancelled | Remboursement annulé avant traitement (via /cancel/). |
expired | Délai de traitement dépassé — les fonds sont retournés à votre solde. |
Endpoints
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /refunds/ | Créer un remboursement |
| GET | /refunds/ | Lister les remboursements |
| GET | /refunds/{id}/ | Récupérer un remboursement |
| POST | /refunds/{id}/cancel/ | Annuler un remboursement pending |
Schéma de l’objet
Créer un remboursement
Initie un remboursement pour une transaction existante. La transaction doit être en statut
completed. Un remboursement partiel ne modifie pas le statut de
la transaction originale — seul un remboursement total passe la transaction en
refunded.
transaction Requis ID de la Transaction à rembourser.
La transaction doit être en statut completed.
Une transaction en statut pending,
failed ou disputed ne peut pas être
remboursée. Pour annuler un paiement non encore traité, utilisez
POST /payment-intents/{id}/cancel/.
amount Optionnel Montant à rembourser en centimes. Si omis, rembourse la totalité du montant remboursable de la transaction.
En savoir plus
Le montant ne peut pas dépasser
transaction.amount - montants_déjà_remboursés. Vous pouvez
cumuler plusieurs remboursements partiels. Exemple : transaction de 15 000 XAF →
remboursement de 5 000, puis un second de 3 000 est accepté (reste : 7 000).
reason Optionnel Motif du remboursement. Utilisé pour les rapports internes et la conformité.
En savoir plus
Valeurs acceptées : duplicate (paiement en double),
fraudulent (transaction frauduleuse),
customer_request (demande client),
product_issue (problème produit),
service_not_rendered (service non fourni). Le motif est inclus
dans le webhook refund.succeeded.
description Optionnel Note interne sur le remboursement. Non visible par l’acheteur.
En savoir plus
Idéal pour référencer un ticket de support, une décision interne ou une communication avec le client.
metadata Optionnel Données libres associées au remboursement. Retournées dans le webhook
refund.succeeded.
Un double appel sans Idempotency-Key crée deux remboursements
distincts. Avec une clé identique, Sangho retourne le remboursement existant sans en créer
un nouveau. Utilisez un UUID unique par tentative de remboursement.