refunds:manage, identity:enquiry,
rates:read, payouts:write, and payouts:read.
1. Register a refund destination
Do this once per settlement currency, before your first payout. We hold no balance for you. If a payout fails after your settlement has arrived, the money has to go somewhere — so we require the destination up front rather than asking for it at the worst possible moment.2. Find the provider code
The processor routes on a machine code, never on a display name."MTN" is not a
routing value — destination_provider_code is.
provider_name and provider_code are named exactly as the payout
request expects them, so you can pass them straight through.
3. Confirm the beneficiary
Name enquiry tells you who actually holds the account, before you commit money to it.destination_account_name on the payout — it is what the
institution holds, not what your user typed. This endpoint needs no
Idempotency-Key; it writes nothing.
4. Price it
An indicative rate is live and non-binding — use it to show a price. A quote freezes the rate and fees for a short TTL.5. Create the payout
destination_amount is what the beneficiary receives. We derive what you owe.
CREATED, settlement_amount: 0, and
payment_instruction: null. All three change within seconds — the settlement
amount is not known until the rate is locked.
6. Read the payment instruction
Instruction generation is kicked off immediately and swept every 30 seconds as a safety net. Wait for thepayout.pending_payment webhook rather than polling.
A
404 PAYMENT_INSTRUCTION_NOT_FOUND here means the instruction does not exist
yet — not that the payout is invalid. Retry, or wait for the webhook.7. Settle it
Send exactlyexpected_amount to account_unique before expires_at.
- Send less and the payout is held for review, not partially processed.
- Send more and it proceeds; the excess comes back with any later refund.
- Send nothing and the payout ends
EXPIRED— terminal. Create a new one.
8. Track it
status and a status_timeline — every
transition with the reason it happened and when. That timeline, not webhook
arrival order, is the authoritative history.
Next steps
Set up webhooks
Stop polling. Every transition, pushed and signed.
Payout lifecycle
All seven statuses and what moves a payout between them.
Handle failures
What happens to your money when a payout fails.
Go live
The checklist before you point real volume at this.