Swap tokens safely at the best route through Chord (getchord.xyz), a DEX aggregator, on Ethereum, Base, Arbitrum, BNB Chain, Avalanche, Monad, Robinhood Chain (tokenized stocks such as NVDA, TSLA)...
Chord routes a swap across every DEX on a chain (splitting it when that pays) and settles it in one
transaction through its router, the same address on every EVM chain:
0x1b1fee89a381e595fe6536b99ba91f3e16e9601a. This skill takes a user from "swap X for Y" to a
transaction their own wallet signs, with a safety check and a simulation on the way.
All requests go to https://api.getchord.xyz/v1, need no key, and are limited to about 60 a minute
per IP. Amounts are integer strings in the token's smallest unit (10 USDC = 10000000). The zero
address 0x0000000000000000000000000000000000000000 is the chain's native coin.
avoid; say why for caution or
unknown, and let the user decide.simulation.ok is false, provider is null, or
warnings contains INSUFFICIENT_BALANCE (tell the user how much they are short).valueLossPct of 2 % or more: say it in the summary. 5 %
or more: recommend a smaller amount.| Chain | chain |
Native coin | Explorer |
|---|---|---|---|
| Ethereum | 1 / ethereum |
ETH | etherscan.io |
| Base | 8453 / base |
ETH | basescan.org |
| Arbitrum One | 42161 / arbitrum |
ETH | arbiscan.io |
| BNB Chain | 56 / bnb |
BNB | bscscan.com |
| Avalanche C-Chain | 43114 / avalanche |
AVAX | snowtrace.io |
| Monad | 143 / monad |
MON | monadscan.com |
| Robinhood Chain | 4663 / robinhood |
ETH | robinhoodchain.blockscout.com |
| Arc | 5042 / arc |
USDC (gas) | explorer.arc.io |
| Solana | solana |
SOL | solscan.io |
Solana uses its own endpoints: see references/solana.md. Everything below is for the EVM chains.
GET /v1/tokens/search?chain=<chainId>&q=<symbol, name or address>
Prefer rows with verified: true and compare full addresses: copied tickers are common. When a
symbol has several candidates, list them with full addresses and ask. On Monad, the main token list
is GET /v1/tokens (the search there only covers tokens off that list). Keep each token's decimals.
GET /v1/security/token/<chain>/<address>
Read verdict: avoid (cannot be sold, sell tax of 30 % or more, a scam signal, a copied ticker)
means refuse; caution and unknown mean list the failing checks[].detail lines and let the user
choose; ok is not a guarantee. A cold report can take up to 20 seconds. Skip this step for the
chain's native coin and its main stablecoins.
GET /v1/meta/quote?chain=<key>&tokenIn=<address>&tokenOut=<address>&amount=<smallest units>&slippageBps=50
Read provider first: chord = Chord's own router; another name (kyberswap, lifi, ...) means
Chord had no executable route and fallbackReason says why; null = no route at all.
Show in human units: amount in, expected out (amountOut, after every fee), minimum out
(minAmountOut), price impact (priceImpactPct), value loss (valueLossPct), Chord's fee
(feeBps), venues (route.venues), who routes it (provider) and the token check. Then stop and
wait for the user's answer.
The same request with &taker=<the user's wallet address>. The answer now carries:
tx (to, data, value, gas, chainId): the unsigned swap. to must be the router above
when provider is chord.approval (or null): approve(spender, amount) needed first. resetFirst: true = send
approve(spender, 0) before it (USDT on Ethereum).simulation.ok: the transaction run from this wallet delivered at least minAmountOut.If minAmountOut is now lower than in the summary, show both numbers and ask again.
The user's wallet signs and sends the approval (when present), waits for it to land, then signs and
sends tx unchanged. Check the result with eth_getTransactionReceipt (status 0x1 = success)
on any RPC of the chain (free and keyless for Ethereum, Base, Arbitrum, BNB Chain, Avalanche and
Monad: https://moltnode.ag/<chain key>), and give the explorer link https://<explorer>/tx/<hash>.
references/errors.md lists every fallbackReason, warning and HTTP error with what to tell the
user. Most common: 429 = wait a minute; 422 INPUT_NOT_SIMULATABLE = the wallet must hold the input
first; 503 = try again later (never read it as "no route").
references/solana.md: the Solana quote, sign and send flow.references/errors.md: errors and warnings, and what to say.references/examples.md: two full conversations (EVM and Solana).