Skip to main content
POST
Submit Order

OpenAPI

/specs/rfq-api.json post /orders

Authorizations

X-API-Key
string
header
required

Service-account API key (tfk_test_/tfk_live_).

Headers

Idempotency-Key
string

Client-chosen key that makes retries safe: a repeated POST carrying the same key returns the original order instead of creating a second one.

Body

application/json
quoteResponse
Selected quote · object
required

The firm quote you picked, passed back exactly as it appeared in the quotes response. The integrityChecksum binds your submission to those terms; any mutation is rejected.

signature
string
required

Hex-encoded EIP-712 signature over the escrow-v0 payload from quote.order (equivalently, the typedData on preflight's orderSignature action).

signScheme
string
default:EIP712

How the signature verifies: EIP712 for standard ECDSA from an EOA (the default), or EIP1271 for smart-contract wallets validated through isValidSignature on-chain.

permit2Lock
Permit2Lock · object | null

Permit2 funding lock: one reusable approval of the Permit2 contract, after which every order authorizes its own pull inside the signature.

eip3009Authorization
Eip3009Authorization · object | null

EIP-3009 funding lock for USDC-style tokens: the transfer is authorized entirely inside the signed message, so no approval transaction ever exists.

Response

Successful Response

id
string
required

Order identifier - poll GET /orders/{id} with it or subscribe to the orders:{id} WebSocket topic.

status
enum<string>
required

State at acceptance time - normally pending.

Available options:
pending,
settled,
failed
quoteId
string
required

The firm quote this order executes.

createdAt
string<date-time>
required

When the API accepted the submission.