6. Encaisser et envoyer

Les appels sont identiques à ceux du particulier (encaisser, suivre, annuler, rembourser) : POST /transactions, GET /transactions, GET /transactions/{uuid}, POST /transactions/{uuid}/cancel, POST /transactions/{uuid}/refund, avec Authorization: Bearer sk_live_… et X-Application-ID: {id}.

Spécificités entreprise

  • X-Application-ID est indispensable : choisissez l'application à laquelle rattacher l'opération.
  • Tant que le KYC n'est pas validé, un paiement avec une clé live est refusé en 422 (erreur kyc).
  • Envoi d'argent depuis le solde : POST /transactions avec "type": "disbursement". En production, le montant est retenu sur le solde avant l'appel au réseau ; solde insuffisant = 422 INSUFFICIENT_BALANCE, rien n'est créé. En test, aucun solde n'est requis.
  • Filtres de liste : status, type, provider, date_from, date_to, amount_min, amount_max, application_id, per_page. Réponse : data.items + data.pagination.
  • Depuis le dashboard (sans clé API) : GET /merchant/transactions et GET /merchant/transactions/{uuid} avec le jeton de session.
  • Export CSV asynchrone : POST /transactions/export, puis GET /transactions/exports/{uuid} jusqu'à « prêt », et téléchargement par le lien reçu par e-mail.
  • Carte bancaire : utilisez provider: "mastercard" pour Mastercard comme pour Visa, sans phone_number; la création renvoie un checkout_url sécurisé. Le KYC de l'entreprise doit être validé avant les paiements live.

Corps, réponses et erreurs : Marchand particulier, étapes 5, 6 et 9.

Envoyer de l'argent (disbursement)

POST/transactionsClé API + X-Application-ID

Envoie un montant depuis le solde de l'application vers le portefeuille Mobile Money du bénéficiaire. phone_number est requis, sans indicatif pays, et doit correspondre au pays de provider. En production, le montant est réservé avant l'appel au réseau ; un solde insuffisant renvoie 422 INSUFFICIENT_BALANCE. Utilisez une idempotency_key unique et conservez l'uuid de la réponse.

Corps de la requête
{
  "type": "disbursement",
  "provider": "mtn_momo_cm",
  "amount": 2000,
  "currency": "XAF",
  "phone_number": "677895412",
  "idempotency_key": "paiement-fournisseur-42"
}
Réponse 201
{
  "success": true,
  "data": {
    "uuid": "018f1a2b-3c4d-7e5f-a6b7-c8d9e0f1a2b4",
    "type": "disbursement",
    "provider": "mtn_momo",
    "status": "pending",
    "amount": "2000.00",
    "currency": "XAF",
    "reference": "MP240101.1235.B12345",
    "phone_number": "677895412",
    "created_at": "2026-11-02T08:05:00Z",
    "updated_at": "2026-11-02T08:05:00Z"
  },
  "meta": {
    "request_id": "...",
    "timestamp": "..."
  }
}
CodeQuand
422INSUFFICIENT_BALANCE, montant/devise invalide, réseau indisponible ou numéro non conforme au pays de l'opérateur.
401Clé API invalide, inactive ou d'un autre environnement.
  • Le statut initial est généralement pending. Attendez le webhook transaction.success ou transaction.failed, ou consultez GET /transactions/{uuid} ; ne déduisez pas le succès de la seule réponse de création.
  • En test (sk_test_), aucun solde réel n'est requis et aucun fonds ne bouge.