Quotes
Collect firm, escrow-backed quotes for a trade intent. Competing solvers and LPs each answer with a signed commitment priced from their own inventory - executable exactly as returned, no re-pricing, no last look - ranked best first. When no eligible counterparty can price the pair, the response is a typed product-unavailable error, never a silent fallback to another liquidity source.
curl --request POST \
--url https://api.tetrafi.io/api/v1/rfq/quotes \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"user": "0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693",
"intent": {
"intentType": "swap",
"inputs": [
{
"user": "0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693",
"asset": {
"chainId": 10,
"address": "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"
},
"amount": "25000000"
}
],
"outputs": [
{
"receiver": "0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693",
"asset": {
"chainId": 8453,
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
}
}
],
"swapType": "ExactInput"
},
"supportedTypes": [
"escrow-v0"
]
}
'{
"quotes": [
{
"quoteId": "q_01J2M8W3N9RQK5T7V1X4Z6B8D0",
"solverId": "lp-atlas",
"executionMode": "apiSubmit",
"order": {
"type": "escrow-v0",
"payload": {
"...": "EIP-712 typed data - sign verbatim"
}
},
"validUntil": 1784560045,
"eta": 40,
"validity": {
"validUntil": 1784560045,
"minValidUntil": null
},
"preview": {
"inputs": [
{
"asset": "eip155:10/erc20:0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
"amount": "25000000",
"decimals": 6,
"symbol": "USDC",
"priceUsd": 0.9998
}
],
"outputs": [
{
"asset": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "24987500",
"minimumAmount": "24987500",
"decimals": 6,
"symbol": "USDC",
"priceUsd": 0.9998,
"receiver": "0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693",
"amountBeforeFees": "25007500",
"deltaFromMid": -0.00011
}
]
},
"integrityChecksum": "9c41f2e8b06d5a73",
"routingPath": "direct",
"platformFeeBps": 5,
"lpSpreadBps": 3,
"splitFill": null,
"gas": {
"native": "0",
"usd": 0
},
"warnings": []
},
{
"quoteId": "q_01J2M8X0F2H4K6M8P0R2T4V6X8",
"solverId": "lp-meridian",
"executionMode": "walletBroadcast",
"order": {
"type": "escrow-v0",
"payload": {
"...": "EIP-712 typed data - sign verbatim"
}
},
"validUntil": 1784560032,
"eta": 55,
"validity": {
"validUntil": 1784560032,
"minValidUntil": null
},
"preview": {
"inputs": [
{
"asset": "eip155:10/erc20:0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
"amount": "25000000",
"decimals": 6,
"symbol": "USDC",
"priceUsd": 0.9998
}
],
"outputs": [
{
"asset": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "24981200",
"minimumAmount": "24981200",
"decimals": 6,
"symbol": "USDC",
"priceUsd": 0.9998,
"receiver": "0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693",
"amountBeforeFees": "25001200",
"deltaFromMid": -0.00036
}
]
},
"integrityChecksum": "0f83aa517c2d9b64",
"routingPath": "direct",
"platformFeeBps": 5,
"lpSpreadBps": 4,
"splitFill": null,
"gas": {
"native": "391000000000000",
"usd": 1.31
},
"warnings": []
}
],
"totalQuotes": 2,
"metadata": {
"totalDurationMs": 380,
"solversQueried": 5,
"solversSuccess": 2
}
}OpenAPI
openapi: 3.1.0
info:
title: TetraFi RFQ API
version: '1'
description: >-
Firm, escrow-backed quotes from competing solvers and LPs. Every quote is a signed commitment
priced from the counterparty's own inventory - executable exactly as returned, with no re-pricing
and no last look - and every order settles through a delivery-or-refund escrow: the output
is delivered or the input comes back, never limbo.
servers:
- url: https://api.tetrafi.io/api/v1/rfq
description: >-
RFQ namespace base URL. The chain is no longer part of the URL - every asset in an intent
names its network via chainId. The same host serves the sandbox: authenticate with a tfk_test_
key to quote against test corridors, tfk_live_ for production.
security:
- apiKeyAuth: []
paths:
/quotes:
post:
summary: Quotes
description: |-
## Overview
Collect firm quotes for a trade intent. The request fans out to every eligible solver and LP in your workspace, and each one answers with a signed commitment priced from its own inventory - executable exactly as returned, no re-pricing, no last look. One-to-one trades and multi-token shapes (one-to-many and many-to-one) are all expressed through the intent's `inputs` and `outputs` arrays.
## What comes back
Only firm solver/LP escrow quotes, ranked best first - never DEX, bridge, issuer, or indicative candidates. If no eligible counterparty can price the pair, the response is a typed `productUnavailable` error rather than a silent fallback to another liquidity source.
## Executing a quote
Pick a candidate, preflight it via `POST /orders/preflight`, then follow the plan. Several knobs from older quote APIs are deliberately absent: who lands the transaction is the per-quote `executionMode` (`apiSubmit` | `walletBroadcast`) instead of a sponsored-gas flag; guaranteed minimum outputs replace a slippage parameter; and the funding lock (Permit2, EIP-3009, or resource lock) is selected by preflight rather than requested up front.
operationId: requestQuotes
requestBody:
required: true
content:
application/json:
schema:
type: object
title: QuotesRequest
properties:
user:
type: string
title: User
description: >-
Wallet that signs the order and funds the trade. On walletBroadcast quotes
it also broadcasts the prepared settlement transaction.
example: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
intent:
type: object
title: Intent
description: >-
States what must go in and what must come out - not a route. Every asset carries
its own chainId, so one intent can cross networks; multi-token shapes use
multiple entries in inputs or outputs.
properties:
intentType:
type: string
title: Intent Type
description: Intent kind; use `swap` for a token-for-token trade.
default: swap
inputs:
type: array
title: Inputs
description: Asset(s) the taker supplies. Ordered; every entry is escrowed
when the order settles.
items:
type: object
title: IntentInput
properties:
user:
type: string
title: User
description: >-
Wallet funding and signing this input - normally identical to the
top-level user, different only in delegated setups.
asset:
type: object
title: Asset
description: >-
Asset reference: chainId picks the network (the URL no longer carries
a chain) and address the token contract.
properties:
chainId:
type: integer
title: Chainid
description: Chain ID, e.g. 10 for Optimism.
address:
type: string
title: Address
description: Token contract address on that chain.
required:
- chainId
- address
amount:
anyOf:
- type: string
- type: 'null'
title: Amount
description: >-
Base-unit amount supplied. Required when swapType is ExactInput;
omit under ExactOutput, where the quoting counterparties compute
the input needed.
required:
- user
- asset
outputs:
type: array
title: Outputs
description: Asset(s) that must be delivered; each entry can name its own
receiver.
items:
type: object
title: IntentOutput
properties:
receiver:
anyOf:
- type: string
- type: 'null'
title: Receiver
description: >-
Wallet the output is delivered to. Falls back to the top-level user
when unset; point it elsewhere for swap-and-send - supported in
both execution modes.
asset:
type: object
title: Asset
description: 'Asset reference: chainId names the destination network
and address the token contract.'
properties:
chainId:
type: integer
title: Chainid
description: Chain ID, e.g. 8453 for Base.
address:
type: string
title: Address
description: Token contract address on that chain.
required:
- chainId
- address
amount:
anyOf:
- type: string
- type: 'null'
title: Amount
description: >-
Base-unit amount that must arrive. Set only when swapType is ExactOutput;
under ExactInput the delivery is whatever each firm quote commits
to in its preview.
required:
- asset
swapType:
type: string
enum:
- ExactInput
- ExactOutput
title: Swap Type
description: >-
Which side is pinned. ExactInput fixes what you send (amounts sit on inputs);
ExactOutput fixes what must arrive (amounts sit on outputs). This one
switch replaces the older pick-one convention between sell and buy amounts.
default: ExactInput
partialFill:
type: boolean
title: Partial Fill
description: >-
Let the order settle partially when no single counterparty can cover the
full size; the unfilled remainder follows the refund path.
default: false
required:
- inputs
- outputs
supportedTypes:
type: array
items:
type: string
title: Supported Types
description: >-
Order payload types your signer understands. The current settlement payload
is `escrow-v0` - pass `["escrow-v0"]`.
example:
- escrow-v0
minValidUntil:
anyOf:
- type: integer
- type: 'null'
title: Min Valid Until
description: >-
Earliest quote expiry (unix seconds) you will accept. Firm quotes whose window
closes sooner are dropped before ranking - set it when your flow needs headroom
between quoting and signing.
solverOptions:
anyOf:
- type: object
- type: 'null'
title: Solver Options
description: >-
Per-request solver tuning: pin or exclude specific roster ids from GET /solvers,
or adjust the sweep timeout. Server-managed defaults apply when omitted.
required:
- user
- intent
- supportedTypes
examples:
ExactInput:
summary: Fix the input
description: Send exactly 25 USDC on Optimism; receive what it buys on Base.
value:
user: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
intent:
intentType: swap
inputs:
- user: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
asset:
chainId: 10
address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
amount: '25000000'
outputs:
- receiver: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
asset:
chainId: 8453
address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
swapType: ExactInput
supportedTypes:
- escrow-v0
ExactOutput:
summary: Fix the output
description: Deliver exactly 20 USDC on Base; the competing LPs price the input
required on Optimism.
value:
user: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
intent:
intentType: swap
inputs:
- user: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
asset:
chainId: 10
address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
outputs:
- receiver: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
asset:
chainId: 8453
address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
amount: '20000000'
swapType: ExactOutput
supportedTypes:
- escrow-v0
ManyToOne:
summary: Many to one
description: >-
Consolidate USDC held on Optimism and Base into a single USDC delivery on Ethereum
- one order, one signature.
value:
user: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
intent:
intentType: swap
inputs:
- user: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
asset:
chainId: 10
address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'
amount: '25000000'
- user: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
asset:
chainId: 8453
address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
amount: '15000000'
outputs:
- receiver: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
asset:
chainId: 1
address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
swapType: ExactInput
supportedTypes:
- escrow-v0
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/QuotesResponse'
examples:
EVM:
summary: EVM (Optimism to Base)
description: >-
Two competing LPs answer a 25 USDC Optimism-to-Base intent. Note minimumAmount
equals amount: the quote is the commitment.
value:
quotes:
- quoteId: q_01J2M8W3N9RQK5T7V1X4Z6B8D0
solverId: lp-atlas
executionMode: apiSubmit
order:
type: escrow-v0
payload:
'...': EIP-712 typed data - sign verbatim
validUntil: 1784560045
eta: 40
validity:
validUntil: 1784560045
minValidUntil: null
preview:
inputs:
- asset: eip155:10/erc20:0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85
amount: '25000000'
decimals: 6
symbol: USDC
priceUsd: 0.9998
outputs:
- asset: eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
amount: '24987500'
minimumAmount: '24987500'
decimals: 6
symbol: USDC
priceUsd: 0.9998
receiver: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
amountBeforeFees: '25007500'
deltaFromMid: -0.00011
integrityChecksum: 9c41f2e8b06d5a73
routingPath: direct
platformFeeBps: 5
lpSpreadBps: 3
splitFill: null
gas:
native: '0'
usd: 0
warnings: []
- quoteId: q_01J2M8X0F2H4K6M8P0R2T4V6X8
solverId: lp-meridian
executionMode: walletBroadcast
order:
type: escrow-v0
payload:
'...': EIP-712 typed data - sign verbatim
validUntil: 1784560032
eta: 55
validity:
validUntil: 1784560032
minValidUntil: null
preview:
inputs:
- asset: eip155:10/erc20:0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85
amount: '25000000'
decimals: 6
symbol: USDC
priceUsd: 0.9998
outputs:
- asset: eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
amount: '24981200'
minimumAmount: '24981200'
decimals: 6
symbol: USDC
priceUsd: 0.9998
receiver: '0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693'
amountBeforeFees: '25001200'
deltaFromMid: -0.00036
integrityChecksum: 0f83aa517c2d9b64
routingPath: direct
platformFeeBps: 5
lpSpreadBps: 4
splitFill: null
gas:
native: '391000000000000'
usd: 1.31
warnings: []
totalQuotes: 2
metadata:
totalDurationMs: 380
solversQueried: 5
solversSuccess: 2
Solana:
summary: Solana (sandbox)
description: >-
A solana-devnet (1399811151) quote reached with a tfk_test_ key. The Solana
settlement program sits inside the order payload - sign the payload verbatim,
as on EVM.
value:
quotes:
- quoteId: q_01J2M9A7C9E1G3J5L7N9Q1S3U5
solverId: lp-helios
executionMode: apiSubmit
order:
type: escrow-v0
payload:
programId: Tetra1Sett1ementProgramP1aceho1der11111111
'...': prepared Solana settlement message - sign verbatim
validUntil: 1784560030
eta: 25
validity:
validUntil: 1784560030
minValidUntil: null
preview:
inputs:
- asset: solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
amount: '1000000000'
decimals: 6
symbol: USDC
priceUsd: 0.9999
outputs:
- asset: solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/token:So11111111111111111111111111111111111111112
amount: '11721973075'
minimumAmount: '11721973075'
decimals: 9
symbol: WSOL
priceUsd: 84.7
receiver: 6ZRCB7AAqGre6c72PRz3MHLC73VMYvJ8bi9KHf1HFpNk
amountBeforeFees: '11728008321'
deltaFromMid: -0.00071
integrityChecksum: 5e2d90ac47b1f386
routingPath: direct
platformFeeBps: 5
lpSpreadBps: 6
splitFill: null
gas:
native: '0'
usd: 0
warnings: []
totalQuotes: 1
metadata:
totalDurationMs: 295
solversQueried: 2
solversSuccess: 1
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
ValidityWindow:
properties:
validUntil:
type: integer
title: Valid Until
description: Unix second at which the quote stops being executable - sign and submit
before it.
minValidUntil:
anyOf:
- type: integer
- type: 'null'
title: Min Valid Until
description: >-
Floor the request asked for via minValidUntil; quotes expiring sooner were filtered
out before ranking. Null when the request set no floor.
type: object
required:
- validUntil
title: ValidityWindow
description: >-
Firmness window of a quote - the span in which it is executable exactly as signed. This
replaces the older fixed expiry tiers: each quote states its own window, and integrations
that need more runway raise the floor per request instead of choosing a tier.
GasEstimate:
properties:
native:
type: string
title: Native
description: >-
Estimated gas cost in the settlement chain's native currency, base units. Zero on
apiSubmit quotes, where TetraFi carries the gas.
usd:
anyOf:
- type: number
- type: 'null'
title: Usd
description: The same estimate in US dollars, when a price is available.
type: object
required:
- native
title: GasEstimate
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
SplitFillDetail:
properties:
fills:
items:
type: object
title: SplitFillSlice
properties:
solverId:
type: string
title: Solverid
description: LP taking this slice of the order.
portionBps:
type: integer
title: Portionbps
description: Slice of the total input covered by this LP, in basis points of the
order size.
outputAmount:
type: string
title: Outputamount
description: Base-unit output this slice delivers.
required:
- solverId
- portionBps
type: array
title: Fills
description: Ordered slices, one per participating LP.
executionModel:
type: string
title: Executionmodel
description: >-
How the slices settle - atomic: every slice delivers inside the same escrow order
or the whole order refunds.
type: object
required:
- fills
title: SplitFillDetail
description: >-
Breakdown present when several LPs jointly fill one order. The taker experience does not
change: a single escrow-v0 payload, a single signature, and one delivery-or-refund guarantee
covering every slice.
PriceWarning:
properties:
code:
type: integer
title: Code
description: Numeric warning identifier.
message:
type: string
title: Message
description: What the warning flags - unusual pricing, thin corridor inventory, or similar.
type: object
required:
- code
- message
title: PriceWarning
description: >-
Non-blocking warning attached to a quote's warnings array so unusual conditions surface
before you select it.
QuoteCandidate:
properties:
quoteId:
type: string
title: Quoteid
description: Identifier that follows this quote through preflight, submission, and status
tracking.
solverId:
type: string
title: Solverid
description: The LP or solver standing behind the commitment - a roster id from GET
/solvers.
executionMode:
type: string
enum:
- apiSubmit
- walletBroadcast
title: Executionmode
description: >-
Who puts the settlement on-chain: apiSubmit - TetraFi submits after you sign and carries
the gas; walletBroadcast - you broadcast the prepared transaction from your own RPC.
This is a per-quote property; there is no request-level sponsored-gas flag.
order:
anyOf:
- $ref: '#/components/schemas/StandardOrder'
- type: 'null'
description: >-
The escrow-v0 payload to sign, exactly as returned. Null only when the quote's signable
material is delivered through preflight instead.
validUntil:
type: integer
title: Validuntil
description: >-
Unix second the firmness window closes; the quote expires at this moment - sign and
submit before it.
eta:
anyOf:
- type: integer
- type: 'null'
title: Eta
description: Expected seconds from submission to settlement.
validity:
anyOf:
- $ref: '#/components/schemas/ValidityWindow'
- type: 'null'
description: >-
Structured firmness window - validUntil restated together with the request's minValidUntil
floor, for integrations that track expiries explicitly.
preview:
type: object
title: Preview
description: Human-readable trade terms - what the taker escrows and what the escrow
enforces on delivery.
properties:
inputs:
items:
$ref: '#/components/schemas/PreviewInput'
type: array
title: Inputs
outputs:
items:
$ref: '#/components/schemas/PreviewOutput'
type: array
title: Outputs
required:
- inputs
- outputs
integrityChecksum:
type: string
title: Integritychecksum
description: >-
Tamper-evidence binding the terms you were shown to the terms you submit; any drift
between the two is rejected as an integrity failure.
routingPath:
type: string
title: Routingpath
description: >-
Always direct on RFQ quotes - a single escrow fill with no planner legs. Split fills
remain direct and are described in splitFill.
platformFeeBps:
anyOf:
- type: integer
- type: 'null'
title: Platformfeebps
description: >-
Platform fee applied to this quote, in basis points. Monetization is configured on
the workspace, not passed per request.
lpSpreadBps:
anyOf:
- type: integer
- type: 'null'
title: Lpspreadbps
description: Spread the quoting LP earns on this trade, in basis points.
splitFill:
anyOf:
- $ref: '#/components/schemas/SplitFillDetail'
- type: 'null'
title: Splitfill
description: >-
Populated when several LPs jointly fill the size inside one order; null on single-counterparty
quotes. Either way there is one payload, one signature, one guarantee.
gas:
anyOf:
- $ref: '#/components/schemas/GasEstimate'
- type: 'null'
description: Gas context for the quote; zero-native on apiSubmit, where TetraFi carries
the cost.
warnings:
items:
$ref: '#/components/schemas/PriceWarning'
type: array
title: Warnings
description: Non-blocking warnings attached to the quote.
default: []
type: object
required:
- quoteId
- solverId
- executionMode
- validUntil
- preview
- integrityChecksum
title: QuoteCandidate
description: >-
One firm, escrow-backed quote from a competing solver or LP. Settlement and approval contract
addresses are deliberately absent here - preflight's nextActions carry the exact contracts
for the quote you pick, so integrations never hardcode them.
PreviewOutput:
properties:
asset:
type: string
title: Asset
description: Delivered asset in CAIP-19 form, e.g. eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.
amount:
type: string
title: Amount
description: Base-unit delivery if the order settles exactly as quoted.
minimumAmount:
anyOf:
- type: string
- type: 'null'
title: Minimumamount
description: >-
Floor the escrow enforces on delivery. On firm RFQ quotes this equals amount - the
quote is the commitment, which is why no slippage parameter exists.
decimals:
anyOf:
- type: integer
- type: 'null'
title: Decimals
description: Token decimals, for converting base units to a display amount.
symbol:
anyOf:
- type: string
- type: 'null'
title: Symbol
description: Token ticker symbol.
priceUsd:
anyOf:
- type: number
- type: 'null'
title: Priceusd
description: Reference US-dollar price per whole token, when available.
receiver:
anyOf:
- type: string
- type: 'null'
title: Receiver
description: Wallet this output is delivered to.
amountBeforeFees:
anyOf:
- type: string
- type: 'null'
title: Amountbeforefees
description: Delivery before the platform fee and LP spread are taken, for fee transparency.
deltaFromMid:
anyOf:
- type: number
- type: 'null'
title: Deltafrommid
description: >-
Relative distance of the quoted price from a reference mid; negative means worse than
mid. Useful for best-execution checks across competing quotes.
type: object
required:
- asset
- amount
title: PreviewOutput
PreviewInput:
properties:
asset:
type: string
title: Asset
description: Escrowed asset in CAIP-19 form, e.g. eip155:10/erc20:0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85.
amount:
type: string
title: Amount
description: Base-unit amount the taker escrows.
decimals:
anyOf:
- type: integer
- type: 'null'
title: Decimals
description: Token decimals, for converting base units to a display amount.
symbol:
anyOf:
- type: string
- type: 'null'
title: Symbol
description: Token ticker symbol.
priceUsd:
anyOf:
- type: number
- type: 'null'
title: Priceusd
description: Reference US-dollar price per whole token, when available.
type: object
required:
- asset
- amount
title: PreviewInput
StandardOrder:
properties:
type:
type: string
title: Type
description: Order payload type; escrow-v0 for the current settlement contract.
payload:
type: object
title: Payload
description: >-
Complete EIP-712 envelope - domain, types, and the StandardOrder message - delivered
verbatim by the API. Treat it as opaque: sign exactly what arrives in quote.order
(or the typedData on preflight's orderSignature action) and never assemble or edit
it locally. The signed terms name the parties, the inputs you escrow, the minimum
outputs that must be delivered, an expiry after which the unfilled order refunds,
and a domain-scoped nonce; the integrityChecksum binds them to your submission.
type: object
required:
- type
- payload
title: StandardOrder
description: >-
The escrow-v0 order payload a firm quote asks you to sign. One envelope covers single-counterparty
and split fills alike - one signature either way. Anything you would want different (receiver,
amounts, expiry) changes at quote time, never at signing time.
QuotesResponse:
properties:
quotes:
items:
$ref: '#/components/schemas/QuoteCandidate'
type: array
title: Quotes
description: >-
Firm quotes ranked best price first. Every entry is a signed, executable commitment
from a competing solver or LP - never a DEX, bridge, issuer, or indicative price.
When no eligible counterparty can quote, the API returns a typed productUnavailable
error instead of padding this list from another source.
totalQuotes:
type: integer
title: Totalquotes
description: Number of firm quotes returned.
metadata:
anyOf:
- $ref: '#/components/schemas/QuoteMetadata'
- type: 'null'
description: How the sweep went - the competition behind the response, at a glance.
type: object
required:
- quotes
- totalQuotes
title: QuotesResponse
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
QuoteMetadata:
properties:
totalDurationMs:
type: integer
title: Totaldurationms
description: Wall-clock milliseconds spent sweeping the solver roster.
solversQueried:
type: integer
title: Solversqueried
description: Eligible solvers/LPs the request fanned out to.
solversSuccess:
type: integer
title: Solverssuccess
description: How many answered with a usable firm quote before the deadline.
type: object
required:
- totalDurationMs
- solversQueried
- solversSuccess
title: QuoteMetadata
description: Aggregation stats for the quote sweep - the competition behind the response,
at a glance.
securitySchemes:
apiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: Service-account API key (tfk_test_/tfk_live_).
Authorizations
Service-account API key (tfk_test_/tfk_live_).
Body
Wallet that signs the order and funds the trade. On walletBroadcast quotes it also broadcasts the prepared settlement transaction.
"0x2e7E7cc62919eAf4c502dAC34753cFc5A29e9693"
States what must go in and what must come out - not a route. Every asset carries its own chainId, so one intent can cross networks; multi-token shapes use multiple entries in inputs or outputs.
Show child attributes
Show child attributes
Order payload types your signer understands. The current settlement payload is escrow-v0 - pass ["escrow-v0"].
["escrow-v0"]
Earliest quote expiry (unix seconds) you will accept. Firm quotes whose window closes sooner are dropped before ranking - set it when your flow needs headroom between quoting and signing.
Per-request solver tuning: pin or exclude specific roster ids from GET /solvers, or adjust the sweep timeout. Server-managed defaults apply when omitted.
Response
Successful Response
Firm quotes ranked best price first. Every entry is a signed, executable commitment from a competing solver or LP - never a DEX, bridge, issuer, or indicative price. When no eligible counterparty can quote, the API returns a typed productUnavailable error instead of padding this list from another source.
Show child attributes
Show child attributes
Number of firm quotes returned.
How the sweep went - the competition behind the response, at a glance.
Show child attributes
Show child attributes