The hub does not publish a fixed list of chains and tokens. Each deployment declares its own corridors, and GET /catalog is the only source of truth for them. This page explains how to read what the catalog returns, and the formats every chain, asset and address takes on the wire.

Fetch, don’t hard-code

GET /v1/catalog is open to your project id as well as to your secret key, so a page’s pickers render before your user signs in to anything. It is built once at boot from configuration and changes only on restart, so cache it for the life of the page or the process. The external aggregator lanes are not listed: quoting is their discovery mechanism.

Chain domains

A chain is named by its chain domain, the string sourceChain, destChain and every on-chain route take (Conventions — value formats): The c8ntinuum networks map to these domains:
The Solana cluster’s domain is whatever the deployment’s catalog declares — read it from the chainDomain of the row whose family is solana rather than assuming a name. The samples in this reference use solana-localnet.

Reading a chain row

chains[] is sorted by domain. Each row: How to read it:
  • family decides the rail. It tells you how the user signs and which lanes can serve the chain (Families and lanes below).
  • nativeKey present means the native coin can be a source: quote it under that key (never key on userProxy). Absent means the native coin is a destination only.
  • wrappedKey is what the escrow holds on the native-coin lane, and what a refund returns — never the native coin itself (Refunds).
  • swapRouter present means an undeclared token is accepted as a source through the token-in lane; on any other chain an undeclared source is EIN0002.
  • inputSettlers[] are the escrows. Before sending a refund, verify the settler you were handed is one of them.

Reading an asset row

assets[] is sorted by chain then key. Each row:
  • sourceAsset and destAsset take either the asset key (weth) or the asset reference <chainDomain>:<address>. A bare 0x address is refused. A reference to a declared asset behaves exactly as its key.
  • native: true is the zero address. It receives fills and cannot fund an escrow directly: offer it as a destination, or as a source only where the chain row has a nativeKey.

Families and lanes

  • EVM. The Permit2 gasless escrow (oif-escrow-gasless: the user signs, the solver pays gas), the two proxy lanes (oif-wrap-native for the native coin, oif-swap-token for an undeclared token on a chain with a swapRouter: the user sends a transaction) and the external EIP-3009 gasless lane (aggregator-gasless).
  • Solana. The ed25519 escrow (oif-escrow-nonevm: the user signs, the solver pays gas). Solana serves as a source and as a destination. Everything Solana-specific: Solana support.
  • Sui and Aptos. Source chains are EVM and Solana. Sui and Aptos are supported as destination chains only: a quote whose source is a Sui or Aptos chain is refused. The catalog’s family tells you which rail a chain is on.
The full table, with the product ids and which route submits each lane: Step execution — the lanes.

Address formats

recipient is spelled in the destination chain’s family and sourceAccount in the source chain’s family. A non-EVM recipient or sourceAccount that does not decode is EIN0001 naming the field; an EVM address is not format-checked at that point.

Contract addresses

Permit2 at 0x000000000022D473030F116dDEE9F6B43aC78BA3 is the only fixed address: it is the verifyingContract of every EVM gasless signPayload. Every other contract — userProxy, swapRouter and the inputSettlers — is per chain and per deployment: read them from the catalog rather than copying them from a sample. The catalog sample on the route page is illustrative.

See also