Versements
Un versement (payout) envoie de l’argent depuis votre solde available vers un portefeuille mobile money.
curl -s -X POST https://sandbox-api.xaalis.org/v1/payouts \ -H "Authorization: Bearer $XAALIS_KEY" -H "Content-Type: application/json" \ -H "Idempotency-Key: payout-2026-09-25" \ -d '{"amount":5000,"provider":"wave","recipient":{"phone":"+221770000001","name":"Awa Ndiaye"}}'| Champ | Remarques |
|---|---|
amount |
entier en XOF |
provider |
wave ou orange_money (les versements Orange Money ne sont pas encore disponibles en production → 422 unsupported) |
recipient.phone |
+2217XXXXXXXX |
recipient.name |
facultatif |
client_reference |
facultatif, votre identifiant |
Comment votre solde évolue
Section intitulée « Comment votre solde évolue »L’argent est réservé avant tout envoi : deux versements ne peuvent donc jamais dépenser les mêmes francs.
| Étape | available |
pending_payouts |
|---|---|---|
POST /v1/payouts accepté (pending) |
− (montant + frais) | + montant |
le prestataire confirme → succeeded |
— | − montant |
le prestataire refuse → failed |
+ (montant + frais) | − montant |
Les frais sont un montant fixe défini par Xaalis, ajouté au versement. Lisez-les avant de verser dans
GET /v1/balance → payout_fee_fixed (entier en F CFA, 0 par défaut) : le maximum versable est
available − payout_fee_fixed. C’est l’état actuel du réglage : relisez-le juste avant de confirmer ; chaque versement
garde les fee avec lesquels il a été créé, visibles sur l’objet.
Si available ne couvre pas amount + fee, la requête échoue avec 422 insufficient_funds et votre solde ne change
pas. La tentative est enregistrée comme un versement status: "failed", failure_reason: "insufficient_funds", et
une nouvelle tentative avec la même clé renvoie le même 422.
Les frais du versement (fee) figurent sur l’objet (0 par défaut).
pending → processing → succeeded | failed. Vous recevez les webhooks payout.succeeded /
payout.failed. Interrogez GET /v1/payouts/{id} si vous devez attendre le résultat de façon synchrone. Pour lister :
GET /v1/payouts?limit=&starting_after=.
Une Idempotency-Key est obligatoire (400 sans elle) : une requête de versement relancée
renvoie le premier versement, jamais un second transfert. La même clé avec un montant, un prestataire ou un
bénéficiaire différent renvoie 409.
Si l’API répond 503 temporarily_unavailable, l’issue de la réservation n’est pas encore connue : relancez avec la
même clé — vous obtiendrez le versement d’origine ou un refus net, jamais deux versements.