Skip to content

Discover tokens

Goal: the discovery layer of a trading app — what is traded, what is moving, what just launched, and search — on Arc.

GET /arc/tokens returns every token that traded in the last 24 hours (about 1,500 on a normal day), with price, change, buy/sell volume, trades, traders, market cap, pool counts per venue and honesty flags. Sort server-side; page with offset.

const { tokens, total } = await fetch(`${A}/arc/tokens?sort=volume&limit=100&offset=0`).then((r) => r.json());
  • Columns Chord shows: token (logo, symbol, listed check), price, 24h change, volume, buys / sells, traders, market cap (labelled FDV), pools.
  • flags present → grey the row and badge it. They already sort below clean rows.
  • routable → whether to draw a Buy button.
  • includeUnlisted=1 adds tokens with no curated metadata or logo (most launches). Chord shows them, with the on-chain symbol.

Keep the board moving between polls with the WebSocket prices channel — one subscription covers the whole board, prices and 24h counters alike, plus tokens trading for the first time:

ws.send(JSON.stringify({ op: "sub", channel: "prices", chain: 5042 }));
// { op: "prices", at, items: [{ address, priceUsd, ts, side, usd, volume24h, trades24h, buys24h, sells24h, … }] }
// apply by address; use the counters when `at` is later than the REST page's `updatedAt`
// { op: "new", items: [{ address, symbol, name, totalSupply, firstTs, priceUsd }] } — prepend to a "New" list

GET /arc/trending?limit=20 — movers of the last two hours, scored from the hourly rollup. Each row is a full token row plus score, volNow, tradesNow, change1hPct and momentum. Poll every 30 s.

GET /arc/graduated?hours=48&limit=100 — tokens whose first pool on Arc was created in the window, routable today and screened (impostor symbols, launch farms, no-sell tokens, too few traders removed). Newest first; launchedAt, launcher, launcherName and creator on each row; screened counts what each filter removed, which is worth showing (“1,615 launch-farm tokens hidden”). Poll every 60 s.

Pair it with GET /arc/launchers?hours=24 for the launchpad strip: which launchers are active, pools per hour, and 24-hour volume over the pools each one created.

GET /arc/tokens/search?q=argus&limit=10 — symbol, name or address over every token traded in the last 24 hours. Exact symbol first, then prefix, name, substring; listed tokens and volume break ties so the real ARGUS outranks a copy. A pasted address always returns that token. Debounce at 200 ms; coverage says how many tokens have a resolved name yet.

GET /arc/attention?days=1&limit=20 — what people on Chord are looking at (searches, views, questions to the analyst, watchlist adds). A demand signal, independent of price; use it for a “people are watching” rail.

Chord’s markets page polls /arc/tokens every 20 s, /arc/trending every 30 s, /arc/graduated every 60 s, keeps prices live over the WebSocket, and runs search on demand. That is well inside the anonymous limit; a key is only needed when you serve many users from one server.