Aller au contenu principal

Total ou partiel, idempotent

Remboursez en 1 appel, sans casser votre comptabilité

Total ou partiel. Un paiement peut accumuler plusieurs remboursements tant qu'on ne dépasse pas le montant d'origine — les statuts PARTIALLY_REFUNDED et REFUNDED se mettent à jour automatiquement.

Ce que vous obtenez

Total ou partiel

POST /v1/refunds avec payment_id + amount (optionnel : si absent, refund total). Un payment peut recevoir N refunds partiels jusqu'à concurrence du montant initial.

Idempotent

Header Idempotency-Key obligatoire. Un rejeu sur la même clé renvoie le refund existant — pas de double-rétrocession.

Statuts cohérents

Le paiement passe automatiquement à PARTIALLY_REFUNDED ou REFUNDED. Vous n'avez pas à coder le calcul — nos services le font pour vous.

Webhooks dédiés

refund.created → refund.succeeded ou refund.failed. Et payment.refunded émis sur le paiement parent (équivalent Stripe charge.refunded).

Rembourser partiellement un paiement bash
curl https://api.saalapay.com/v1/refunds \
  -H "X-SP-Signature: $HMAC_SIGNATURE" \
  -H "Idempotency-Key: refund-order-1058-line-3" \
  -d '{
    "payment_id": "01HXY9Z...",
    "amount": 15000,
    "reason": "Article retourné par le client"
  }'

# Réponse → status PENDING tant que le provider ne confirme pas
{
  "data": {
    "id": "rf_018f2c...",
    "status": "pending",
    "amount": 15000,
    "currency": "XOF",
    "payment_id": "01HXY9Z..."
  },
  "meta": { "event_emitted": "refund.created" }
}
N partiels — Jusqu'à concurrence du montant
Idempotent Idempotency-Key obligatoire
3 events · created / succeeded / failed

Remboursez sereinement.

Notre service de paiement tient les comptes pour vous.