Endpoint
offramp scope.
Body
number
required
USDC amount, 0.5 – 50,000. The local equivalent must fall inside the per-transaction range.
string
required
Payout currency:
KES, NGN, GHS, or UGX.string
A wallet address you control, starting with
0x. Required, unless you set funding_wallet_ref. On automatic orders, if the payout fails or you send too little, we return your USDC here by itself. It’s also where support sends money back if anything needs sorting out.string
The reference of one of your Wallet API addresses. When you set it, we pay the order from that address’s USDC on Base, so you don’t send anything yourself. Refunds go back to that same address, and any
refund_address you send is ignored. Needs an Idempotency-Key. See paying from a Wallet API address.object
required
Who gets paid. See recipients for the fields each payout method needs. We check it before creating the order.For NGN,
recipient.institution is an institution code such as OPAYNGPC. Get the valid codes from GET /api/offramp/institutions.string
Your own reference, such as your payout ID. We send it back as
external_reference in responses and webhooks. It stays between you and us: on M-Pesa and bank payouts, the recipient sees “Payment from Minisend to” followed by your business name.Example
Response (201)
deposit_submission_requiredistruetotal_deposit_usdcequalsamount_usdcfeecomes off the payout- there’s no
sender_fee_usdcortransaction_fee_usdc expires_atis 30 minutes away
string
required
Unique order identifier.
number
required
The exact amount of USDC to send. On send-and-confirm orders it equals
amount_usdc. On automatic orders it’s the order amount plus sender_fee_usdc and transaction_fee_usdc. Send exactly this: a smaller amount isn’t accepted and goes back to refund_address.boolean
required
true: send to deposit_address, then send us the transaction hash. false: we spot your transfer ourselves, so there’s nothing more to do. This can change from order to order, so check it every time instead of going by currency.number
Automatic orders only. A fee that’s already included in
total_deposit_usdc.number
Automatic orders only. A network fee that’s already included in
total_deposit_usdc.string
required
Where to send your USDC on Base. On send-and-confirm orders, it’s a shared address. On automatic orders, it’s a one-time address just for this order, which we watch for you.
string
required
Always
base. We can’t see USDC sent on any other network.number
required
The quoted rate. On send-and-confirm orders, we pay out at the live rate when your USDC arrives, and the order’s
rate, amount_local, and fee update to match. On automatic orders, the rate is fixed.string
required
The deadline for sending your USDC, ISO 8601. 30 minutes on send-and-confirm orders, about an hour on automatic ones. After that, the order becomes
expired.string
Only on orders paid from a Wallet API address. The reference you sent in the request.
string
required
What to do next for this order, in plain words. Handy to show your user.
Paying from a Wallet API address
If the USDC for this payout is already in one of your Wallet API addresses on Base, addfunding_wallet_ref and we pay the order from there. You don’t send anything and there’s no hash to submit.
cURL
funding_wallet_ref added and deposit_submission_required set to false. The USDC for total_deposit_usdc leaves your address straight away, and the recipient is usually paid within a few minutes. Wait for offramp.completed or offramp.failed.
What to know before you use it:
- It works for Kenya M-Pesa phone and till payouts and Nigeria bank payouts. For other recipients, leave out
funding_wallet_refand pay the order yourself. - The address needs at least
total_deposit_usdcin USDC on Base, counting payouts and withdrawals from it that are still in progress. If you’re moving money in from another network, wait forwallet.deposit.settledfirst. refund_addressisn’t needed. Refunds go back to the paying address.- Keep auto-sweep off for that address, so the balance is still there when you pay out.
- An
Idempotency-Keyis required.

