Skip to content

Chains, addresses and amounts

Arc is Circle’s stablecoin-native chain: the gas token is USDC. It has two faces, and the API takes one of them.

Face Address Decimals Where you see it
Native USDC — (balance via eth_getBalance) 18 wallet balances, value on transactions, Uniswap V4 currency0 = address(0) pools
USDC predeploy 0x3600000000000000000000000000000000000000 6 the ERC-20 interface of the same balance; every V2 / V3 pool; the API

They are one balance: balanceOf(predeploy) == nativeBalance / 1e12. There is no wrapped-native contract and nothing to wrap. The API therefore treats the zero address as an alias for the predeploy on Arc: send either, get the same route, and the transaction always has value: "0" because the router pulls the predeploy by transferFrom. Approve the router on the predeploy like any ERC-20.

Other anchors: EURC 0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1 (6 decimals, tagged fx) and VIRTUAL 0x8c4252c87081c88c6ad57d6dd97e1cafebf842b7 (the quote asset of the Virtuals launcher pools, priced from its own USDC prints). Protocol fee on USDC and EURC is 0 bps.

An ordinary EVM chain: native ETH is the zero address, WETH 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 wraps it, and the stable anchor is USDG 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 (6 decimals). Tokenized stocks are 18-decimal tokens tagged stock (NVDA 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC, AAPL 0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9, …). WETH, USDG and every stock are 0 bps.

Monad, Avalanche, Base, BNB Chain, Arbitrum and Ethereum (143, 43114, 8453, 56, 42161, 1)

Section titled “Monad, Avalanche, Base, BNB Chain, Arbitrum and Ethereum (143, 43114, 8453, 56, 42161, 1)”

Ordinary EVM chains: the zero address is the native coin (MON, AVAX, ETH or BNB), sent as value; WMON, WAVAX, WETH and WBNB wrap it, and the router wraps and unwraps for you. The dollar anchors are USDC (and USDT where the chain has it), 6 decimals on Monad, Avalanche, Base, Arbitrum and Ethereum, 18 decimals on BNB Chain. Ethereum’s USDT refuses a new approval while an old one is left: approve 0 first (approval.resetFirst on /v1/meta). Anchors and contracts per chain: Networks.

Every amount the API takes or returns for a token is a decimal string in the token’s smallest unit. Never a float, never scientific notation.

5 USDC on Arc → "5000000" (6 decimals)
0.01 ETH on 4663 → "10000000000000000" (18 decimals)
0.005 cirBTC → "500000" (8 decimals)

Read decimals from the token list or the token row. Chord never defaults to 18, and neither should you.

const { tokens } = await fetch("https://api.getchord.xyz/v1/tokens?chain=5042").then((r) => r.json());
const usdc = tokens.find((t) => t.symbol === "USDC");
const amount = (5n * 10n ** BigInt(usdc.decimals)).toString(); // "5000000"

USD figures in read endpoints (volume24h, priceUsd, usd) are plain numbers.

Hex, case-insensitive on input; the API returns Arc addresses lower-cased and Robinhood Chain list addresses checksummed. Compare lower-cased. Pool identities are 20-byte addresses for V2 / V3 pools and 32-byte pool ids for Uniswap V4 — any pool parameter accepts both, and any pool field may hold either. Treat a pool as an opaque string; only an explorer link needs to know which it is.

Endpoint family chain
/quote, /swap, /swap/calldata, /swap/simulate 5042, 4663, 143, 43114, 8453, 56, 42161 or 1. The default is 143: always pass it.
/tokens 5042 or 4663; omitted, the Monad list.
/tokens/market 4663 or 5042. Omitted, it answers for Monad.
/tokens/board 143.
/tokens/search 4663, 5042, 43114, 8453, 56, 42161 or 1. Omitted (or 143), it is Monad off-list discovery. Arc also has /arc/tokens/search with full board rows.
/candles 5042, 4663, 143, 43114, 8453, 56, 42161 or 1. The default is 143: always pass it.
/chains/{chain}/* in the path: avalanche or 43114, base or 8453, bnb or 56, arbitrum or 42161, ethereum or 1 (and solana).
/tokens/chart, /tokens/trades, /tokens/stats, /logo none (address-keyed) — /logo takes the chain in the path.
/smart-money/top, /portfolio/*, /lp/* 5042, 4663 or 143.
/arc/* none; always 5042.
/rh/* none; always 4663.
/points/*, /ask/* none; always 5042.