Skip to main content
Name an ERC-20 contract or an SPL mint as sourceAsset or destinationAsset and Orchestra routes it, whether or not the token appears in /routes. The token is swapped against a listed stablecoin on its own chain; everything between the two stablecoins is an ordinary route.

Routing

A hub is a listed USD stablecoin on the token’s chain, such as solana:USDC or base:USDC. Orchestra measures value only in hubs. Order bounds and fees are measured in the hub, and no fee is ever taken in the token, so feeAsset is always a stablecoin. A token never crosses chains, and two tokens on one chain still pass through a hub. Swaps price against Jupiter on Solana and a race of DEX venues on EVM chains.

Supported chains

GET /v2/orchestration/routes returns tokenSupport, one entry per chain where your key can name tokens by address:
  • source, destination: any accepts any token address at that end; listed accepts only assets in assets.
  • via: the hubs on that chain. A destination token is reachable from asset A when A is a hub or A’s route.to contains one. A source token reaches asset B when B is a hub or a hub’s route.to contains B.
Solana accepts any token at both ends. EVM chains accept any source token; tokens by address are not yet available as EVM destinations. Availability is set per partner, so read it with the key you quote with. To check one token, resolve its address:
destination and source say which ends your key may use the token at. An address the registry lists resolves to that listed asset instead. Name, symbol, and decimals are read from the token contract or mint. The issuer chooses the name and symbol, so show the address beside them.

Quote

Send the address in place of the symbol. EVM addresses can be lowercase or checksummed; Solana mints are case-sensitive. 10 USDC on Solana into BONK:
Replace SERVER_KEY with your fn_... key. Use a new X-Idempotency-Key for each operation and reuse it when retrying that same request. Amounts are integer strings in the asset’s smallest unit: "100000" is 0.001 BTC; "50000000" is 50 USDC on Base. Read each asset’s decimals from /routes.
Compared with a listed pair:
  • Only exact-in with variable delivery. exact_out and deliveryMode: "fixed" return unsupported_amount_mode.
  • A source token requires refundAddress on the source chain.
  • A destination token adds minAmountOut, the least of the token the recipient receives, and fallback, what the recipient receives instead if the swap cannot reach it.
  • source and destination describe each end. Read the token’s decimals there.
Trimmed response fields:
Fund and follow it like any other quote.

Outcomes

Each end has two outcomes, both fixed by the quote.
  • Source token: sold at or above the quote’s floor. If the sale cannot happen, the deposit is returned in full, in the same token, to refundAddress, and the order ends refunded.
  • Destination token: at least minAmountOut reaches the recipient, or at least fallback.minAmount of the hub does on the destination chain. A fallback order ends fallback_delivered with fallbackAsset, fallbackAmount, and fallbackTxHash, and amountOut is null. Its webhook is order.completed with data.status set to fallback_delivered.
A refund or fallback is sent only after the swap it replaces can no longer land, so an order never pays out twice. When Orchestra cannot prove that, the order waits for an operator and reports processing. On Solana the swap delivers straight to the recipient, and the same transaction enforces minAmountOut.

Refused tokens

Orchestra reads the token from its chain before quoting and refuses:
  • tokens with more than 18 decimals;
  • Solana Token-2022 mints with a transfer fee, transfer hook, pausable, default account state, interest-bearing, scaled UI amount, non-transferable, or confidential-transfer extension, or any extension it does not recognize;
  • as a source, Solana mints with a freeze authority or permanent delegate, since the issuer could freeze or move the deposit while Orchestra holds it;
  • tokens on the Flashnet denylist.
These return token_unsupported or token_blocked. A token with no route to or from a hub returns insufficient_liquidity, and order value above the cap, measured in the hub, returns amount_too_large. See Errors. An EVM source deposit is credited from the deposit address’s balance change, not from the token’s transfer events. A token that takes a fee on transfer or rebases cannot prove its deposit, so the order is held for an operator instead of sold.