currency you choose picks which one:
Both use the same API key, the same endpoints, and the same
onramp.* webhooks. Each response tells you which one you’re dealing with in payment_method (mpesa or bank_transfer).
The quickest way to get going: get a quote, then create the order. For M-Pesa, creating the order sends the payment prompt straight to your customer’s phone, so there’s no extra step.
Where the money goes
Minisend never holds the USDC. For M-Pesa, once your customer approves the prompt, the USDC goes straight to the Base address you gave us. For bank transfer, once their naira arrives, the USDC goes to your address the same way. If a bank transfer order can’t be completed after the naira arrives, we send the naira back to the payer’s own bank account.How it works
1
Get a quote
POST /api/onramp/quote tells you the rate and the fee. You can start from the amount to charge or the amount you want to receive.2
Create an order
POST /api/onramp/orders creates the order. For M-Pesa, it sends the payment prompt to your customer’s phone in the same call. For bank transfer, it gives you a bank account and instructions to show the payer.3
Your customer pays
They approve the M-Pesa prompt, or send the exact amount shown to the bank account. You don’t need to do anything else.
4
USDC arrives
Once the payment is confirmed, USDC lands at your address. We send an
onramp.completed webhook, followed by onramp.released once the USDC transfer is confirmed.Order statuses
completed, failed, cancelled, and expired are final. Each order is a single attempt: if it ends any way other than completed, we don’t try again. Create a new order if your customer wants another go.
Fees and rates
A platform fee is always added on top of what you receive. You can quote from either side:
For bank transfer, read the final
amount_usdc from the order, since the rate is set when the order is created.
Every quote gives you both figures, so you can show your customer the exact amount before creating the order. For M-Pesa that’s amount_kes, and for bank transfer it’s amount_ngn.
Limits
KES limits are checked when you get a quote. NGN limits are checked at the quote and again when you create the order.
You can create up to 10 orders a minute per account, across both currencies. Bank transfer orders have one more limit: up to 5 orders for the same payer bank account in any 10 minutes.
Bank codes for NGN
Bank transfer orders need the code of the payer’s own bank (refund_account.institution), so we know where to send their naira back if we ever need to. Look codes up with GET /api/onramp/institutions.
Getting access
The onramp 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, for both KES and NGN. Until then, these endpoints reply with a 403 asking you to request access. See key scopes.
Make your first collection
Get a quote, create an order, and see the USDC arrive, step by step.

