Skip to main content
POST
Node.js

Authorizations

Authorization
string
header
required

ES256-signed JWT bearer token, single-use, 60-second TTL. See Authentication for how to mint one.

X-Request-Signature
string
header
required

ES256 signature over the request, bound to the bearer JWT. Required on every v3 request. See Authentication → Request signing.

Headers

Idempotency-Key
string
required

Client-generated unique key to make a write operation safely retryable. UUID v4 recommended. See Idempotency.

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

"550e8400-e29b-41d4-a716-446655440000"

X-Request-Id
string

Optional, client-supplied correlation ID for this request. Echoed verbatim on the response when supplied; the response omits it when the request did not supply one. Distinct from X-Trace-Id (server-generated, always present). See Metadata & tracing.

Example:

"my-req-abc-123"

Body

application/json

Initiates a withdrawal to a verified withdrawal account. Rail (fiat vs stablecoin) and network are resolved server-side from withdrawalAccountId. Unknown fields are rejected with 400 VALIDATION_BODY_FAILED.

currency
string
required

Currency to withdraw. The server dispatches crypto vs fiat based on the value — a single union, not separate endpoints.

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

"USDC"

withdrawalAmount
string
required

The amount to withdraw, denominated in currency.

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

"1000.00"

withdrawalAccountId
string
required

Verified withdrawal account from GET /v3/fx/withdrawal-accounts.

Pattern: ^([a-z]{3,5}_[1-9A-HJ-NP-Za-km-z]{1,22}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$
Example:

"wac_NDqQ9LmcUASpnHR6CTvdkk"

metadata
object

Optional client-owned bookkeeping bag, persisted with the resource. Accepted only in the request body of POST /v3/fx/withdrawals; Keys are client-defined strings, (e.g. customerId); values must be strings. The server treats the object as opaque pass-through and does not interpret it. On a successful response it is returned nested inside the resource at data.metadata. It is never returned on error responses — metadata is persisted only for valid, accepted requests. Not filterable on any list endpoint. Set at creation and immutable thereafter (v3 has no PATCH endpoints). Limits: at most 50 keys, each key ≤ 40 characters, each value ≤ 500 characters, and the serialized object under 8 KB; requests that exceed these limits are rejected with 400 VALIDATION_BODY_FAILED. For per-call client correlation (as opposed to per-resource bookkeeping), use the X-Request-Id header instead.

Example:

Response

Withdrawal created.

data
object
required

A withdrawal from your trade account.