Execute an FX conversion on a customer’s account. Debits one currency and credits another at the specified rate.
Two execution modes:
Quote-based — provide quoteId from POST /fx/quotes. Executes at the locked
rate. Returns error if quote is expired or consumed.
At-market — provide sellCurrency, buyCurrency, and amount without a quote.
Executes at the current market rate.
Conversion lifecycle: pending → processing → completed (or failed). Generates conversion_debit and conversion_credit transaction entries on the account.
Not for payments: Use POST /payments with executionPreference: use_quote or at_market for cross-currency payments. This endpoint is for standalone balance conversions.
API key issued at onboarding. Passed as a Bearer token in the Authorization header: Authorization: Bearer <api-key>. Identifies the caller and determines organization scope. Invalid or revoked keys return 401 with error type authentication_error.
Ed25519 or RSA-SHA256 asymmetric signature over the request payload (ADR-0015). Provides request integrity and non-repudiation. The signature covers the HTTP method, path, query string, request body, and timestamp. Invalid signatures return 401 with error type authentication_error.
Unix timestamp (seconds) of when the request was signed. Server rejects requests where the timestamp drifts beyond +/-60 seconds from server time to prevent replay attacks. Must match the timestamp used in the signature computation.
Idempotency key for this request. UUID v4 recommended. Max 128 characters. 24-hour retention. Same key + same body replays original response with Idempotency-Replayed: true. Same key + different body returns 409 (code: duplicate_idempotency_key). Same key while the original request is still processing returns 409 with a Retry-After header (code: idempotency_key_in_flight).
128"550e8400-e29b-41d4-a716-446655440000"
ISO 4217 currency code for fiat (USD, EUR, GBP) or crypto asset ticker (USDC, BTC, ETH). Uppercase, 2-10 characters. Use this type in contexts where both fiat currencies and crypto assets are accepted.
^[A-Z]{2,10}$"USD"
ISO 4217 currency code for fiat (USD, EUR, GBP) or crypto asset ticker (USDC, BTC, ETH). Uppercase, 2-10 characters. Use this type in contexts where both fiat currencies and crypto assets are accepted.
^[A-Z]{2,10}$"USD"
Account resource identifier.
^acc_[A-Za-z0-9]+$"acc_01953e1a5f4b7002"
Account resource identifier.
^acc_[A-Za-z0-9]+$"acc_01953e1a5f4b7002"
FX quote resource identifier.
^qte_[A-Za-z0-9]+$"qte_01953e1a5f4b7006"
Monetary amount as a string. Always string, never float. Up to 8 decimal places for crypto precision.
^[0-9]+(\.[0-9]{1,8})?$"1500.00"
Monetary amount as a string. Always string, never float. Up to 8 decimal places for crypto precision.
^[0-9]+(\.[0-9]{1,8})?$"1500.00"
Consumer-defined key-value store. Available on all primary resources. Max 50 keys. Keys must match ^[a-zA-Z0-9_]{1,40}$. Values are strings (max 500 chars) or null.
Conversion created.
An executed FX conversion. Debits sellCurrency and credits buyCurrency on the customer's accounts. Uses sell/buy naming consistently.
FX conversion resource identifier.
^cnv_[A-Za-z0-9]+$"cnv_01953e1a5f4b7007"
ISO 4217 currency code for fiat (USD, EUR, GBP) or crypto asset ticker (USDC, BTC, ETH). Uppercase, 2-10 characters. Use this type in contexts where both fiat currencies and crypto assets are accepted.
^[A-Z]{2,10}$"USD"
ISO 4217 currency code for fiat (USD, EUR, GBP) or crypto asset ticker (USDC, BTC, ETH). Uppercase, 2-10 characters. Use this type in contexts where both fiat currencies and crypto assets are accepted.
^[A-Z]{2,10}$"USD"
Monetary amount as a string. Always string, never float. Up to 8 decimal places for crypto precision.
^[0-9]+(\.[0-9]{1,8})?$"1500.00"
Monetary amount as a string. Always string, never float. Up to 8 decimal places for crypto precision.
^[0-9]+(\.[0-9]{1,8})?$"1500.00"
"1.0852"
Lifecycle status of an FX conversion.
pending, processing, completed, failed UTC timestamp in RFC 3339 / ISO 8601 format.
"2026-02-23T12:00:00Z"
FX quote resource identifier.
^qte_[A-Za-z0-9]+$"qte_01953e1a5f4b7006"
Account resource identifier.
^acc_[A-Za-z0-9]+$"acc_01953e1a5f4b7002"
Account resource identifier.
^acc_[A-Za-z0-9]+$"acc_01953e1a5f4b7002"
Consumer-defined key-value store. Available on all primary resources. Max 50 keys. Keys must match ^[a-zA-Z0-9_]{1,40}$. Values are strings (max 500 chars) or null.
UTC timestamp in RFC 3339 / ISO 8601 format.
"2026-02-23T12:00:00Z"