TchokoPay
API Reference

Send a disbursement

POST /v1/disburse — pay somebody else from your balance.

POST/v1/disburseDisburse

Sends money from your TchokoPay balance to any mobile money number.

What the payment is for is yours to decide — a seller settlement, a user withdrawal, a loan disbursement, a refund. The API does not model it.

This is not a withdrawal. A withdrawal moves your balance to your own account and happens in the dashboard. This pays a third party and cannot be undone once the network has it.

Requires a key with the Disburse permission. See Scopes.

Request

curl -X POST https://connect.tchokopay.com/v1/disburse \
  -H "Authorization: Bearer tchoko_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: payout-4417-attempt-1" \
  -d '{
    "amount": 25000,
    "currency": "XAF",
    "phone": "670000000",
    "recipientName": "Amina Njoya",
    "provider": "mtn_cm",
    "merchantReference": "supplier-invoice-4417"
  }'

Body parameters

FieldTypeRequiredDescription
amountnumberrequiredHow much to send, in currency. Must be within your payout limits and your available balance.
currencystringrequiredA currency you hold a balance in. No conversion happens — you pay out what you hold.
phonestringrequiredThe mobile money number to pay, in local format. Max 32 characters.
recipientNamestringoptionalWho is being paid. Shown on your dashboard and to our reviewers. Max 120 characters.
providerstringoptionalWhich network — mtn_cm, orange_cm. Omit and we detect it from the number. Supply it when you already know, so a mis-detected network can't send money to the wrong operator.
countrystringoptionalISO country of the recipient number. Defaults to CM.
merchantReferencestringoptionalYour own identifier. Echoed back as merchantReference on every response and webhook. Max 120 characters.

Headers

HeaderRequiredDescription
AuthorizationrequiredBearer tchoko_live_... on a key with the Disburse permission.
Content-Typerequiredapplication/json
Idempotency-KeyrequiredAny string you choose, max 200 characters.

Idempotency-Key is required here, unlike on payments. A duplicated charge creates an invoice nobody has to pay; a duplicated payout sends real money twice and cannot be recalled. Send the same key again and you get the same payout back, never a second one.

Response

201 Created

{
  "reference": "PO-1787962449863-7B361B",
  "status": "PENDING",
  "amount": 25000,
  "currency": "XAF",
  "phone": "670000000",
  "recipientName": "Amina Njoya",
  "merchantReference": "payout_4417",
  "providerReference": null,
  "awaitingReview": true,
  "statusReason": "Above the 20000 review threshold — held for approval rather than dispatched automatically.",
  "createdAt": "2026-08-29T01:34:09.863Z"
}
FieldDescription
referenceTchokoPay's reference for this payout. Use it to check status later.
statusPENDING right after creation — see Payout status.
awaitingReviewtrue when the amount tripped your review threshold and a person has to release it. Your money is reserved either way.
merchantReferenceEchoes back the reference you sent, or null.
providerReferenceThe network's own transaction id, once we have one.
statusReasonWhy it's being held, or why it failed. null when neither applies.

Errors

StatusMeaning
400No Idempotency-Key, unknown currency, non-positive amount, or not enough balance — the message tells you what you have and what was needed. Also returned when payouts aren't enabled on the platform.
401Missing, invalid, or revoked API key.
403Your key doesn't have the Disburse permission, payouts are off for the platform or your account, or the amount is over one of your limits. The message says which.
429Rate limit hit — see Errors & rate limits.

What happens next

Your balance is reserved

The moment the payout is created, the amount leaves your available balance — whether it goes out immediately or waits for review. You can't spend the same money twice.

It goes to the network, or waits

Under your review threshold, it's dispatched straight away and becomes SENT. Over it, it stays PENDING with awaitingReview: true until somebody at TchokoPay releases it.

You find out

Poll GET /v1/disburse/:reference, or register a webhook once and receive disburse.sent, disburse.succeeded and disburse.failed — see Webhooks.

On this page