Skip to main content
Use this section when integrating over raw HTTP (any language). Prefer a solution hub when you already know the outcome (Swap, Yield, …). For TypeScript end-to-end flows (create intent → relay → settle), use the SDK functional modules.

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).
Not every decimal string is an integer, though — prices and supply figures carry a fractional part. Match the parser to the value: integer strings take 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:
Service-level validation errors are typically HTTP 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:
To confirm a base URL and prefix are right before debugging anything else:
A 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 weak ETag and honour If-None-Match, so a poller can skip re-downloading an unchanged payload:

Partner fees

Partner monetization uses a per-request partnerFee 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
Swaps / leverage share the swaps-api app OpenAPI when that service is enabled (/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.