Two ways to send your USDC
Minisend never holds your funds. You send USDC from your own wallet, and we pay the recipient in local currency. Each order tells you which of two ways to send it in itsdeposit_submission_required field:
NGN orders are always automatic. GHS and UGX orders, and KES paybill and bank orders, always ask you to confirm. KES M-Pesa phone and till orders can go either way, and we decide when you create the order, so it can change from one order to the next. Check
deposit_submission_required on every order rather than going by currency.
Every order has a refund_address. If we can’t pay the recipient, your money goes back there. Minisend never keeps it.
Paying from your Wallet API balance
If you already hold USDC in a Wallet API address, you can skip sending altogether. Addfunding_wallet_ref when you create the order, and we pay the order’s exact total_deposit_usdc from that address on Base for you. There’s no address to send to and no hash to submit. You just wait for offramp.completed.
This suits apps that hold user balances on another network. Send each user’s cash-out to one of your Wallet API addresses, let auto-settlement bring it to Base, then create the order with funding_wallet_ref. One call, and the recipient is paid.
A few things to know:
- It works for Kenya M-Pesa phone and till payouts and Nigeria bank payouts. For paybill, Ghana, and Uganda, pay the order yourself as usual.
- The USDC has to be on Base at that address when you create the order. If there isn’t enough, the order is refused and nothing is created.
- Send an
Idempotency-Keywith every one of these orders. It’s required, so a retry never pays twice. - If a payout is ever refunded, the USDC goes back to the same address. You don’t need to send a
refund_address. - Turn auto-sweep off for that address, so the balance stays there until you pay out.
- It’s switched on per account. Email info@minisend.xyz to turn it on.
How it works
1
Get a quote
POST /api/offramp/quote tells you the rate, the fee, and exactly what the recipient will get.2
Create an order
POST /api/offramp/orders checks the recipient’s account, then gives you a deposit_address and the exact amount to send.3
Send USDC on Base
Send
total_deposit_usdc from your wallet to deposit_address before expires_at.4
Confirm the transfer, if the order asks
When
deposit_submission_required is true, call POST /api/offramp/orders/{order_id}/deposit with your transaction hash. When it’s false, skip this. We spot the transfer ourselves.5
The recipient is paid
The order completes, and we send you an
offramp.completed webhook with the payout receipt.Order statuses
completed, failed, and expired are final. Keep track of orders by checking their status or with webhooks.
Fees and rates
When you send and confirm, the quote is a close estimate, and the platform fee comes out of the local amount. On automatic orders, nothing is taken from the payout. A small sender fee is added to what you send instead, so
total_deposit_usdc is a little more than amount_usdc.
The recipient gets amount_local − fee. Every quote includes recipient_amount, so you can show the exact payout before creating an order, and deposit_submission_required, so you know which way the order will go. On automatic orders, the quote also gives you estimated_total_deposit_usdc.
Limits
Orders can be 0.5 to 50,000 USDC, and the local amount has to fall within the range for the currency:
If an amount is outside these ranges, the quote is refused with a
400, before any money moves.
Getting access
The off-ramp is switched on per account. Email info@minisend.xyz and we’ll turn it on. After that, your existingms_live_ API key works with every endpoint in this section. Until then, these endpoints reply with a 403 asking you to request access. See key scopes.
Make your first payout
Get a quote, create an order, send USDC, and see it paid out, step by step.

