- expiry is the user-side quote expiry, not the solver-side expiry. If a user requests a 30-second intent, only quotes expiring after 30 seconds are returned.
- fromDecimals and toDecimals are not validated by the order server; it only uses them to translate the quote between assets as a real exchange rate.
- ranges lists the price tiers you will fill at, one tier per band of input amounts. Your prices should include gas costs.
- quote is written like a normal price — do not scale for decimals; the order server applies
fromDecimals/toDecimalsfor you. - integratorKeyHash, if set, makes the quote visible only to requests carrying the matching
X-Integrator-Key; if omitted, the quote serves only keyless (open-market) requests.
You can overwrite old quotes by sending new quotesTo avoid solvers sending short-lived quotes, the order server overwrites existing quotes whenever it receives a new one. This allows you to have long-lived quotes and only update them as markets evolve. If you send a quote with an expiry in the past, it will still overwrite old quotes and immediately expire.
- Publish the liquidity they have across many chain and token pairs.
- Set their own pricing and fee structure.
- Set the transaction sizes they will take.
- Update their quotes as market conditions change.
/quotes/submit.
Solana Routes
Quotes for Solana routes use the same schema. Three details differ:fromChain/toChaintake bare network-id strings ("1151111081099710"for Solana mainnet,"1151111081099712"for devnet) — not the CAIP-2solana:prefixed ids used by the registration and supported-contracts endpoints.- Assets are chain-native: base58 mint addresses on Solana, hex on EVM.
exclusiveForis the solver identity that can claim the inputs, so it uses the input chain’s address format. For Solana → EVM, submit the solver’s base58 Solana public key; the order encodes its raw 32 bytes into the EVM output context.
Supported Contracts
Supported Contracts is experimental. Standard quote requests do not require these declarations. If you are working with us on integrator contract allowlists, custom settlers, or oracles, we will tell you which entries to provide.
PUT replaces the full set, so include every contract you support on each update.
For Solana, declare the programs you support with CAIP-2 solana:<id> chains and base58 program IDs in the same three roles (oracle, inputSettler, outputSettler).
Registering Accounts
Register every account you fill from — EVM and Solana — so the order server can link your on-chain activity to your solver identity for reputation tracking. Registration proves you own the account by signing a server-issued message:1
Fetch a one-time message
GET /api/v1/solver/register/message returns Register account for solver <solverId>. Nonce: <uuid>. — valid for 24 hours, single-use.2
Sign it with the account's key
EVM accounts sign it as a standard Ethereum personal message — EIP-191, what wallet
signMessage produces — hex-encoded, or an EIP-1271 signature for smart-contract wallets. Solana accounts sign the raw message bytes with ed25519 and base58-encode the signature.3
Submit the registration
POST /api/v1/solver/register with the account, CAIP-2 chain, message, and signature.403 if already taken); POST /api/v1/solver/unregister removes it. The message is consumed on the first POST attempt regardless of outcome — if registration fails, fetch a fresh message before retrying.
Keep secret keys and API keys in environment variables or a secret store — never in client-side code or version control.
Authentication
Solver API endpoints require an API key passed via thex-api-key header. Your API key ties your quotes to your solver, so the order server can track whether you fill the orders you win. See Reputation.
See Authentication for registration and key management details.
