Skip to main content
This guide pays 10 USDC to a Kenyan M-Pesa number, then covers what changes for NGN. Before you start, you need:
  • An API key with the offramp scope. See getting access.
  • A wallet you control holding USDC on Base.
1

Quote the payout

Include the recipient to validate the account and get the registered name in the same call.
recipient_amount is what lands in the recipient’s account. For KES, GHS, and UGX the quote is indicative; the payout executes at the live rate when your deposit is processed.
2

Create the order

Pass an Idempotency-Key header so a network retry can never create two orders.
Minisend validates the recipient’s account before creating anything. An invalid account returns 422.
3

Send USDC on Base

From your own wallet, transfer total_deposit_usdc USDC on Base to deposit_address before expires_at (30 minutes for KES, GHS, and UGX).
Send the exact amount, in USDC, on Base. A short transfer or a transfer on another chain cannot be verified in the next step.
4

Submit the transaction hash

A 200 with "status": "settling" means the payout is in flight. A 422 means the transfer could not be verified; check the amount, chain, and hash, then retry the same call.
5

Confirm completion

Poll the order, or listen for the webhook:
When the payout lands, status becomes completed, settlement_receipt holds the payout receipt (an M-Pesa code for KES), and an offramp.completed webhook fires. See off-ramp webhooks.

NGN payouts

NGN orders pay out to bank accounts, and the deposit flow differs in two ways:
  1. The recipient shape uses a bank institution code and account_number. See recipients.
  2. There is no hash submission. The order returns a single-use deposit_address. Send total_deposit_usdc (the order amount plus any sender_fee_usdc and transaction_fee_usdc) before expires_at, about 5 minutes, and the deposit is detected automatically.
The 5-minute NGN window is short because the rate is locked at creation. Create the order only when you are ready to send, and automate the transfer. If the window lapses the order expires; create a new one. If a payout fails after you deposit, the funds are refunded to your refund_address automatically.