> ## 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.

# Get a quote

> Price a USDC-to-local-currency payout before creating an order. Returns the rate, local amount, fee, and what the recipient nets, with optional recipient validation.

Prices a payout without creating anything. Optionally validates the recipient and returns the registered account name in the same call.

## Endpoint

```text theme={null}
POST https://merchant.minisend.xyz/api/offramp/quote
```

```text theme={null}
Authorization: Bearer ms_live_your_key_here
```

Requires the `offramp` scope. See [getting access](/offramp/overview#getting-access).

## Body

<ParamField body="amount" type="number" required>
  USDC amount, 0.5 – 50,000. The local equivalent must also fall inside the [per-transaction range](/offramp/overview#limits) for the currency.
</ParamField>

<ParamField body="currency" type="string" required>
  Payout currency: `KES`, `NGN`, `GHS`, or `UGX`.
</ParamField>

<ParamField body="recipient" type="object">
  Optional. When present, the account is validated and the registered name is returned as `recipient_name`. Shape per method in [recipients](/offramp/recipients). An invalid account returns `422`.
</ParamField>

## Example

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://merchant.minisend.xyz/api/offramp/quote \
    -H "Authorization: Bearer ms_live_your_key_here" \
    -H "Content-Type: application/json" \
    -d '{"amount": 10, "currency": "KES"}'
  ```

  ```javascript Node.js theme={null}
  const res = await fetch('https://merchant.minisend.xyz/api/offramp/quote', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ms_live_your_key_here',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ amount: 10, currency: 'KES' }),
  });

  if (!res.ok) throw new Error((await res.json()).error);
  const quote = await res.json();
  ```

  ```python Python theme={null}
  import requests

  res = requests.post(
      "https://merchant.minisend.xyz/api/offramp/quote",
      headers={
          "Authorization": "Bearer ms_live_your_key_here",
          "Content-Type": "application/json",
      },
      json={"amount": 10, "currency": "KES"},
  )

  res.raise_for_status()
  quote = res.json()
  ```
</CodeGroup>

## Response (200)

```json theme={null}
{
  "amount_usdc": 10,
  "currency": "KES",
  "rate": 129.45,
  "amount_local": 1294,
  "fee": 13,
  "recipient_amount": 1281,
  "expires_at": "2026-07-05T12:05:00.000Z"
}
```

<ResponseField name="rate" type="number" required>
  Local currency per 1 USDC.
</ResponseField>

<ResponseField name="amount_local" type="number" required>
  Gross local amount (`amount × rate`, floored to whole units).
</ResponseField>

<ResponseField name="fee" type="number" required>
  Minisend fee in local units: 1% for KES, GHS, UGX; `0` for NGN.
</ResponseField>

<ResponseField name="recipient_amount" type="number" required>
  What the recipient nets: `amount_local − fee`.
</ResponseField>

<ResponseField name="recipient_name" type="string">
  The registered account name, when a `recipient` was supplied and a name was resolved.
</ResponseField>

<ResponseField name="expires_at" type="string" required>
  Indicative 5-minute quote validity, ISO 8601. For KES, GHS, and UGX the payout executes at the live rate at deposit time regardless; for NGN the rate is locked when you create the order.
</ResponseField>

## Errors

| Status | Meaning                                                                                                      |
| ------ | ------------------------------------------------------------------------------------------------------------ |
| `400`  | Invalid amount, unsupported currency, malformed recipient, or local amount outside the per-transaction range |
| `403`  | Key lacks the `offramp` scope or off-ramp is not enabled on your account                                     |
| `422`  | Recipient supplied but failed validation                                                                     |
| `502`  | Rate temporarily unavailable. Retry                                                                          |

See [error handling](/api-reference/errors) for the response shape.
