FX
Foreign exchange only ever happens when you explicitly ask for it — e.g. funding a card in a different currency than the source wallet, or converting a settlement currency. Live rates are captured at the moment of conversion and stored with the transaction for reconciliation.
Rate capture
Every cross-currency movement stores the exact rate and timestamp used, scaled to an integer (rate × 10⁸) to avoid floating-point drift:
json
{
"fxRateScaled": "800000000",
"fxTimestamp": "2026-07-09T10:14:02.000Z",
"settlementCurrency": "USD",
"settlementAmountMinor": "6250"
}Fields on a converted transaction
| Field | Type | Meaning |
|---|---|---|
fxRateScaled | string | The rate × 10⁸ as an integer, so no floating-point drift can creep in. |
fxTimestamp | string | UTC moment the rate was captured. |
settlementCurrency | string | Only present when settlement differs from the transaction currency. |
settlementAmountMinor | string | The settled amount in minor units of the settlement currency. |
Never mixed, always native
A payment's currency and amountMinor are always what the customer actually paid in. The settlement fields appear only when settlement happens in a different currency — the two are never conflated.
Was this page helpful?
