FX

Create a firm FX quote

Changed on

Always firm — consumes one vendor quote and persists a Quote row. Pass an Idempotency-Key header to make retries safe (returns the original response on replay).

post/v1/fx/quotes

Request

Headers

X-API-Keystring

API key

Idempotency-Keystring

Client-supplied key to deduplicate retries (e.g. on network timeout). Replays return the original quote rather than burning another vendor quote.

Request body

onBehalfOfstring required

Customer this quote is for (the customer who will deposit).

maxSlippageBpsnumber

Per-trade max slippage tolerance on the re-quote step, in basis points (1 bp = 0.01%). Minimum 5, maximum 1000. Optional for stable sources — if omitted, the organization-level default for the pair applies. REQUIRED for volatile sources (e.g. BTC): a quote whose source can move materially across the deposit-confirmation window is rejected when this is omitted, so the tolerance the customer accepts is always explicit.

Example request

{
  "onBehalfOf": "cus_abc123",
  "pair": {
    "sourceCurrency": "USDT",
    "sourceNetwork": "BASE",
    "sourceRail": "SEPA",
    "destinationCurrency": "USDC",
    "destinationNetwork": "BASE",
    "destinationRail": "SEPA"
  },
  "amount": {
    "value": "10000000",
    "side": "SOURCE"
  },
  "maxSlippageBps": 25
}

Response

Firm quote created.

idstring required
grossSourcestring required

Source amount, fees included, in source-currency minor units.

displayedDestinationstring required

Destination amount the customer will receive, in destination-currency minor units.

ratestring required

All-in customer rate (displayedDestination / grossSource).

referenceRatestring

Independent reference rate used to price this quote, expressed as destination major units per source major unit. Present for benchmark-priced quotes.

referenceRateAsOfstring

Timestamp of the independent reference rate used to price this quote (ISO 8601).

referenceProvider'XE'

Independent market that published referenceRate. Present when referenceRate is present.

expiresAtstring required

Deadline to accept this quote id (ISO 8601). For AT_ACCEPT quotes this is the platform review window only — the displayed rate is indicative until trade creation. The firm price is set at accept (within maxSlippageBps of the quoted rate). For PERSISTED quotes the firm price is held through this time.

indicativeRateExpiresAtstring

When the indicative vendor rate lock behind this browse quote expires (ISO 8601). Present for AT_ACCEPT quotes only. The displayed rate is not guaranteed after this instant; accepting later still re-quotes the vendor and enforces maxSlippageBps.

quoteBinding'PERSISTED' | 'AT_ACCEPT'

How this quote binds to a later trade. PERSISTED: the firm price is held and a trade created from this quote replays it, so accepting later (within expiresAt) is safe. AT_ACCEPT: pricing is finalized when the trade is created, so the price may move between quote and accept.

Example response

{
  "id": "quote_abc123",
  "pair": {
    "sourceCurrency": "USDT",
    "sourceNetwork": "BASE",
    "sourceRail": "SEPA",
    "destinationCurrency": "USDC",
    "destinationNetwork": "BASE",
    "destinationRail": "SEPA"
  },
  "amount": {
    "value": "10000000",
    "side": "SOURCE"
  },
  "grossSource": "10000000",
  "displayedDestination": "9998500",
  "rate": "0.9998500",
  "referenceRate": "1.158691536019208779",
  "referenceRateAsOf": "2026-09-02T18:30:04.000Z",
  "referenceProvider": "XE",
  "expiresAt": "2026-05-26T19:42:00.000Z",
  "indicativeRateExpiresAt": "2026-05-26T19:42:15.000Z",
  "quoteBinding": "PERSISTED",
  "expectedDepositDetails": {
    "kind": "CRYPTO_ADDRESS",
    "address": "0xCustomerInfiniteTxWallet...",
    "network": "BASE",
    "note": "Deposit instructions become active only when the trade created by accepting this quote includes them — immediately on accept, or after the fx_trade.deposit_instructions_ready event if the trade starts in PENDING_WALLET_APPROVAL. Funds sent before then cannot be matched to a trade."
  }
}

Changes

    • warning

      added the new fx_provider_not_configured enum value to the response property for the response status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status