---
title: "Search tokens on a chain"
method: GET
path: "/tokens/search"
tags: ["Tokens and charts"]
---

# Search tokens on a chain

`GET /tokens/search`

## Request

- Base URL: `https://api.getchord.xyz/v1`
- URL: `https://api.getchord.xyz/v1/tokens/search`
- Auth: none declared

Symbol, name or address. What it searches depends on `chain`:

- `4663` Robinhood Chain: the curated list (`verified: true`, stocks tagged `stock`) plus every token that traded in the last 24 hours and is not on it (`verified: false`, no logo; named on-chain when no list knows it).
- `5042` Arc: every token traded in the last 24 hours, the same index as `/arc/tokens/search`. `verified` is true for tokens on the curated Arc list.
- `43114` / `8453` / `56` / `42161` / `1`: that chain's token list (`verified: true`) plus every token traded on it in the last 24 hours with at least $500 of volume, or any traded token by its address (`verified: false`, no logo; tokens the scam screen hides from boards are left out of a name search). A chain that is not public yet answers `404 CHAIN_NOT_PUBLIC` unless the request carries an `X-API-Key`.
- no `chain`, or `143`: Monad off-list discovery. Tokens found through DexScreener that are **not** on the curated Monad list, with a logo and on-chain decimals, all `verified: false`. This mode answers `{ tokens }` only, returns up to 8 rows whatever `limit` says, and returns an empty list for a query under 2 characters.
- `143` (or no `chain`) with `listed=1`: Monad like the other chains, `{ chain, q, tokens }`: the curated Monad list first (`verified: true`), then the off-list discovery rows (`verified: false`, after every listed match whatever their rank), `limit` honoured. The off-list half waits at most 3 seconds.

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.

## Query parameters

- `q` string, required
- `chain` 4663 | 5042 | 43114 | 8453 | 56 | 42161 | 1 | 143
- `limit` integer
- `listed` 0 | 1

## Response `200`

Matches, best first. An empty `tokens` is a real answer.

- object
  - `chain` integer: The chain searched. Absent in Monad off-list mode.
  - `q` string: The query as received. Absent in Monad off-list mode.
  - `tokens` object[], required
    - `address` string, required: EVM address, hex, case-insensitive.
    - `symbol` string, required
    - `name` string, required
    - `decimals` integer, nullable, required: ERC-20 decimals. Null for an off-list token whose decimals are not resolved yet.
    - `logoURI` string, nullable: Logo URL when known. Absent on off-list Robinhood Chain rows.
    - `verified` boolean, required: On the chain's curated list. False = found by the index or by discovery, not vetted.
    - `tags` string[]: `stock`, `stablecoin`, … from the curated list (Robinhood Chain); `meme` in Monad mode. Absent when empty.
    - `liquidityUsd` number, nullable: Monad off-list rows only: liquidity of the deepest DexScreener pair.

## Other responses

- `400`: `BAD_CHAIN` (a chain this route does not search) or `BAD_QUERY` (`q` empty or longer than 64 characters). Monad off-list mode does not validate `q`.
- `404`: `CHAIN_NOT_PUBLIC`: the chain is not public yet and the request has no `X-API-Key`.

---

[API](https://skmtc.dev/getchord/apis/chord-api.md) · [All operations](https://skmtc.dev/getchord/apis/chord-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getchord/apis/chord-api/revisions/d3bc4640fea0?raw)
