HTTP API: Quotes
All quote endpoints require authentication.
POST /v1/quote/indicative
Get an indicative quote for UI display. The response does not include a signature.
Request body:
| Field | Type | Required | Notes |
|---|---|---|---|
src_chain_id |
uint64 | yes | Source chain ID |
dst_chain_id |
uint64 | yes | Destination chain ID |
token_in |
string | yes | ERC20 address or zero address for native |
token_out |
string | yes | ERC20 address or zero address for native |
amount_in |
string | yes | wei integer string |
Response data:
| Field | Type | Notes |
|---|---|---|
src_chain_id |
uint64 | Echo |
token_in |
string | Echo |
token_out |
string | Echo |
amount_in |
string | Echo |
amount_out |
string | Output amount in wei |
fee_rate |
uint64 | bps (1 bps = 1/10000) |
fee_amount |
string | Fee amount in wei |
Example:
curl -X POST "{rfq-api-base-url}/v1/quote/indicative" \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-d '{
"src_chain_id": 97,
"dst_chain_id": 97,
"token_in": "0x0000000000000000000000000000000000000000",
"token_out": "0x337610d27c682E347C9cD60BD4b3b107C9d34dDd",
"amount_in": "1000000000000000000"
}'
POST /v1/quote/firm
Get a firm quote. The response contains router_address and calldata that can be submitted on-chain.
Request body:
| Field | Type | Required | Notes |
|---|---|---|---|
src_chain_id |
uint64 | yes | Source chain ID |
dst_chain_id |
uint64 | yes | Destination chain ID |
from_address |
string | yes | Sender address (signature context) |
to_address |
string | yes | Recipient address (signature context) |
token_in |
string | yes | ERC20 address or zero address for native |
token_out |
string | yes | ERC20 address or zero address for native |
amount_in |
string | yes | wei integer string |
indicative_amount_out |
string | no | Optional, used for slippage check |
slippage |
double | yes | Percent in [0,100], e.g. 0.5 means 0.5% |
expiry_time_sec |
uint64 | yes | Quote TTL in seconds; recommended 60 |
Response data:
| Field | Type | Notes |
|---|---|---|
quote_id |
string | Quote identifier |
src_chain_id |
uint64 | Source chain ID |
calldata |
string | Router calldata (0x...) |
router_address |
string | Router contract address |
from_address |
string | Echo |
to_address |
string | Echo |
token_in |
string | Echo |
token_out |
string | Echo |
amount_in |
string | Total input (on-chain fee may apply) |
amount_out |
string | Expected output in wei |
fee_rate |
uint64 | bps |
fee_amount |
string | wei |
deadline |
uint64 | Unix timestamp (seconds) |
Example:
curl -X POST "{rfq-api-base-url}/v1/quote/firm" \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-d '{
"src_chain_id": 97,
"dst_chain_id": 97,
"from_address": "0x742d35Cc6634C0532925a3b8D1e4D1F4D6ee2D7e",
"to_address": "0x742d35Cc6634C0532925a3b8D1e4D1F4D6ee2D7e",
"token_in": "0x337610d27c682E347C9cD60BD4b3b107C9d34dDd",
"token_out": "0x0000000000000000000000000000000000000000",
"amount_in": "1000000000000000000",
"slippage": 0.5,
"expiry_time_sec": 60
}'
Notes
- Use
{rfq-api-base-url}from the deployer. If you see inconsistent hosts in examples (e.g. an unexpected suffix), treat them as placeholders.