CRIUS Docs
API status Get API key
Use cases

Robinhood Chain API for token screeners

Build a Robinhood Chain token screener with the Crius API: new, trending and graduating lists, batch profiles, candles and risk badges, with credit costs.

Updated 3 min read

A token screener is a live table of a chain’s tokens: newest launches, trending tokens, top gainers, tokens about to graduate from a bonding curve, each with price, change, market cap, liquidity, volume and a risk badge. With the Crius API the table comes from one list call per tab, the detail page from a handful of anonymous calls, and the risk badge from the same security check traders use. You don’t need to index Robinhood Chain or decode its launchpads.

Endpoints a screener uses

  • GET/tokens one call per tab: new, bonding, graduating, graduated, trending, top_volume, top_gainers, top_losers, top_market_cap. Filters: launchpad, quote, min_liquidity_usd, min_volume_usd, min_market_cap_usd / max_market_cap_usd, created_after_ts, window and clean=true.
  • POST/tokens/batch to refresh the rows a user is watching, trimmed to the fields you show.
  • GET/prices for a watchlist’s prices and 24h change, 100 tokens per call.
  • GET/token/{address}/candles for sparklines and the detail chart, with the launch curve merged in.
  • GET/token/{address}/security for the risk badge (risk, score, flags).
  • GET/search for the search box: names, symbols and exact addresses.

Suggested architecture

  1. Refresh lists on the server. A worker calls each tab’s list on a timer and caches the result. Five tabs refreshed every 10 seconds is 43,200 calls a day, about 1.3 million credits a month: more than the Free plan’s 1,000,000, well within Starter. Every visitor is served from the cache.

  2. Compute risk once per token. Call /security (1 credit) the first time a token enters any list, store the badge, and re-check on a schedule or when the tax:<token> or lp:<token> stream channels report a change.

  3. Load detail pages on demand. A token page needs the profile (1 credit), candles (2), recent trades (2) and the cached security check (1): 6 credits. Cache it per meta.block, and push live updates with candles:<token>:<interval> and trades:<token> on the stream.

  4. Let the user filter on the server. Pass min_liquidity_usd, launchpad or min_market_cap_usd to the list instead of filtering 100 rows in the browser: you get full pages of matching tokens.

Refresh a watchlist

Two watchlist rows, only the fields the table shows

How do I refresh price, 24h change, market cap and liquidity for the tokens a user is watching?

POST/v1/robinhood/tokens/batch
curl -X POST "https://api.crius.sh/v1/robinhood/tokens/batch" \
-H "content-type: application/json" \
-d '{"tokens":["0x7b8892cea949bc60d494681d1bc3ea96071ab0b8","0x0bd7d308f8e1639fab988df18a8011f41eacad73"],"fields":["symbol","price.usd","price.change_pct.24h","market.market_cap_usd","market.liquidity_usd"]}'
Real response 200 Captured Oct 28, 2026 · 40 lines (arrays trimmed)
{
"data": {
"0x0bd7d308f8e1639fab988df18a8011f41eacad73": {
"market": {
"liquidity_usd": 73135530,
"market_cap_usd": 90409474
},
"price": {
"change_pct": {
"24h": 0.286017
},
"usd": 2355.49
},
"symbol": "WETH"
},
"0x7b8892cea949bc60d494681d1bc3ea96071ab0b8": {
"market": {
"liquidity_usd": 5611.8,
"market_cap_usd": 3773.42
},
"price": {
"change_pct": {
"24h": -0.171971
},
"usd": 0.00000388948
},
"symbol": "CHARGE"
}
},
"meta": {
"block": 100406780,
"block_age_ms": 575,
"block_ts": 1793225076000,
"chain": "robinhood",
"finalized_block": 100397649,
"lag_ms": 196,
"missing": [],
"safe_block": 100401329
}
}

What this tells you

  • One POST returns both tokens, trimmed to the five fields in the body: symbol, price.usd, price.change_pct.24h, market.market_cap_usd and market.liquidity_usd.
  • CHARGE has market_cap_usd: 3773.42 and liquidity_usd: 5611.8. Liquidity counts both sides of each pool (2 × the quote side), so on a small token it can exceed the market cap.
  • WETH has market_cap_usd: 90409474 and liquidity_usd: 73135530 across all its pools.
  • meta.missing: []: every address was found. Unknown addresses are listed there instead of failing the request.
// Server-side list cache for a screener tab (anonymous plan; add a key for higher limits).
const cache = new Map();
async function refresh(tab, query) {
const res = await fetch(`https://api.crius.sh/v1/robinhood/tokens?list=${tab}&limit=100&${query}`);
const { data, meta } = await res.json();
cache.set(tab, {
block: meta.block,
rows: data.map((t) => ({
address: t.address, symbol: t.symbol, logo: t.logo,
price: t.price_usd, change24h: t.change_pct["24h"],
mcap: t.market_cap_usd, liquidity: t.liquidity_usd, volume24h: t.volume_usd["24h"],
launchpad: t.launchpad_name, progress: t.progress_pct,
})),
});
}
setInterval(() => refresh("trending", "window=24h"), 10_000);
setInterval(() => refresh("graduating", "min_liquidity_usd=1000"), 10_000);

Step-by-step builds are in Build a token screener, and each tab has its own guide: new tokens, trending, by market cap and bonding and graduating.

Frequently asked questions

How do I keep rugs and wash trading off a Robinhood Chain screener?

Use list=trending, which only lists clean tokens: no crash of 90% from the window's peak, $1,000+ liquidity, 20+ real holders, no insider or wallet-farm launch, no bot distribution and no single wallet holding 40%+ of the liquidity unlocked. Add clean=true to any other list (top_volume, top_gainers, …) for the same checks.

How many tokens does one call return?

Token lists return up to 100 tokens per page (paginate with cursor). Batch prices and batch profiles take up to 100 addresses per call. Each of those calls costs 1 credit.

Can I show bonding-curve progress for launchpad tokens?

Yes. Every row of /tokens has status (bonding or graduated for launchpad tokens) and progress_pct toward graduation. list=graduating lists bonding tokens closest to graduation first.

Should my screener call the API from the browser?

Better from your backend. Without a key each visitor's browser gets 2 requests per second, and a key in front-end code must be origin-restricted. A backend that refreshes the lists on a timer and serves every visitor from its cache costs the same credits for 10 visitors or 10,000.

Get your free Crius API key

Every example on this page works with a free key: higher rate limits than the anonymous plan, holders, wallets and the WebSocket stream. No card needed.

  • Robinhood Chain (4663) only, from our own archive nodes
  • REST + WebSocket
  • Pay on-chain or by card