6. Collect and send

Calls are identical to the individual's (collect, track, cancel, refund): POST /transactions, GET /transactions, GET /transactions/{uuid}, POST /transactions/{uuid}/cancel, POST /transactions/{uuid}/refund, with Authorization: Bearer sk_live_… and X-Application-ID: {id}.

Business specifics

  • X-Application-ID is required: choose the application the operation belongs to.
  • Until KYC is verified, a payment with a live key is refused with 422 (kyc error).
  • Sending money from the balance: POST /transactions with "type": "disbursement". In production the amount is held on the balance before calling the network; insufficient balance = 422 INSUFFICIENT_BALANCE, nothing is created. In test, no balance is required.
  • List filters: status, type, provider, date_from, date_to, amount_min, amount_max, application_id, per_page. Response: data.items + data.pagination.
  • From the dashboard (without API key): GET /merchant/transactions and GET /merchant/transactions/{uuid} with the session token.
  • Asynchronous CSV export: POST /transactions/export, then GET /transactions/exports/{uuid} until "ready", and download through the link received by email.
  • Bank cards: use provider: "mastercard" for both Mastercard and Visa, without phone_number; creation returns a secure checkout_url. Business KYC must be verified before live payments.

Bodies, responses and errors: Individual merchant, steps 5, 6 and 9.

Send money (disbursement)

POST/transactionsAPI key + X-Application-ID

Sends an amount from the application balance to the recipient's Mobile Money wallet. phone_number is required, without a country code, and must match the provider country. In production, the amount is held before calling the network; insufficient balance returns 422 INSUFFICIENT_BALANCE. Use a unique idempotency_key and keep the response uuid.

Request body
{
  "type": "disbursement",
  "provider": "mtn_momo_cm",
  "amount": 2000,
  "currency": "XAF",
  "phone_number": "677895412",
  "idempotency_key": "paiement-fournisseur-42"
}
Response 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": "..."
  }
}
CodeWhen
422INSUFFICIENT_BALANCE, invalid amount/currency, unavailable network or phone number not matching the provider's country.
401Invalid, inactive or wrong-environment API key.
  • The initial status is usually pending. Wait for the transaction.success or transaction.failed webhook, or fetch GET /transactions/{uuid}; do not infer success from the creation response alone.
  • In test (sk_test_), no real balance is required and no funds move.