- An API key with the
offrampscope. 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 Minisend validates the recipient’s account before creating anything. An invalid account returns
Idempotency-Key header so a network retry can never create two orders.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).4
Submit the transaction hash
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:- The recipient shape uses a bank
institutioncode andaccount_number. See recipients. - There is no hash submission. The order returns a single-use
deposit_address. Sendtotal_deposit_usdc(the order amount plus anysender_fee_usdcandtransaction_fee_usdc) beforeexpires_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.
