Refunds
Rembourser tout ou partie d'une transaction.
Lance un refund sur une transaction existante du marchand. Le worker route automatiquement vers le provider d'origine (MTN/MOOV/SBIN pour mobile money, Stripe pour bank/card).
Comportement
Mobile money
Appel requestRefund du provider correspondant. Si succès → débit du wallet marchand + transaction marquée REFUNDED.
Bank / Card (Stripe)
Si transaction PENDING → paymentIntents.cancel. Si SUCCESS → refunds.create.
Requête
POST /v1/refunds
X-Api-Key: …
X-Timestamp: …
X-Signature: …
Idempotency-Key: refund-AB12CD34EF-full
Content-Type: application/jsonBody
{
"transaction_reference": "AB12CD34EF",
"amount": 12000,
"reason": "Demande client",
"metadata": { "ticket_id": "T-9001" }
}transaction_reference
✓
Référence publique de la transaction
amount
optionnel
Défaut = montant total. Doit être ≤ montant original. Refund partiel selon le support du provider
reason
optionnel
Max 500 chars
metadata
optionnel
Object libre
Pré-validation synchrone
Avant d'enregistrer l'opération, l'endpoint vérifie que la transaction existe et appartient au marchand. Si non : 404 immédiat, pas d'opération créée.
Réponse 202 Accepted
Résultat final
status ∈ completed (settled), pending (mobile money attend la confirmation), ou implicite failed via le champ error au niveau opération.
Événements webhook
refund.completed
Settled (provider success ou Stripe refund créé)
refund.pending
Mobile money en attente de confirmation provider
refund.failed
Rejeté, non-refundable, ou erreur réseau
Effets de bord
La transaction d'origine passe en
_status: REFUNDED(et_refunded_atest rempli).Le wallet marchand est débité du montant du refund (en plus des frais éventuels du provider).
Le refund apparaît dans
GET /transactions/:referencesous le champrefunds[].
Erreurs
validation_error
Body invalide
transaction_not_found
Référence inconnue ou pas à ce marchand (404 sync)
transaction_not_settled
La transaction n'a pas encore de moyen de paiement assigné
not_refundable
Statut hors SUCCESS/PENDING (déjà refunded, échouée, etc.)
amount_exceeds_transaction
amount > montant original
insufficient_balance
Wallet marchand insuffisant pour couvrir le refund
stripe_unavailable
SDK Stripe non configuré côté serveur (cas bank)
unsupported_payment_method
Le moyen de paiement n'est ni Mobile ni Banque
provider_rejected
Provider a refusé le refund
Voir aussi
Statut transaction pour voir l'historique des refunds appliqués
Mis à jour
Ce contenu vous a-t-il été utile ?