---
title: "Find optimal cross-chain transfer route"
method: GET
path: "/router/optimal-route"
tags: ["Router"]
---

# Find optimal cross-chain transfer route

`GET /router/optimal-route`

Analyzes available bridges and returns the optimal route with best pricing

## Query parameters

- `tokenIn` string, required
- `tokenOut` string, required
- `sourceChain` 'ARBITRUM_MAINNET' | 'ARBITRUM_TESTNET' | 'AVALANCHE_MAINNET' | 'AVALANCHE_TESTNET' | 'BASE_MAINNET' | 'BASE_TESTNET' | 'STARKNET_MAINNET' | 'STARKNET_TESTNET' | 'BSC_MAINNET' | 'ETHEREUM_MAINNET' | 'ETHEREUM_TESTNET' | 'OPTIMISM_MAINNET' | 'OPTIMISM_TESTNET' | 'MONAD_MAINNET' | 'MONAD_TESTNET' | 'POLYGON_MAINNET' | 'HYPEREVM_MAINNET' | 'LISK_MAINNET' | 'SOLANA_MAINNET' | 'SOLANA_TESTNET' | 'TRON_MAINNET', required
- `destinationChain` 'ARBITRUM_MAINNET' | 'ARBITRUM_TESTNET' | 'AVALANCHE_MAINNET' | 'AVALANCHE_TESTNET' | 'BASE_MAINNET' | 'BASE_TESTNET' | 'STARKNET_MAINNET' | 'STARKNET_TESTNET' | 'BSC_MAINNET' | 'ETHEREUM_MAINNET' | 'ETHEREUM_TESTNET' | 'OPTIMISM_MAINNET' | 'OPTIMISM_TESTNET' | 'MONAD_MAINNET' | 'MONAD_TESTNET' | 'POLYGON_MAINNET' | 'HYPEREVM_MAINNET' | 'LISK_MAINNET' | 'SOLANA_MAINNET' | 'SOLANA_TESTNET' | 'TRON_MAINNET', required
- `amount` string, required
- `recipient` string
- `amountSymbol` string, required

## Response `200`

Optimal route found successfully

- object
  - `sourceChain` string
  - `destinationChain` string
  - `tokenIn` string
  - `tokenOut` string
  - `originalAmount` string — Original transfer amount
  - `totalFees` string — Total fees (bridge fee + ChainRails fee)
  - `bridgeToUse` 'ACROSS' | 'CCTP' | 'GATEWAY' | 'RHINOFI', nullable
  - `bridgeAddress` string
  - `bridgeExtraData` string
  - `supportedBridges` string[]
  - `bridgeFeeDetails` object — Bridge-specific fee details (structure varies by bridge)

## Other responses

- `400` — Bad Request - No bridges support the route
- `401` — Unauthorized - Invalid or missing API key
- `500` — Internal Server Error

## Changes

- **2026-07-22** `76a4e00b118d` — 6 info
  - added the new enum value `SOLANA_MAINNET` to the `query` request parameter `destinationChain`
  - added the new enum value `SOLANA_MAINNET` to the `query` request parameter `sourceChain`
  - added the new enum value `SOLANA_TESTNET` to the `query` request parameter `destinationChain`
  - added the new enum value `SOLANA_TESTNET` to the `query` request parameter `sourceChain`
  - …2 more
- **2026-02-17** `2168c5f4fdd5` — 1 breaking, 14 info
  - added the new required `query` request parameter `amountSymbol`
  - added the new enum value `HYPEREVM_MAINNET` to the `query` request parameter `destinationChain`
  - added the new enum value `HYPEREVM_MAINNET` to the `query` request parameter `sourceChain`
  - added the new enum value `LISK_MAINNET` to the `query` request parameter `destinationChain`
  - …11 more
- **2025-12-13** `0172b83f90c7` — 4 info
  - added the media type `application/json` for the response with the status `200`
  - added the non-success response with the status `400`
  - added the non-success response with the status `401`
  - added the non-success response with the status `500`
- **2025-11-11** `fce39ccb3e9d` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/horuslabsio/apis/chainrails-api/changes/router/optimal-route/get.md)

---

[API](https://skmtc.dev/horuslabsio/apis/chainrails-api.md) · [All operations](https://skmtc.dev/horuslabsio/apis/chainrails-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/horuslabsio/chainrails-api/revisions/dcf19c1bab20/schema)
