> ## Documentation Index
> Fetch the complete documentation index at: https://docs.minisend.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Off-ramp API

> Send USDC from your own wallet and Minisend pays out KES, NGN, GHS, or UGX to any recipient: M-Pesa, mobile money, till, paybill, or bank account.

The off-ramp API turns USDC into local currency payouts to **any recipient**: a phone number, a till, a paybill, or a bank account. Checkout collects money from your customers; the off-ramp API sends money out.

Use it for remittances, payroll, supplier payments, or to add an off-ramp feature to your own product.

## Non-custodial by design

Minisend never holds your funds. USDC moves directly from your wallet into settlement, and Minisend delivers the local currency payout. The deposit flow depends on the payout currency:

| Payout currency | Deposit flow                                                           |
| --------------- | ---------------------------------------------------------------------- |
| KES, GHS, UGX   | Send USDC to the settlement address, then submit your transaction hash |
| NGN             | Send USDC to a single-use deposit address. Detected automatically      |

Every order includes a `refund_address`. If a payout cannot be delivered, funds return there. Minisend never keeps them.

## How it works

<Steps>
  <Step title="Quote">
    `POST /api/offramp/quote` returns the rate, the fee, and what the recipient will receive.
  </Step>

  <Step title="Create an order">
    `POST /api/offramp/orders` validates the recipient's account, then returns a `deposit_address` and the exact amount to send.
  </Step>

  <Step title="Send USDC on Base">
    Transfer `total_deposit_usdc` from your wallet to `deposit_address` before `expires_at`.
  </Step>

  <Step title="Submit the hash (KES, GHS, UGX only)">
    `POST /api/offramp/orders/{order_id}/deposit` with your transaction hash. NGN deposits are detected automatically.
  </Step>

  <Step title="Payout delivered">
    The order completes and an `offramp.completed` webhook delivers the payout receipt.
  </Step>
</Steps>

## Order lifecycle

| Status      | Meaning                                                                    |
| ----------- | -------------------------------------------------------------------------- |
| `pending`   | Waiting for your USDC deposit                                              |
| `settling`  | Deposit accepted, payout in flight                                         |
| `completed` | Recipient paid. `settlement_receipt` holds the payout reference            |
| `failed`    | Payout failed. NGN deposits are refunded to `refund_address` automatically |
| `expired`   | No deposit before `expires_at`. Nothing was sent, nothing is owed          |

`completed`, `failed`, and `expired` are final. Track orders by [polling](/api-reference/offramp/get-order) or with [webhooks](/offramp/webhooks).

## Fees and rates

| Currency      | Fee                      | Rate                                                                |
| ------------- | ------------------------ | ------------------------------------------------------------------- |
| KES, GHS, UGX | 1% of the local amount   | Executed live when your deposit is processed; quotes are indicative |
| NGN           | 0%, included in the rate | Locked when the order is created                                    |

The recipient receives `amount_local − fee`. Every quote includes `recipient_amount`, so you can show the exact payout before creating an order.

## Limits

Orders accept **0.5 – 50,000 USDC**, and the local equivalent must fall inside the per-transaction range for the currency:

| Currency | Per-transaction range |
| -------- | --------------------- |
| KES      | 20 – 250,000          |
| GHS      | 5 – 5,000             |
| UGX      | 500 – 5,000,000       |

Amounts outside these ranges are rejected at quote time with a `400`, before any funds move.

## Getting access

Off-ramp access is enabled per account. [Contact Minisend](https://t.me/minisendapp) to activate it. Once enabled, your existing `ms_live_` API key carries the `offramp` scope and every endpoint in this section works. Calls without the scope return `403`.

<Card title="Make your first payout" icon="arrow-right" href="/offramp/quickstart">
  Quote, create, deposit, and confirm an order end to end.
</Card>
