Skip to main content
Olympex supports single-chain swaps on eight EVM chains, and cross-chain transfers that start on six of them. 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.
The response lists the eight chains in the matrix:
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:
The second response is for chain 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 that GET /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}:
The ?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. chainId is required and must be a positive integer. Any other query parameter returns 400 VALIDATION_ERROR "Invalid query parameters", and a chain that isn’t enabled returns 400 "Chain N is not enabled".
  • Response. data.chainId (a number) and data.tokens[]. Each token has address, symbol, name, decimals, icon and sometimes logoURI. icon is 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 of 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE.
  • 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’s symbol() in case or spacing. Where you need a token’s real symbol, as limit orders do, read symbol() 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:
The API accepts it in either casing, and 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.
Scam tokens often copy the name and symbol of well-known tokens. Identify tokens by address, check each address you offer on the chain’s block explorer, and never let users paste an address without showing which token it is.

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.
Keep amounts as strings end to end, and use integer or decimal arithmetic for base units: 18-decimal amounts exceed what a JavaScript number represents exactly. DCA strategies are the exception: they take totalAmount as a JSON number.

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 /chains and each chain’s tokens from GET /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.

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.