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

> POST /card/quote - price a card purchase before the buyer creates anything.

Returns a live rate for a card payment. Anonymous: no account, no wallet, no
identity - so a buyer can see the price before committing to anything.

## Request

<ParamField body="fiatCurrency" type="string" required>
  ISO 4217 code of the currency the buyer pays in (e.g. `"EUR"`).
</ParamField>

<ParamField body="fiatAmount" type="string" required>
  The amount the buyer pays, as a decimal string (e.g. `"100.00"`). This is the
  **total charge**, fees included - not the amount that gets converted.
</ParamField>

## Response

<ResponseField name="cryptoAmount" type="string">
  What the buyer receives, as a decimal string. Precision follows the asset, so an
  18-decimal figure arrives as an 18-decimal string - keep it as a string.
</ResponseField>

<ResponseField name="cryptoCurrency" type="string">
  Which asset `cryptoAmount` is denominated in. **Always read this rather than
  assuming USDC** - the corridor is configurable, and the sandbox settles in ETH.
</ResponseField>

<ResponseField name="fiatAmount" type="string">
  The provider's own fiat figure for the purchase.
</ResponseField>

<ResponseField name="rate" type="string">
  Exchange rate used, in the provider's convention (fiat per unit of crypto).
</ResponseField>

<ResponseField name="providerFee" type="string">
  The on-ramp's fee, in fiat. **Already included in `total`.**
</ResponseField>

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

<ResponseField name="total" type="string">
  What the buyer is charged in total, in fiat.
</ResponseField>

<ResponseField name="expiresAt" type="string">
  Optional. ISO 8601 expiry of the quoted rate, when the provider supplies one.
</ResponseField>

<Warning>
  **Fees are inside the total, not added to it.** With a `total` of `100.00` and a
  `providerFee` of `7.00`, the buyer pays 100.00 and 93.00 is converted. Displaying
  the two numbers side by side without saying so reads as a surcharge.
</Warning>

<Note>
  Card fees carry a **flat minimum**, so the effective rate is much higher on small
  amounts than on large ones. Quote every amount rather than extrapolating a
  percentage from one sample.
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "$RHEON_API/card/quote" \
    -H "Content-Type: application/json" \
    -d '{
      "fiatCurrency": "EUR",
      "fiatAmount": "100.00"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "cryptoAmount": "0.056295214773915300",
    "cryptoCurrency": "ETH",
    "fiatAmount": "93.00",
    "rate": "1651.71",
    "providerFee": "7.00",
    "ourFee": "0",
    "total": "100.00"
  }
  ```
</ResponseExample>

## Errors

| HTTP | `code`            | When                                                     |
| ---- | ----------------- | -------------------------------------------------------- |
| 400  | `invalid_request` | Missing or malformed amount, or an unsupported currency. |
| 429  | `rate_limited`    | Over the rate limit (5 requests / 10s / IP).             |
| 502  | `upstream_error`  | The on-ramp is unavailable.                              |
| 500  | `internal`        | Unexpected server error.                                 |
