Errors
This page is also Markdown, for agents: /dex-aggregator/reference/errors.md, and /llms.txt lists every page.
An invalid request returns 400 Bad Request, and a request over the rate limit 429 Too Many Requests. Both come with a plain text (text/plain) message, not JSON. Show the text to developers, not end users: it’s meant for debugging.
“No route found” is not an error: it’s 200 OK with an empty array.
/route/outcome has messages of its own.
Messages
Section titled “Messages”| Message | Cause |
|---|---|
Failed to deserialize query string: missing field `token_in` |
A required parameter is missing, probably DEX Aggregator’s fault |
Failed to deserialize query string: no variant of enum Amount found in flattened data |
Neither amount_in nor amount_out is given |
Failed to deserialize query string: ... |
A parameter has the wrong format, for example an invalid token ID or account ID |
Failed to deserialize query string: dexes: Empty dex id |
Empty ID in dexes, like dexes= or dexes=Rhea, |
Failed to deserialize query string: fees: Invalid referral fees: ... |
fees isn’t a JSON object of account IDs to numbers |
Failed to deserialize query string: fees: Referral fee of alice.near must be between 0 and 0.05 |
A fee is negative or over 5% |
Failed to deserialize query string: fees: Referral fee of alice.near must be a whole number of millionths |
A fee has more than 6 decimal places |
Failed to deserialize query string: fees: At most 4 accounts can be paid |
More than 4 accounts in fees |
Failed to deserialize query string: fees: Referral fees must add up to at most 0.05 |
The fees add up to more than 5% |
Amount must be greater than 0 |
amount_in or amount_out is 0 |
Token in and token out must be different |
token_in equals token_out |
Slippage must be between 0.00 and 1.00 |
Fixed slippage out of range |
Min slippage must be between 0.00 and 1.00 |
Auto min_slippage out of range |
Max slippage must be between 0.00 and 1.00 |
Auto max_slippage out of range |
Max slippage must be greater than min slippage |
max_slippage < min_slippage |
Invalid dex id: Foo |
Unknown ID in dexes. IDs are case-sensitive. IDs of removed DEXs are accepted and give no quotes |
Over the WebSocket, the same messages come as { "id": ..., "error": "..." }, except that parsing errors lose the Failed to deserialize query string: and <parameter>: prefixes: Failed to deserialize query string: dexes: Empty dex id comes as Empty dex id.
Rate limits
Section titled “Rate limits”Requests without an API key in key are rate limited per IP address (per /64 for IPv6). Over the limit, GET /route and GET /route/outcome return 429 Too Many Requests with a Retry-After header in seconds and the text Rate limit exceeded, retry in <n>s or use an API key.
On the WebSocket, the connection request counts, and so does every message with a query. Over the limit, the connection fails, or the message gets { "id": ..., "error": "Rate limit exceeded, retry in <n>s or use an API key" }.
A wrong key gets 401 Unauthorized with Invalid API key, and on the WebSocket the connection fails.