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

# Quote a card payout

> POST /v1/card/payout/quote - price a payout to a card before the user commits.

Prices a payout that lands on a card. Anonymous: no account, no wallet, no
identity, so the price can be shown before anyone signs up. For the flow this
belongs to, see [Payouts](/products/payouts).

<Note>
  Needs the **card-payouts permission** on your API key. A key without it gets
  `403 permission_denied`. See [Authentication](/api-reference/authentication).
</Note>

<Warning>
  **Card payouts settle in EUR, GBP and USD only.** The incoming card direction
  covers dozens of currencies; the outgoing one does not, and asking for any other
  currency is refused with `422 no_route`. Where a user needs paying in something
  else, use a [bank payout](/api-reference/bank-payout-quote) - the bank side
  reaches far more currencies. Read
  [GET /v1/payment-methods](/api-reference/reference/payment-methods) per country
  rather than assuming symmetry between the two directions.
</Warning>

## Request

<ParamField body="cryptoCurrency" type="string" required>
  The asset the user is paying out with (e.g. `"USDC"`).
</ParamField>

<ParamField body="chain" type="number" required>
  Chain id the stablecoins are sent from. Must be enabled on your key.
</ParamField>

<ParamField body="fiatCurrency" type="string" required>
  ISO 4217 code the card is settled in (e.g. `"EUR"`).
</ParamField>

<ParamField body="cryptoAmount" type="string">
  The amount of stablecoin the user gives up, as a decimal string. Send this
  **or** `fiatAmount`, never both.
</ParamField>

<ParamField body="fiatAmount" type="string">
  The amount that must arrive on the card, as a decimal string. Use this when the
  user names what they want to receive and the cost is solved backwards.
</ParamField>

## Response

<ResponseField name="quoteId" type="string">
  Pass this to [POST /v1/card/payout](/api-reference/card-payout). A payout
  created without it is repriced at execution.
</ResponseField>

<ResponseField name="cryptoAmount" type="string">
  What the user sends, as a decimal string.
</ResponseField>

<ResponseField name="fiatAmount" type="string">
  What lands on the card, after both fees.
</ResponseField>

<ResponseField name="rate" type="string">
  Exchange rate used, fiat per unit of crypto.
</ResponseField>

<ResponseField name="providerFee" type="string">
  The payout partner's fee, in fiat. **Already deducted from `fiatAmount`.**
</ResponseField>

<ResponseField name="ourFee" type="string">
  Rheon's markup, in fiat. `"0"` until a markup is configured on your account.
</ResponseField>

<ResponseField name="expiresAt" type="string">
  ISO 8601. Execute before this or the quote is refused as expired.
</ResponseField>

<Warning>
  **Fees come out of the payout, they are not charged separately.** With a
  `cryptoAmount` of `100.00` and fees totalling `2.50`, the card receives the
  `fiatAmount` we return - not that figure minus 2.50 again. Showing both numbers
  without saying so reads as a double charge.
</Warning>

<Note>
  Card payout fees carry a flat minimum, so a 20 EUR payout costs proportionally far
  more than a 2,000 EUR one. Quote each amount rather than applying a percentage
  from a single sample.
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "$RHEON_API/v1/card/payout/quote" \
    -H "Authorization: Bearer $RHEON_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "cryptoCurrency": "USDC",
      "chain": 42161,
      "fiatCurrency": "EUR",
      "cryptoAmount": "100.00"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "quoteId": "cpq_7d31a80f5c",
    "cryptoAmount": "100.00",
    "fiatAmount": "84.10",
    "rate": "0.865",
    "providerFee": "2.00",
    "ourFee": "0",
    "expiresAt": "2026-09-02T17:41:05Z"
  }
  ```
</ResponseExample>

## Errors

| HTTP | `code`              | When                                                                        |
| ---- | ------------------- | --------------------------------------------------------------------------- |
| 400  | `invalid_request`   | Missing or malformed amount, both amounts sent, or an unsupported currency. |
| 401  | `unauthorized`      | Missing, malformed, or unknown API key.                                     |
| 403  | `permission_denied` | Your key does not carry the card-payouts permission.                        |
| 403  | `chain_not_allowed` | Your key is not enabled for `chain` as a source.                            |
| 422  | `no_route`          | No payout route for this currency pair right now.                           |
| 429  | `rate_limited`      | Over your key's rate limit.                                                 |
| 502  | `upstream_error`    | The payout partner is unavailable.                                          |
| 500  | `internal`          | Unexpected server error.                                                    |
