Skip to content
Docs menu

Endpoints

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.

currencyNameExample usd_rateExample minimum
USDUS dollar1$1.00
EUREuro1.08€0.93
GBPBritish pound1.27£0.79
CADCanadian dollar0.73CA$1.37
AUDAustralian dollar0.66A$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, 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, 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 itPayment
{  "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.

assetNameDecimal places
USDCUSD Coin2
USDTTether2
BTCBitcoin8
ETHEthereum6
SOLSolana4

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
{  "asset": "USDC",  "network": "polygon",  "amount": "52.92",  "rate": {    "amount": 93,    "currency": "EUR"  }}
  • The checkout locks the amount and rate when it opens, for the quote window in your checkout settings, 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 insettlement for the delivered asset, network and amount, whatever the price's currency.

Exchange rates

GET /exchange-rates 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.