Send a payout
Raise a payout and commit the money to it. The money is reserved before this returns, whether or not the payout needs approval. A `requires_approval` response therefore means "the funds are held and somebody must sign", not "nothing has happened yet". In **test mode** the payout is settled as it is raised: no rail is involved, so the response already carries the outcome. `amount_minor` and the destination decide what that outcome is — see the sandbox guide for the values that produce a decline, a timeout, a return or a review hold.
Raise a payout and commit the money to it.
The money is reserved before this returns, whether or not the payout needs
approval. A requires_approval response therefore means "the funds are
held and somebody must sign", not "nothing has happened yet".
In test mode the payout is settled as it is raised: no rail is involved,
so the response already carries the outcome. amount_minor and the
destination decide what that outcome is — see the sandbox guide for the
values that produce a decline, a timeout, a return or a review hold.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
What a payout is made of.
Every field carries a description and an example, and both are load-bearing
rather than decoration — E11-16. The description is what a reader sees on
the operation page; the example is what the reference's playground fills the
field with, so "Send" on a freshly-opened page sends a request that is valid
rather than one made of "string" and 1. A playground whose default body
is refused teaches an integrator that the endpoint is fussy, when what it
actually taught them is that nobody filled in an example.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/b/v1/payouts" \ -H "Content-Type: application/json" \ -d '{ "idempotency_key": "payroll-2026-08-0042", "amount_minor": 15000000, "currency": "RWF", "method": "mobile_money", "transaction_type": "b2p" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "reference": "string", "amount_minor": 0, "fee_minor": 0, "total_minor": 0, "currency": "string", "status": "created", "method": "string", "transaction_type": "string", "category": "string", "recipient_name": "string", "country_code": "string", "rail": "string", "provider_reference": "string", "failure_reason": "string", "approval_id": "15af2260-72db-4fc4-b587-6b841d6a3d55", "created_at": "2019-08-24T14:15:22Z", "completed_at": "2019-08-24T14:15:22Z"}List payouts GET
Previous Page
How this payout got to where it is GET
Every transition in order, with timestamps and who caused each — E6-10. Ordered by when the event was written rather than by status, because a lifecycle read back in the order the code happens to define is not a record of what occurred.