curl --request POST \
--url https://api.tetrafi.io/api/v1/router/orders \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"quoteResponse": {
"quoteId": "<string>",
"solverId": "<string>",
"validUntil": 123,
"preview": {
"inputs": [
{
"asset": "<string>",
"amount": "<string>",
"decimals": 123,
"symbol": "<string>",
"priceUsd": 123
}
],
"outputs": [
{
"asset": "<string>",
"amount": "<string>",
"minimumAmount": "<string>",
"decimals": 123,
"symbol": "<string>",
"priceUsd": 123,
"receiver": "<string>"
}
]
},
"integrityChecksum": "<string>",
"order": {
"type": "<string>",
"payload": {}
},
"eta": 123,
"routingPath": "<string>",
"platformFeeBps": 123,
"lpSpreadBps": 123,
"composite": {
"legs": [
{}
],
"executionModel": "<string>"
},
"gas": {
"native": "<string>",
"usd": 123
},
"warnings": []
},
"signature": "<string>",
"signScheme": "EIP712",
"permit2Lock": {
"signature": "<string>",
"deadline": 123
},
"eip3009Authorization": {
"signature": "<string>",
"validAfter": 123,
"validBefore": 123,
"nonce": "<string>"
}
}
'import requests
url = "https://api.tetrafi.io/api/v1/router/orders"
payload = {
"quoteResponse": {
"quoteId": "<string>",
"solverId": "<string>",
"validUntil": 123,
"preview": {
"inputs": [
{
"asset": "<string>",
"amount": "<string>",
"decimals": 123,
"symbol": "<string>",
"priceUsd": 123
}
],
"outputs": [
{
"asset": "<string>",
"amount": "<string>",
"minimumAmount": "<string>",
"decimals": 123,
"symbol": "<string>",
"priceUsd": 123,
"receiver": "<string>"
}
]
},
"integrityChecksum": "<string>",
"order": {
"type": "<string>",
"payload": {}
},
"eta": 123,
"routingPath": "<string>",
"platformFeeBps": 123,
"lpSpreadBps": 123,
"composite": {
"legs": [{}],
"executionModel": "<string>"
},
"gas": {
"native": "<string>",
"usd": 123
},
"warnings": []
},
"signature": "<string>",
"signScheme": "EIP712",
"permit2Lock": {
"signature": "<string>",
"deadline": 123
},
"eip3009Authorization": {
"signature": "<string>",
"validAfter": 123,
"validBefore": 123,
"nonce": "<string>"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
quoteResponse: {
quoteId: '<string>',
solverId: '<string>',
validUntil: 123,
preview: {
inputs: [
{
asset: '<string>',
amount: '<string>',
decimals: 123,
symbol: '<string>',
priceUsd: 123
}
],
outputs: [
{
asset: '<string>',
amount: '<string>',
minimumAmount: '<string>',
decimals: 123,
symbol: '<string>',
priceUsd: 123,
receiver: '<string>'
}
]
},
integrityChecksum: '<string>',
order: {type: '<string>', payload: {}},
eta: 123,
routingPath: '<string>',
platformFeeBps: 123,
lpSpreadBps: 123,
composite: {legs: [{}], executionModel: '<string>'},
gas: {native: '<string>', usd: 123},
warnings: []
},
signature: '<string>',
signScheme: 'EIP712',
permit2Lock: {signature: '<string>', deadline: 123},
eip3009Authorization: {signature: '<string>', validAfter: 123, validBefore: 123, nonce: '<string>'}
})
};
fetch('https://api.tetrafi.io/api/v1/router/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tetrafi.io/api/v1/router/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'quoteResponse' => [
'quoteId' => '<string>',
'solverId' => '<string>',
'validUntil' => 123,
'preview' => [
'inputs' => [
[
'asset' => '<string>',
'amount' => '<string>',
'decimals' => 123,
'symbol' => '<string>',
'priceUsd' => 123
]
],
'outputs' => [
[
'asset' => '<string>',
'amount' => '<string>',
'minimumAmount' => '<string>',
'decimals' => 123,
'symbol' => '<string>',
'priceUsd' => 123,
'receiver' => '<string>'
]
]
],
'integrityChecksum' => '<string>',
'order' => [
'type' => '<string>',
'payload' => [
]
],
'eta' => 123,
'routingPath' => '<string>',
'platformFeeBps' => 123,
'lpSpreadBps' => 123,
'composite' => [
'legs' => [
[
]
],
'executionModel' => '<string>'
],
'gas' => [
'native' => '<string>',
'usd' => 123
],
'warnings' => [
]
],
'signature' => '<string>',
'signScheme' => 'EIP712',
'permit2Lock' => [
'signature' => '<string>',
'deadline' => 123
],
'eip3009Authorization' => [
'signature' => '<string>',
'validAfter' => 123,
'validBefore' => 123,
'nonce' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tetrafi.io/api/v1/router/orders"
payload := strings.NewReader("{\n \"quoteResponse\": {\n \"quoteId\": \"<string>\",\n \"solverId\": \"<string>\",\n \"validUntil\": 123,\n \"preview\": {\n \"inputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123\n }\n ],\n \"outputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"minimumAmount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123,\n \"receiver\": \"<string>\"\n }\n ]\n },\n \"integrityChecksum\": \"<string>\",\n \"order\": {\n \"type\": \"<string>\",\n \"payload\": {}\n },\n \"eta\": 123,\n \"routingPath\": \"<string>\",\n \"platformFeeBps\": 123,\n \"lpSpreadBps\": 123,\n \"composite\": {\n \"legs\": [\n {}\n ],\n \"executionModel\": \"<string>\"\n },\n \"gas\": {\n \"native\": \"<string>\",\n \"usd\": 123\n },\n \"warnings\": []\n },\n \"signature\": \"<string>\",\n \"signScheme\": \"EIP712\",\n \"permit2Lock\": {\n \"signature\": \"<string>\",\n \"deadline\": 123\n },\n \"eip3009Authorization\": {\n \"signature\": \"<string>\",\n \"validAfter\": 123,\n \"validBefore\": 123,\n \"nonce\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tetrafi.io/api/v1/router/orders")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"quoteResponse\": {\n \"quoteId\": \"<string>\",\n \"solverId\": \"<string>\",\n \"validUntil\": 123,\n \"preview\": {\n \"inputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123\n }\n ],\n \"outputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"minimumAmount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123,\n \"receiver\": \"<string>\"\n }\n ]\n },\n \"integrityChecksum\": \"<string>\",\n \"order\": {\n \"type\": \"<string>\",\n \"payload\": {}\n },\n \"eta\": 123,\n \"routingPath\": \"<string>\",\n \"platformFeeBps\": 123,\n \"lpSpreadBps\": 123,\n \"composite\": {\n \"legs\": [\n {}\n ],\n \"executionModel\": \"<string>\"\n },\n \"gas\": {\n \"native\": \"<string>\",\n \"usd\": 123\n },\n \"warnings\": []\n },\n \"signature\": \"<string>\",\n \"signScheme\": \"EIP712\",\n \"permit2Lock\": {\n \"signature\": \"<string>\",\n \"deadline\": 123\n },\n \"eip3009Authorization\": {\n \"signature\": \"<string>\",\n \"validAfter\": 123,\n \"validBefore\": 123,\n \"nonce\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tetrafi.io/api/v1/router/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"quoteResponse\": {\n \"quoteId\": \"<string>\",\n \"solverId\": \"<string>\",\n \"validUntil\": 123,\n \"preview\": {\n \"inputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123\n }\n ],\n \"outputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"minimumAmount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123,\n \"receiver\": \"<string>\"\n }\n ]\n },\n \"integrityChecksum\": \"<string>\",\n \"order\": {\n \"type\": \"<string>\",\n \"payload\": {}\n },\n \"eta\": 123,\n \"routingPath\": \"<string>\",\n \"platformFeeBps\": 123,\n \"lpSpreadBps\": 123,\n \"composite\": {\n \"legs\": [\n {}\n ],\n \"executionModel\": \"<string>\"\n },\n \"gas\": {\n \"native\": \"<string>\",\n \"usd\": 123\n },\n \"warnings\": []\n },\n \"signature\": \"<string>\",\n \"signScheme\": \"EIP712\",\n \"permit2Lock\": {\n \"signature\": \"<string>\",\n \"deadline\": 123\n },\n \"eip3009Authorization\": {\n \"signature\": \"<string>\",\n \"validAfter\": 123,\n \"validBefore\": 123,\n \"nonce\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"quoteId": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Submit Order
Submit a signed order for settlement. Pass the selected candidate back unchanged together with the taker’s EIP-712 signature over its escrow-v0 payload; the API verifies the signature against the integrityChecksum and, on apiSubmit candidates, lands the settlement transaction on-chain and carries the gas. Send an Idempotency-Key header (the quoteId works well) so a retried POST can never double-submit.
curl --request POST \
--url https://api.tetrafi.io/api/v1/router/orders \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"quoteResponse": {
"quoteId": "<string>",
"solverId": "<string>",
"validUntil": 123,
"preview": {
"inputs": [
{
"asset": "<string>",
"amount": "<string>",
"decimals": 123,
"symbol": "<string>",
"priceUsd": 123
}
],
"outputs": [
{
"asset": "<string>",
"amount": "<string>",
"minimumAmount": "<string>",
"decimals": 123,
"symbol": "<string>",
"priceUsd": 123,
"receiver": "<string>"
}
]
},
"integrityChecksum": "<string>",
"order": {
"type": "<string>",
"payload": {}
},
"eta": 123,
"routingPath": "<string>",
"platformFeeBps": 123,
"lpSpreadBps": 123,
"composite": {
"legs": [
{}
],
"executionModel": "<string>"
},
"gas": {
"native": "<string>",
"usd": 123
},
"warnings": []
},
"signature": "<string>",
"signScheme": "EIP712",
"permit2Lock": {
"signature": "<string>",
"deadline": 123
},
"eip3009Authorization": {
"signature": "<string>",
"validAfter": 123,
"validBefore": 123,
"nonce": "<string>"
}
}
'import requests
url = "https://api.tetrafi.io/api/v1/router/orders"
payload = {
"quoteResponse": {
"quoteId": "<string>",
"solverId": "<string>",
"validUntil": 123,
"preview": {
"inputs": [
{
"asset": "<string>",
"amount": "<string>",
"decimals": 123,
"symbol": "<string>",
"priceUsd": 123
}
],
"outputs": [
{
"asset": "<string>",
"amount": "<string>",
"minimumAmount": "<string>",
"decimals": 123,
"symbol": "<string>",
"priceUsd": 123,
"receiver": "<string>"
}
]
},
"integrityChecksum": "<string>",
"order": {
"type": "<string>",
"payload": {}
},
"eta": 123,
"routingPath": "<string>",
"platformFeeBps": 123,
"lpSpreadBps": 123,
"composite": {
"legs": [{}],
"executionModel": "<string>"
},
"gas": {
"native": "<string>",
"usd": 123
},
"warnings": []
},
"signature": "<string>",
"signScheme": "EIP712",
"permit2Lock": {
"signature": "<string>",
"deadline": 123
},
"eip3009Authorization": {
"signature": "<string>",
"validAfter": 123,
"validBefore": 123,
"nonce": "<string>"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
quoteResponse: {
quoteId: '<string>',
solverId: '<string>',
validUntil: 123,
preview: {
inputs: [
{
asset: '<string>',
amount: '<string>',
decimals: 123,
symbol: '<string>',
priceUsd: 123
}
],
outputs: [
{
asset: '<string>',
amount: '<string>',
minimumAmount: '<string>',
decimals: 123,
symbol: '<string>',
priceUsd: 123,
receiver: '<string>'
}
]
},
integrityChecksum: '<string>',
order: {type: '<string>', payload: {}},
eta: 123,
routingPath: '<string>',
platformFeeBps: 123,
lpSpreadBps: 123,
composite: {legs: [{}], executionModel: '<string>'},
gas: {native: '<string>', usd: 123},
warnings: []
},
signature: '<string>',
signScheme: 'EIP712',
permit2Lock: {signature: '<string>', deadline: 123},
eip3009Authorization: {signature: '<string>', validAfter: 123, validBefore: 123, nonce: '<string>'}
})
};
fetch('https://api.tetrafi.io/api/v1/router/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tetrafi.io/api/v1/router/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'quoteResponse' => [
'quoteId' => '<string>',
'solverId' => '<string>',
'validUntil' => 123,
'preview' => [
'inputs' => [
[
'asset' => '<string>',
'amount' => '<string>',
'decimals' => 123,
'symbol' => '<string>',
'priceUsd' => 123
]
],
'outputs' => [
[
'asset' => '<string>',
'amount' => '<string>',
'minimumAmount' => '<string>',
'decimals' => 123,
'symbol' => '<string>',
'priceUsd' => 123,
'receiver' => '<string>'
]
]
],
'integrityChecksum' => '<string>',
'order' => [
'type' => '<string>',
'payload' => [
]
],
'eta' => 123,
'routingPath' => '<string>',
'platformFeeBps' => 123,
'lpSpreadBps' => 123,
'composite' => [
'legs' => [
[
]
],
'executionModel' => '<string>'
],
'gas' => [
'native' => '<string>',
'usd' => 123
],
'warnings' => [
]
],
'signature' => '<string>',
'signScheme' => 'EIP712',
'permit2Lock' => [
'signature' => '<string>',
'deadline' => 123
],
'eip3009Authorization' => [
'signature' => '<string>',
'validAfter' => 123,
'validBefore' => 123,
'nonce' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tetrafi.io/api/v1/router/orders"
payload := strings.NewReader("{\n \"quoteResponse\": {\n \"quoteId\": \"<string>\",\n \"solverId\": \"<string>\",\n \"validUntil\": 123,\n \"preview\": {\n \"inputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123\n }\n ],\n \"outputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"minimumAmount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123,\n \"receiver\": \"<string>\"\n }\n ]\n },\n \"integrityChecksum\": \"<string>\",\n \"order\": {\n \"type\": \"<string>\",\n \"payload\": {}\n },\n \"eta\": 123,\n \"routingPath\": \"<string>\",\n \"platformFeeBps\": 123,\n \"lpSpreadBps\": 123,\n \"composite\": {\n \"legs\": [\n {}\n ],\n \"executionModel\": \"<string>\"\n },\n \"gas\": {\n \"native\": \"<string>\",\n \"usd\": 123\n },\n \"warnings\": []\n },\n \"signature\": \"<string>\",\n \"signScheme\": \"EIP712\",\n \"permit2Lock\": {\n \"signature\": \"<string>\",\n \"deadline\": 123\n },\n \"eip3009Authorization\": {\n \"signature\": \"<string>\",\n \"validAfter\": 123,\n \"validBefore\": 123,\n \"nonce\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tetrafi.io/api/v1/router/orders")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"quoteResponse\": {\n \"quoteId\": \"<string>\",\n \"solverId\": \"<string>\",\n \"validUntil\": 123,\n \"preview\": {\n \"inputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123\n }\n ],\n \"outputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"minimumAmount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123,\n \"receiver\": \"<string>\"\n }\n ]\n },\n \"integrityChecksum\": \"<string>\",\n \"order\": {\n \"type\": \"<string>\",\n \"payload\": {}\n },\n \"eta\": 123,\n \"routingPath\": \"<string>\",\n \"platformFeeBps\": 123,\n \"lpSpreadBps\": 123,\n \"composite\": {\n \"legs\": [\n {}\n ],\n \"executionModel\": \"<string>\"\n },\n \"gas\": {\n \"native\": \"<string>\",\n \"usd\": 123\n },\n \"warnings\": []\n },\n \"signature\": \"<string>\",\n \"signScheme\": \"EIP712\",\n \"permit2Lock\": {\n \"signature\": \"<string>\",\n \"deadline\": 123\n },\n \"eip3009Authorization\": {\n \"signature\": \"<string>\",\n \"validAfter\": 123,\n \"validBefore\": 123,\n \"nonce\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tetrafi.io/api/v1/router/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"quoteResponse\": {\n \"quoteId\": \"<string>\",\n \"solverId\": \"<string>\",\n \"validUntil\": 123,\n \"preview\": {\n \"inputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123\n }\n ],\n \"outputs\": [\n {\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"minimumAmount\": \"<string>\",\n \"decimals\": 123,\n \"symbol\": \"<string>\",\n \"priceUsd\": 123,\n \"receiver\": \"<string>\"\n }\n ]\n },\n \"integrityChecksum\": \"<string>\",\n \"order\": {\n \"type\": \"<string>\",\n \"payload\": {}\n },\n \"eta\": 123,\n \"routingPath\": \"<string>\",\n \"platformFeeBps\": 123,\n \"lpSpreadBps\": 123,\n \"composite\": {\n \"legs\": [\n {}\n ],\n \"executionModel\": \"<string>\"\n },\n \"gas\": {\n \"native\": \"<string>\",\n \"usd\": 123\n },\n \"warnings\": []\n },\n \"signature\": \"<string>\",\n \"signScheme\": \"EIP712\",\n \"permit2Lock\": {\n \"signature\": \"<string>\",\n \"deadline\": 123\n },\n \"eip3009Authorization\": {\n \"signature\": \"<string>\",\n \"validAfter\": 123,\n \"validBefore\": 123,\n \"nonce\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"quoteId": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Service-account API key (tfk_test_/tfk_live_).
Headers
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
The candidate you picked, passed back exactly as it appeared in the quotes response. The integrityChecksum binds the submission to those terms; any mutation is rejected.
Show child attributes
Show child attributes
Hex-encoded EIP-712 signature over the escrow-v0 payload from quote.order (equivalently, the typedData on preflight's orderSignature action).
How the signature verifies: EIP712 for standard ECDSA from an EOA (the default), or EIP1271 for smart-contract wallets that validate via isValidSignature on-chain.
Permit2 funding lock: one reusable approval of the Permit2 contract, after which each order authorizes its own pull inside the signature.
Show child attributes
Show child attributes
EIP-3009 funding lock for USDC-style tokens: the transfer is authorized entirely inside the signed message, so no approval transaction ever exists.
Show child attributes
Show child attributes
Response
Successful Response
Order identifier - use it for GET /orders/{id} polling and the orders:{id} WebSocket topic.
State at creation time - normally pending.
pending, settled, failed Candidate this order was created from.
When the order was accepted.