Skip to main content
GET
/
2
/
bridge
/
routes
List supported bridge routes
curl --request GET \
  --url https://demo-api.mobula.io/api/2/bridge/routes
{
  "data": {
    "routes": [
      {
        "originChainId": "<string>",
        "destinationChainId": "<string>",
        "estimatedTimeMs": 123,
        "maxTradeUsd": 123,
        "feeBps": 123,
        "supportedTokens": "<string>"
      }
    ]
  }
}
Alpha Preview — Endpoints, response shape, and supported routes may change without notice.
GET /api/2/bridge/routes returns the static all-to-all matrix of supported routes. Useful for building a chain selector or validating a pair before calling /quote. No query parameters.

Supported chains

Chain IDChainEstimated fill latency
evm:8453Base~500 ms
evm:56BSC~3000 ms
evm:42161Arbitrum~1000 ms
evm:137Polygon~2000 ms
solana:solanaSolana~500 ms
hl:mainnetHyperLiquid L1~1000 ms
The route list is all-to-all across these 6 chains excluding same-chain pairs — 30 entries. Same-chain “bridges” are not in this list; calling /quote with originChainId === destinationChainId short-circuits to the Swap API instead.

Response

{
  "data": {
    "routes": [
      {
        "originChainId": "evm:8453",
        "destinationChainId": "solana:solana",
        "estimatedTimeMs": 1000,
        "maxTradeUsd": 10000,
        "feeBps": 0,
        "supportedTokens": "any"
      }
    ]
  }
}
Per-route fields:
  • estimatedTimeMs — sum of origin and destination chain listener latencies from the table above (e.g. Base → Solana = 500 + 500 = 1000).
  • maxTradeUsd — hard cap per intent. Currently 10000 on every route. Amounts above this in /quote return "Amount $X exceeds maximum trade of $10000".
  • feeBps — reported as 0 here; this is the public route metadata. The actual solver fee is folded into /quote’s estimatedAmountOut and surfaced as fees.bridgeFeeBps. Always read fees from /quote, not this endpoint.
  • supportedTokens"any" on every route. The token-level support matrix lives in /quote (it picks the right code path — native bridge, direct-bridge token, swap-and-bridge, or SPL transfer — based on the token you pass).

Example

const res = await fetch(
  "https://api.mobula.io/api/2/bridge/routes?apiKey=YOUR_API_KEY",
);
const { data } = await res.json();

const supportedSet = new Set(
  data.routes.map((r: any) => `${r.originChainId}->${r.destinationChainId}`),
);

// Validate a pair before quoting
if (!supportedSet.has(`${origin}->${dest}`)) {
  throw new Error(`Route ${origin} -> ${dest} not supported`);
}

Response

200 - application/json

List of supported routes.

data
object
required