Search tokens on a chain
const url = 'https://api.getchord.xyz/v1/tokens/search?q=example&chain=4663&limit=8';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.getchord.xyz/v1/tokens/search?q=example&chain=4663&limit=8'Symbol, name or address. What it searches depends on chain:
4663Robinhood Chain: the curated list (verified: true, stocks taggedstock) plus tokens that traded in the last 24 hours and are not on it (verified: false, no logo).5042Arc: every token traded in the last 24 hours, the same index as/arc/tokens/search.verifiedis true for tokens on the curated Arc list.43114/8453/56/42161/1: that chain’s token list, allverified: true. A chain that is not public yet answers404 CHAIN_NOT_PUBLICunless the request carries anX-API-Key.- no
chain, or143: Monad off-list discovery. Tokens found through DexScreener that are not on the curated Monad list, with a logo and on-chain decimals, allverified: false. This mode answers{ tokens }only, returns up to 8 rows whateverlimitsays, and returns an empty list for a query under 2 characters.
Ranking: the exact address, then the exact symbol, a symbol prefix, a name prefix, then any substring; verified rows first within a rank, one row per address. A leading $ is ignored. Treat verified: false as unvetted and check the address before trading it.
Arc: /arc/tokens/search returns full board rows (price, volume, pools, flags) for the same query.
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters”Symbol, name or address fragment.
Chain id: 4663 Robinhood Chain · 5042 Arc · 43114 Avalanche C-Chain · 8453 Base · 56 BNB Chain · 42161 Arbitrum One · 1 Ethereum · 143 Monad. Omitted = 143. Pass the chain you want: the default is Monad off-list discovery.
Rows to return, clamped to 1–25. Ignored in Monad mode.
Responses
Section titled “ Responses ”Matches, best first. An empty tokens is a real answer.
object
The chain searched. Absent in Monad mode.
The query as received. Absent in Monad mode.
object
EVM address, hex, case-insensitive.
ERC-20 decimals. Null for an off-list token whose decimals are not resolved yet.
Logo URL when known. Absent on off-list Robinhood Chain rows.
On the chain’s curated list. False = found by the index or by discovery, not vetted.
stock, stablecoin, … from the curated list (Robinhood Chain); meme in Monad mode. Absent when empty.
Monad mode only: liquidity of the deepest DexScreener pair.
Example
{ "chain": 4663, "q": "NVDA", "tokens": [ { "address": "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC", "symbol": "NVDA", "name": "NVIDIA • Robinhood Token", "decimals": 18, "logoURI": "https://cdn.robinhood.com/ncw_assets/logos/0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec.png", "verified": true, "tags": [ "stock" ] } ]}BAD_CHAIN (a chain this route does not search) or BAD_QUERY (q empty or longer than 64 characters). Monad mode does not validate q.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}CHAIN_NOT_PUBLIC: the chain is not public yet and the request has no X-API-Key.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}