Exchange rate & commission
How fiat prices are converted to crypto at invoice-create time, and how the platform commission is applied.
At invoice-create time, the platform locks two numbers:
exchange_rate— crypto per one fiat unit. Read from the configured rate source.commission_rate— agreed with the merchant at onboarding. Applied to the fiat amount.
Both are frozen on the invoice. If the market moves during the TTL, the invoice is unaffected.
Formulas#
Given fiat_amount, exchange_rate, commission_rate:
crypto_amount = round(fiat_amount / exchange_rate, decimals_for_crypto)
commission_amount = fiat_amount * commission_rate
Rounding uses the payment precision for the chosen crypto (8 for BTC, 6 for ETH, etc.).
Who pays the commission#
By default the merchant does — the customer is quoted the gross fiat amount; the platform settles the net on payout.
Why lock the rate#
- Predictable customer experience: the QR code promises a specific crypto amount.
- Predictable accounting: your reconciliation is against a frozen price, not a live one.
- Overpaid/underpaid semantics are unambiguous: "did the received amount match the frozen
crypto_amount?"
Rate source outages#
If the rate source is unavailable at create time, the API returns an error rather than guessing. Retry — do not supply your own rate. Exchange-rate integrity is part of what the platform guarantees.
See also#
- Invoice lifecycle for overpaid / underpaid semantics.
- Create an invoice for the fields involved.