Skip to main content
The onramp API collects money from a customer and sends it to your own wallet as USDC. It’s the opposite of the off-ramp API: the off-ramp turns your USDC into local currency for someone else, and the onramp turns someone’s local currency into USDC for you. Use it to take payments from people who don’t hold crypto: topping up a balance, funding an account, or collecting for your own customers, without handling the cash yourself. There are two ways to pay, and the 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.
For bank transfer, the naira arriving and the USDC being sent happen at two different moments. See the statuses below.

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 existing ms_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.