> For the complete index of the 402pay docs, see [llms.txt](https://developer.402pay.co/llms.txt).

# Amounts, currencies and exchange rates

How prices, US dollar reporting and coin amounts are written, and how one becomes another.

Three kinds of amount appear in the API: the price, in the currency you set; its value in US dollars, for reporting; and coin amounts, for what customers send and what reaches your wallet.

## Prices

A price is an integer in minor units with its `currency`: `4900` with `EUR` is €49.00. Links and payments take any of these currencies, from the equivalent of $1.00 up to 1,000,000.00 in the currency. Card payment limits depend on the available route, currency and customer region.

| currency | Name | Example usd_rate | Example minimum |
| --- | --- | --- | --- |
| `USD` | US dollar | 1 | $1.00 |
| `EUR` | Euro | 1.08 | €0.93 |
| `GBP` | British pound | 1.27 | £0.79 |
| `CAD` | Canadian dollar | 0.73 | CA$1.37 |
| `AUD` | Australian dollar | 0.66 | A$1.52 |

These rates and minimums are examples. The backend uses its current exchange rate to enforce the minimum price when you create or update a link.

The customer pays the price in its own currency, and the receipt shows it that way. A payment's `customer_fee` and `amount_received` are in minor units of its `currency` too: any fee passed on to the customer, and how much of the price and that fee has arrived.

## USD reporting

Everything you add up is in US cents: a payment's `reporting`, with its `amount`, `fee`, `customer_fee` and `net`, a link's `volume`, a customer's `stats`, [metrics](https://developer.402pay.co/api/metrics.md), and every `*_usd` field on the wallet. A price becomes US cents at its currency's `usd_rate`, rounded to the nearest cent: €49.00 is 4900 × 1.08 = 5292, or $52.92.

Fees are taken on that US dollar value at the rail's `fee_rate_bps`: 0 for crypto and 300 for cards, in hundredths of a percent. A payment shows a fee once it succeeds. When you [pass fees on](https://developer.402pay.co/guides/reconciliation.md#passing-fees-on), the customer's share is worked out in the price's currency, with the flat fee converted from US cents at its `usd_rate` and rounded to the nearest minor unit.

€49.00, as a payment reports it, Payment:

```json
{
  "amount": 4900,
  "currency": "EUR",
  "fee_payer": "business",
  "customer_fee": 0,
  "amount_received": 0,
  "reporting": {
    "currency": "USD",
    "amount": 5292,
    "fee": 0,
    "transaction_fee": 0,
    "customer_fee": 0,
    "net": 0
  }
}
```

## Coin amounts

Coin amounts are decimal strings, such as `"52.92"`, so no precision is lost. Each coin is quoted to a fixed number of decimal places.

| asset | Name | Decimal places |
| --- | --- | --- |
| `USDC` | USD Coin | 2 |
| `USDT` | Tether | 2 |
| `BTC` | Bitcoin | 8 |
| `ETH` | Ethereum | 6 |
| `SOL` | Solana | 4 |

A checkout works out the coin amount from the price's US dollar value and the coin's price, rounded to the coin's decimal places, and shows the rate it used in `crypto.rate`: one coin in minor units of the price's currency. Stablecoins count as one US dollar each.

€49.00, as a checkout quotes it, USDC:

```json
{
  "asset": "USDC",
  "network": "polygon",
  "amount": "52.92",
  "rate": {
    "amount": 93,
    "currency": "EUR"
  }
}
```

€49.00, as a checkout quotes it, BTC:

```json
{
  "asset": "BTC",
  "network": "bitcoin",
  "amount": "0.00053780",
  "rate": {
    "amount": 9111111,
    "currency": "EUR"
  }
}
```

- The checkout locks the amount and rate when it opens, for the quote window in your [checkout settings](https://developer.402pay.co/api/settings/retrieve.md), 15 minutes unless you change it.
- A payment's `method.amount` is what arrived in the coin, and `settlement.amount` what reached your wallet after the fee.
- A card payment reaches your wallet in the selected coin and network. Read its deposit in`settlement` for the delivered asset, network and amount, whatever the price's currency.

## Exchange rates

[`GET /exchange-rates`](https://developer.402pay.co/api/exchange-rates.md) returns the rates checkout quotes with: each coin's `price_usd` in US cents, and each currency's `usd_rate` in US dollars. It's public, so a page you build can show a price in coins before the customer opens a checkout.

> Coin prices follow the market, so read them when you need them rather than keeping a copy. A checkout's quote keeps the rate it opened with for its whole quote window.
