Swap API
Quote, build intents, submit-tx, status. Product overview: Swap hub.
Leverage yield API
Vault deposit / withdraw. Product overview: Yield hub.
Oracle
USD OHLC candles for charts, plus live solver mark prices.
Protocol stats
Networks, partners, assets, filled-intent volume, and SODA supply.
Exploring these routes with an AI agent? The Builders MCP
(
https://builders.sodax.com/mcp) wraps the read surfaces below as tools, so the agent works from
today’s chains, tokens, quotes and rates instead of its training data.Base URLs
Always use these public hosts. Do not hard-code private infrastructure hostnames.
Route map
Shared conventions
BigInt as decimal strings
Any amount, chain id field, or token quantity larger than a safe JSON integer is serialized as a decimal string on the wire (e.g."1000000", never a bare JS number for wei-scale values).
BigInt, fractional strings need a decimal library. See SODA supply for the trap this creates.
Timestamps
There is no single representation — read the unit off the endpoint you are calling.Porting from the SDK?
backendApi.getUserIntents() takes startDate / endDate as
milliseconds and converts them to ISO 8601 before sending. That conversion is a client-side
convenience, not the wire format — calling the endpoint directly with a millisecond value will not
work.Errors at the edge
Unknown routes return:400 with a descriptive message body. Rate-limited writes return 429.
Two 404 shapes exist, and telling them apart saves debugging time. The payload above is the
gateway shape: the path matched no published route, so the request never reached a service — this
almost always means a wrong or missing prefix. A service 404 carries a message instead, meaning
the prefix was right and the service itself rejected the path:
route_not_found from that path means the prefix is wrong, not that the API is down.
Caching
Read endpoints are often cached server-side (seconds to a minute). Polling faster than the cache TTL does not yield fresher data. Exact TTLs are noted per page where known. Read endpoints also send a weakETag and honour If-None-Match, so a poller can skip
re-downloading an unchanged payload:
Partner fees
Partner monetization uses a per-requestpartnerFee object on quote/create-intent style endpoints — there is no global default fee. See Swaps and the Monetize SDK guide for claiming.
Choose a path
OpenAPI
Machine-readable OpenAPI for the backend API is available at:https://api.sodax.com/v1/be/docs(interactive)https://api.sodax.com/v1/be/docs-json
/docs on the service origin; edge pathing is under /v1/swaps and /v1/leverage-yield).
The Stateful API — the partner-portal surface behind API keys — publishes
its own spec at https://api.sodax.com/v1/bes/docs (interactive) and /v1/bes/docs-json. Read it as a
service reference, not a callable base path: the edge publishes only docs, docs-json and healthz
under /v1/bes, so the portal and user routes the spec lists answer a gateway route_not_found there.