GET /chains is the source of truth for which chains are enabled, and GET /tokens lists the tokens Olympex lists on each one. Limit orders and DCA run on a subset of the chains. This page also covers the conventions every request shares: chain ID types, token addresses and amounts.
Chain support matrix
A cross-chain transfer starts on a chain marked Yes in the cross-chain source column and ends on another chain in the table. Whether a specific pair has a route depends on the providers when you ask, so request a quote to confirm it.
Limit orders and DCA execute only on the chains marked Yes in the last column, through the Olympex order contract on each one. Order signatures and allowances lists the contract address on each chain.
GET /chains returns chain IDs only, without names, logos or capabilities. If your product needs them, keep this table’s names and columns in your code, and use GET /chains to decide which of these chains to offer: offer a chain only while its ID is in the response. POST /support-chain checks one chain ID against the same list.
The API doesn’t return chain names or the capabilities in this matrix, so keep them in your code. Read which chains are enabled from GET /chains at runtime, and offer a chain only while it appears there.
Enabled chains at runtime
GET /chains is a signed endpoint with no request body. It takes no parameters and ignores any query parameters you send. It returns data.chainIds: the IDs of the enabled chains, as integers, in ascending order. Use it to decide which chains to offer before you request tokens, quotes or orders.
Response
POST /support-chain checks one chain against the same list. It takes a chain ID as an integer and returns data: true when the chain is enabled:
324. A string such as "137" returns 400 VALIDATION_ERROR, not false. Whether a specific pair has a route on an enabled chain is answered by a quote.
Limit orders and DCA
Limit orders and DCA strategies execute only on chains where the Olympex order contract exists: Ethereum, Optimism, BNB Chain, Polygon, Base, Arbitrum One, Avalanche C-Chain and Linea. Order signatures and allowances lists the contract on each chain, which is the spender the maker approves. Create orders and strategies only on chains that are in that table and thatGET /chains returns.
Chain IDs are integers
Every endpoint takes and returns chain IDs as JSON integers:
In a request body, the wrong type fails validation with
400, and so does a non-numeric chainId query parameter on GET /tokens or GET /transactions/{hash}:
?chainId= filter of GET /limit-order is the exception: it isn’t validated, and a chainId that isn’t a number returns an empty array, not an error.
Token lists
GET /tokens?chainId=<n> returns the tokens Olympex lists on one chain:
- Query.
chainIdis required and must be a positive integer. Any other query parameter returns400 VALIDATION_ERROR"Invalid query parameters", and a chain that isn’t enabled returns400"Chain N is not enabled". - Response.
data.chainId(a number) anddata.tokens[]. Each token hasaddress,symbol,name,decimals,iconand sometimeslogoURI.iconis a logo URL, usually on the Olympex CDN, or an empty string when there is no logo; some URLs point to third-party hosts that may not serve the image, so show a fallback when a logo fails to load. Other fields can appear; ignore the ones you don’t use. - Addresses. Casing varies between entries, so compare addresses case-insensitively. The native token appears as
0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee, in lowercase: the lowercase form of0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE. - Size. The list is large (hundreds of tokens per chain), unsorted and unpaginated, and it changes rarely. It carries no cache headers: cache it on your side, for example for 24 hours.
- Identity. Symbols aren’t unique. Match tokens by address, never by symbol. When several listed tokens share a symbol, some carry a numeric suffix, such as
STRK_1, and the number can change when the list is refreshed. A few symbols also differ from the contract’ssymbol()in case or spacing. Where you need a token’s real symbol, as limit orders do, readsymbol()from the contract, or trim the listed symbol and drop a trailing_<number>. - Empty lists. An enabled chain can return an empty list.
Token addresses
Token fields accept any valid EVM address:0x and 40 hexadecimal digits, in lowercase or in EIP-55 checksum form. An invalid address, including a mixed-case address whose checksum is wrong, fails validation with 400 VALIDATION_ERROR and "Must be a valid EVM address". The checksum check catches most typos.
Each chain’s native token (ETH on Ethereum, POL on Polygon, BNB on BNB Chain, AVAX on Avalanche, and so on) uses one pseudo-address on every chain:
GET /tokens lists it in lowercase, 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee, so compare it case-insensitively. Use it as inTokenAddress or outTokenAddress in a quote or a swap, single-chain or cross-chain. With native-token input, /swap returns the amount to send in value, in wei, and no approval is needed. The uniswapV3Hermes source doesn’t support native-token input.
Limit orders and DCA strategies can’t sell the native token: sell the wrapped token instead. These are the wrapped tokens on three chains, all listed in GET /tokens:
For other chains, check the wrapped token’s address on the chain’s block explorer.
GET /tokens doesn’t limit what you can trade. Quotes, swaps, limit orders and DCA strategies accept any valid token address, listed or not, although a limit order still needs a reference price. Request a quote to find out whether a token has a route. The guides stop on unlisted tokens only to keep their examples short. The list has no ranking or verification flag, so GET /tokens tells you which tokens Olympex lists, and you still decide which tokens your product offers.
Amounts and decimals
Olympex resolves token decimals server-side. Inputs are human-readable and outputs are base units:
To display an output amount, divide it by 10 to the power of the output token’s decimals. Single-chain responses don’t include decimals, so read them from
GET /tokens or the token contract’s decimals(). Cross-chain quotes include decimals only for the swap legs listed in middlewareRoute, which may not include the token you receive. Read the destination token’s decimals from GET /tokens for the destination chain, or from its contract there: the same symbol can use different decimals on different chains.
Requesting a chain
To ask for a chain that isn’t in the matrix, contact partners@olympex.io.What this means for your integration
- Read the enabled chains from
GET /chainsand each chain’s tokens fromGET /tokens, cache the token lists, and match tokens by address. - Send chain IDs as integers to every endpoint.
- Create limit orders and DCA strategies only on chains that have an order contract.
- Send human-readable amounts, and convert outputs from base units with the token’s decimals.
Related
List enabled chains
The
GET /chains reference.List tokens
The
GET /tokens reference.Order signatures and allowances
The order contract on each chain.
Cross-chain mechanics
How transfers between these chains work.
