Payout

Cette documentation décrit comment intégrer l'API de retrait de Money Fusion ainsi que la gestion des webhooks liés aux événements de retrait.

Authentification

Illustration Authentification

Avant de faire une requête de retrait, vous devez (Allez dans la section Paramètre) :

  1. Générer une clé API depuis votre tableau de bord Money Fusion.
  2. Ajouter l'adresse IP de votre serveur (qui initie la requête) dans votre dashboard.
  3. Inclure cette clé API dans l’en-tête des requêtes HTTP :
moneyfusion-private-key: VOTRE_CLE_API
Content-Type: application/json

Endpoint de retrait

POST https://pay.moneyfusion.net/api/v1/withdraw

Corps de la requête (JSON)

{
  "countryCode": "ci",
  "phone": "05xxxxxxxxx", // MTN
  "amount": 200,
  "withdraw_mode": "mtn-ci",
  "webhook_url": "https://votre-serveur.com/api/withdraw/callback"
}

Réponse en cas de succès

{
  "tokenPay": "D0h6fjyjkCfi",
  "statut": true,
  "message": "Retrait soumis avec succès"
}

Réponse en cas d’erreur

{
  "statut": false,
  "message": "Tous les champs (countryCode, phone, amount, withdraw_mode) sont requis."
}

🔐 À propos du tokenPay

Le champ tokenPay est un identifiant unique généré lors de l’initiation d’un retrait.
Il permet de suivre et vérifier la transaction. Ce token doit être conservé côté client ou serveur car il sera réutilisé pour :

  • Valider et identifier la transaction dans les notifications envoyées par webhook.
  • Faire le lien entre la demande initiale et son statut final.

Ce token garantit ainsi la traçabilité et la sécurité du processus de retrait.


Paramètres requis ou Non (JSON body)

ChampTypeObligatoireDescription
countryCodestringCode du pays (ex: ci pour Côte d’Ivoire)
phonestringNuméro à retirer
amountnumberMontant à retirer
withdraw_modestringMéthode de retrait
webhook_urlstringNONURL vers laquelle Money Fusion enverra la notification

Méthodes de retrait prises en charge (withdraw_mode)

Voici les valeurs supportées pour les champs withdraw_mode et countryCode :

CountrycountryCodewithdraw_mode
Côte d'Ivoireciorange-money-ci / mtn-ci / moov-ci / wave-ci
Senegalsnorange-money-senegal / free-money-senegal / wave-senegal / expresso-senegal
Burkina Fasobforange-money-burkina / moov-burkina-faso
Beninbjmtn-benin / moov-benin
Togotgt-money-togo / moov-togo
Malimlorange-money-mali
Congo Brazzavillecgorange-money-mali / mtn-cg
Camerouncmorange-money-cm / mtn-cm
Congo RDCcdairtel-money-cd
Gabongaairtel-money-ga / libertis-ga
Ghanaghairtel-money-gh / mtn-gh / vodafone-gh
Guinée Conakrygnorange-gn / mtn-gn
Guinée-Bissaugwmtn-gw
Kenyakem-pesa-ke
Mauritaniemrbankily-mr
Nigerneairtel-money-ne / mtn-ne / mauritel-ne
Ougandaugmtn-ug
Centrafriquecforange-cf
Rwandarwmtn-rw
Sierra Leoneslafricell-sl / orange-sl
Tanzanietzairtel-money-tz / m-pesa-tz / tigo-tz
Tchadtdairtel-money-td / moov-td
Gambiegmorange-gm
Éthiopieetsafaricom-et

Webhooks

Votre serveur doit écouter les événements suivants via l’URL webhook_url fournie :

-payout.session.completed;
-payout.session.cancelled;

Exemple de payload webhook :

{
  "event": "payout.session.cancelled",
  "tokenPay": "D0h6fjyjkCfi",
  "montant": 205,
  "numeroRetrait": "07xxxxxxxxx",
  "moyen": "orange-money-ci",
  "webhook_url": "https://votre-serveur.com/api/withdraw/callback",
  "createdAt": "2025-07-17T17:35:23.468Z"
}

Événements possibles

ÉvénementDescription
payout.session.completedLe retrait a été effectué avec succès
payout.session.cancelledLe retrait a échoué ou a été annulé

Exemple de code (Node.js / Express)

// Endpoint Webhook
app.post("/api/withdraw/callback", (req, res) => {
  const { event, tokenPay, montant, numeroRetrait, moyen, createdAt } =
    req.body;

  if (event === "payout.session.completed") {
    // Marquez le retrait comme réussi dans votre DB
  } else if (event === "payout.session.cancelled") {
    // Mettez à jour le retrait comme échoué
  }
});