curl -s https://relay-production-f175.up.railway.app/v1/executions \
-H 'content-type: application/json' -H 'Idempotency-Key: 3b1f…' \
-d '{ "quoteId": "5f1c…", "signature": "0x…" }'
curl -s https://relay-production-f175.up.railway.app/v1/executions \
-H 'content-type: application/json' \
-d '{ "quoteId": "5f1c…", "transaction": "AQAAAA…" }'
{ "quoteId": "5f1c…", "executionId": "c07d…", "status": "submitted", "txHash": "0x…" }
{ "quoteId": "5f1c…", "executionId": "c07d…", "status": "requote", "reason": "taker:insufficient_balance" }
Swaps
Submit an execution
Hand a signed quote to the keeper, which simulates, submits and pays gas.
POST
/
v1
/
executions
curl -s https://relay-production-f175.up.railway.app/v1/executions \
-H 'content-type: application/json' -H 'Idempotency-Key: 3b1f…' \
-d '{ "quoteId": "5f1c…", "signature": "0x…" }'
curl -s https://relay-production-f175.up.railway.app/v1/executions \
-H 'content-type: application/json' \
-d '{ "quoteId": "5f1c…", "transaction": "AQAAAA…" }'
{ "quoteId": "5f1c…", "executionId": "c07d…", "status": "submitted", "txHash": "0x…" }
{ "quoteId": "5f1c…", "executionId": "c07d…", "status": "requote", "reason": "taker:insufficient_balance" }
The keeper leader simulates the settlement first. If it passes, it broadcasts the transaction and the
response is
202 submitted. If it fails, nothing moved and the response is 200 requote.
string
Up to 128 characters. A repeat with the same key returns the first execution with
duplicate: true.- EVM
- Solana
string
required
hex
required
The taker’s signature over the quote’s
typedData.object
{ value, deadline, v, r, s }: an EIP-2612 permit for Permit2, when the sell token supports it and is not yet approved.Responses
| Status | Body |
|---|---|
202 | { quoteId, executionId, status: "submitted", txHash } |
200 | { quoteId, executionId, status: "requote", reason }: the simulation failed, nothing moved. Reasons starting with taker: are the taker’s to fix, such as taker:insufficient_balance or taker:blockhash_expired |
200 | { …, duplicate: true }: the idempotency key was seen before |
400 | invalid_request, bad_signature, bad_transaction (Solana), taker_not_ready with reason and detail, idempotency_key_too_long |
404 | quote_not_found |
409 | quote_not_open with the quote’s status, quote_expired, wrong_chain |
429 | rate_limited |
503 | broadcast_failed with reason: the network refused the transaction, nothing moved, sign again while the quote is open. not_leader: retry after 2 seconds |
curl -s https://relay-production-f175.up.railway.app/v1/executions \
-H 'content-type: application/json' -H 'Idempotency-Key: 3b1f…' \
-d '{ "quoteId": "5f1c…", "signature": "0x…" }'
curl -s https://relay-production-f175.up.railway.app/v1/executions \
-H 'content-type: application/json' \
-d '{ "quoteId": "5f1c…", "transaction": "AQAAAA…" }'
{ "quoteId": "5f1c…", "executionId": "c07d…", "status": "submitted", "txHash": "0x…" }
{ "quoteId": "5f1c…", "executionId": "c07d…", "status": "requote", "reason": "taker:insufficient_balance" }

