Skip to main content
POST

Authorizations

Authorization
string
header
required

ES256 JWT bearer token, minted fresh per request.

See Authentication for the claims, including the nonce, the request signature, the two scopes, and which status means what.

X-Request-Signature
string
header
required

Body-bound ES256 signature over the request, required alongside the bearer token on every call. Base64url of an IEEE P-1363 fixed 64-byte r‖s signature.

See Authentication for the canonical string it signs, including the JWT nonce that binds it to the bearer token.

Headers

X-App-Mode
enum<string>
default:SANDBOX

Which environment this request runs against.

An omitted header means SANDBOX. Send it explicitly on every call rather than relying on that default, so live money movement is never missed because a header was forgotten: a live API key that reaches a live instance without an explicit LIVE value is rejected with AUTH_API_KEY_SANDBOX_REQUIRED. When present, the value must be SANDBOX or LIVE, matched without regard to case. Any other value, including an empty one, returns 400 INVALID_APP_MODE; details.received echoes the value you sent.

Available options:
SANDBOX,
LIVE
Example:

"SANDBOX"

X-Request-Id
string

Your own correlation id for this request, returned on the response exactly as you sent it.

Optional. Where you send none the response omits it, and the X-Trace-Id response header is the handle to correlate on instead.

Example:

"9f2c1b7e-4d3a-4f81-9c2e-6b0a5d7e1f34"

Idempotency-Key
string
required

Unique client-generated key identifying this request.

A request that timed out or failed can be replayed safely under the same key. See Idempotency keys.

Pattern: ^[a-zA-Z0-9_-]{1,255}$
Example:

"3fa85f64-5717-4562-b3fc-2c963f66afa6"

Body

application/json

Payload for requesting a payout quote. Provide exactly one of sendAmount / receiveAmount.

receiver
object
required

The receiving side of a payout to create: the payout address the funds are credited to.

receiveCurrency
string
required

Currency to send to receiver. Must be supported by the selected payout address. Where it differs from the financial account's currency, the quote prices a conversion between the two.

Pattern: ^[A-Z0-9]{2,15}$
Example:

"INR"

financialAccountId
string

Optional financial account to debit. When provided, references one of the financial accounts from GET /v3/common/financial-accounts.

Pattern: ^finacc_[1-9A-HJ-NP-Za-km-z]{21,22}$
Example:

"finacc_AmKC5dMVXUbiAW8VzKBfqz"

sendAmount
string

Total to debit, fees included. Provide exactly one of sendAmount / receiveAmount.

Pattern: ^[0-9]+(\.[0-9]{1,8})?$
Example:

"1000.00"

receiveAmount
string

Amount to deliver on the receive side. Provide exactly one of sendAmount / receiveAmount.

Pattern: ^[0-9]+(\.[0-9]{1,8})?$
Example:

"83450.00"

quoteForSeconds
enum<integer>

How long the resulting quote's price is held, in seconds.

A value outside the accepted set is rejected as a VALIDATION_ERROR. Omit it to default to 60 seconds, or your organization's configured hold when one is set. The resolved absolute expiry comes back as fxRates.expiresAt. A longer hold can be reflected in the quoted rate under your organization's pricing agreement.

Available options:
15,
30,
45,
60,
300,
600,
900
Example:

60

metadata
object

Your own key/value pairs, kept on the record and returned with it.

See Metadata for what belongs in a metadata object, the limits, and where it comes back. Metadata is visible in the OpenFX platform, API, and MCP server (including connected AI tools), so don't include sensitive or personal data.

Example:
sender
object

A reference to an account by id: the sender, named on the quote or, for an inline payout, on the payout itself. The resulting payout is created in this account's name; the funds still move from your financial account, never from theirs. It must hold an ACTIVE capability whose grants include SEND_PAYOUTS_TO_THIRD_PARTIES and whose coverage extends to the destination; see Working with capabilities for what that coverage requires.

Response

The created quote.

data
object
required

An immutable, time-bounded FX price snapshot; moves no funds by itself. Pass its id as quoteId on POST /v3/payments/payouts to apply this exact rate; applying an expired quote to a payout is rejected with 409 QUOTE_EXPIRED.