How to get Robinhood Chain token data (token profile API)
Get a Robinhood Chain token's name, supply, price, market cap, holders, launchpad, liquidity lock and links in one API call. Real response, no API key needed.
Call GET /v1/robinhood/token/{address}. One response carries the token's identity (name, symbol, decimals, type), supply, price with change and all-time high, market (market cap, FDV, liquidity), a holders summary, its launch and liquidity lock status, metadata (logo and links) and trade stats per window. It's on the anonymous plan: no key needed, 1 credit with one.
The token profile is the one call that tells you everything Crius knows about a Robinhood Chain token: what it is, how much of it exists, what it trades at, how big its market is, who holds it, where it launched, whether its liquidity is locked and how much it has traded. Send GET /v1/robinhood/token/{address} with any ERC-20 address and you get it all in a single JSON object, read at the block shown in meta.block.
Get a token’s profile in one call
A graduated Pons token: Charge AI (CHARGE)
What is Charge AI (0x7b8892cea949bc60d494681d1bc3ea96071ab0b8), where did it launch, and how big is it?
curl "https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8"const res = await fetch("https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8");const { data, meta } = await res.json();import requests
r = requests.get( "https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8",)body = r.json()print(body["data"])Real response 200 Captured Oct 28, 2026 · 320 lines (arrays trimmed)
{ "data": { "address": "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8", "admin_flags": null, "bundles": { "see": "/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8/bundles" }, "burned": 29840058.774195638068253872, "chain_id": 4663, "circulating_supply": 970159941.225804361931746128, "creation": { "attribution": "known_launchpad", "block": 88385886, "deployed_via": "pons_v2", "deployer": "0x3ac82d45ff9e4963cefbc3f74dbe293f34c927ca", "factory": "0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e", "launchpad_name": "Pons", "tx": "0x4d9536e81ce418070e93b72f46f1d91afdd6a9ed34141b8e3773926b0d863747" }, "decimals": 18, "dexscreener": { "boosts": { "active_amount": null, "active_seen_ts": null, "count": 0, "last_ts": null, "total_amount": 0 }, "checked_ts": 1793040659244, "community_takeover": false, "community_takeover_ts": null, "confirmed": true, "dex_paid": true, "dex_paid_ts": 1791988981764, "orders": [ { "payment_ts": 1791988981764, "status": "approved", "type": "tokenProfile" } ], "profile": { "description": null, "header": "https://cdn.dexscreener.com/cms/images/JcxosvISKHoUITBu?width=1500&height=500&quality=95&format=auto", "icon": "https://cdn.dexscreener.com/cms/images/DjTh8_NirbFrIzjW?width=800&height=800&quality=95&format=auto", "links": [ { "label": "Website", "type": "website", "url": "https://chargeai.bid/" }, { "type": "twitter", "url": "https://x.com/chargeairh" } ] }, "url": "https://dexscreener.com/robinhood/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8" }, "first_seen_block": 88385886, "history": "complete", "holders": { "burned_pct": 2.98401, "count": 179, "dev_holding": false, "dev_pct": 0, "locked_pct": 8.16327, "top10_pct": 13.436 }, "launch": { "creator": "0x3ac82d45ff9e4963cefbc3f74dbe293f34c927ca", "creator_label": null, "curve": "0x2b0943bf947b54df526047b6fec8183a4fdeb3c3", "curve_state": null, "graduated_block": 88461321, "graduation_threshold": 4.2, "launched_block": 88385886, "launchpad": "pons", "launchpad_name": "Pons", "pair_token": "0x0000000000000000000000000000000000000000", "progress_pct": 100, "raised": null, "status": "graduated" }, "liquidity": { "locked_pct": 100, "lockers": [ "pons_v2_launch_locker" ], "next_unlock_ts": null, "permanent": true, "status": "locked" }, "locked": 81632653.061224486519511236, "market": { "fdv_usd": 3889.48, "liquidity_usd": 5611.8, "market_cap_usd": 3773.42, "pools_count": 10, "quote_liquidity_usd": 2805.9 }, "metadata": { "banner": "https://cdn.dexscreener.com/cms/images/JcxosvISKHoUITBu?width=1500&height=500&quality=95&format=auto", "description": "hf:charge-ai/charge-30b@9ff2ef1e98ea4d9745a70b33ea02b80dba26c582", "links": { "discord": null, "farcaster": null, "github": null, "telegram": null, "twitter": "https://x.com/chargeairh", "website": "https://chargeai.bid/" }, "logo": "https://api.crius.sh/v1/robinhood/logo/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8.png?size=128", "logo_original": "https://api.surplusllm.com/api/launchpad/logos/bb4315cb9506ef872830b1dab25ffdb6694df1b8b8e32cc2c8d083208f26baab.png", "socials": { "discord": null, "farcaster": null, "github": null, "telegram": null, "twitter": { "source": "pons_launch", "url": "https://x.com/chargeairh" }, "website": { "source": "pons_launch", "url": "https://chargeai.bid/" } }, "source": "pons_launch", "sources": { "links": "pons_launch", "logo": "pons_launch" } }, "name": "Charge AI", "price": { "ath_market_cap_usd": 68675.8, "ath_scope": "all_time", "ath_ts": 1792055400000, "ath_usd": 0.0000707881, "change_pct": { "1h": 0.896103, "1m": 0.896103, "1s": 0.896103, "24h": -0.171971, "30s": 0.896103, "4h": 0.896103, "5m": 0.896103, "6h": 0.896103 }, "confidence": "medium", "dex": "uniswap_v4", "eth": 0.00000000165124, "liquidity_usd": 5604.57, "quote": "0x0000000000000000000000000000000000000000", "quote_liquidity_usd": 2802.29, "source_pool": "0x871b166182fd708d5d16a4daa9a42f05a653fa51ee2b195097f425e0d9ca4913", "thin_liquidity": false, "usd": 0.00000388948 }, "security": { "see": "/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8/security" }, "standard": "erc20", "stats": { "all_time": { "buy_volume_usd": 143046, "buys": 2893, "first_trade_ts": 1791982835000, "sell_volume_usd": 137621, "sells": 2250, "since": "chain_start", "trades": 5143, "volume_usd": 280667 }, "avg_trade_usd": { "1h": null, "1m": null, "1s": null, "24h": 2.96366, "30s": null, "4h": null, "5m": null, "6h": null }, "buy_volume_usd": { "1h": 0, "1m": 0, "1s": 0, "24h": 0, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "buyers": { "1h": 0, "1m": 0, "1s": 0, "24h": 0, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "buys": { "1h": 0, "1m": 0, "1s": 0, "24h": 0, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "last_trade_ts": 1793196204000, "sell_volume_usd": { "1h": 0, "1m": 0, "1s": 0, "24h": 5.92732, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "sellers": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "sells": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "traders": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "trades": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "txns": { "1h": 0, "1m": 0, "1s": 0, "24h": 2, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "volume_eth": { "1h": 0, "1m": 0, "1s": 0, "24h": 0.00252958, "30s": 0, "4h": 0, "5m": 0, "6h": 0 }, "volume_usd": { "1h": 0, "1m": 0, "1s": 0, "24h": 5.92732, "30s": 0, "4h": 0, "5m": 0, "6h": 0 } }, "symbol": "CHARGE", "total_supply": 1000000000, "type": "launchpad", "ui_multiplier": null, "verification": { "compiler": null, "contract_name": null, "implementation": null, "is_proxy": null, "sourcify": null } }, "meta": { "block": 100406769, "block_age_ms": 400, "block_ts": 1793225075000, "chain": "robinhood", "finalized_block": 100397649, "lag_ms": 38, "pending": [], "safe_block": 100401329 }}What this tells you
- Identity.
name: "Charge AI",symbol: "CHARGE",decimals: 18,type: "launchpad",standard: "erc20". - Launch.
launch.launchpad: "pons"andlaunch.status: "graduated": it launched at block 88385886 and graduated at block 88461321 (progress_pct: 100).creation.deployeris the creator wallet0x3ac82d45ff9e4963cefbc3f74dbe293f34c927ca. - Price.
price.usdis 0.00000388948 withconfidence: "medium", taken from the Uniswap v4 pool inprice.source_pool.price.ath_usdis 0.0000707881, so the token trades about 94.5% below its all-time high. - Market.
market.market_cap_usd: 3773.42,market.fdv_usd: 3889.48,market.liquidity_usd: 5611.8acrosspools_count: 10pools. - Holders.
holders.count: 179, the top 10 holdtop10_pct: 13.436%, and the developer holds nothing (dev_holding: false). - Liquidity.
liquidity.status: "locked", 100% inpons_v2_launch_lockerwithpermanent: true: the launch liquidity can never be withdrawn. - Activity.
stats.all_timecounts 5,143 trades and $280,667 of volume, butstats.trades.24his only 2: the token has gone quiet. - Links.
metadata.links.websiteishttps://chargeai.bid/andmetadata.links.twitterishttps://x.com/chargeairh, both from the Pons launch (metadata.sources.links: "pons_launch").
An address that isn't a token
What happens when the address isn't an indexed token on Robinhood Chain?
curl "https://api.crius.sh/v1/robinhood/token/0x000000000000000000000000000000000000beef"const res = await fetch("https://api.crius.sh/v1/robinhood/token/0x000000000000000000000000000000000000beef");const { data, meta } = await res.json();import requests
r = requests.get( "https://api.crius.sh/v1/robinhood/token/0x000000000000000000000000000000000000beef",)body = r.json()print(body["data"])Real response 404 Captured Oct 28, 2026 · 6 lines (arrays trimmed)
{ "error": { "code": "token_not_found", "message": "token 0x000000000000000000000000000000000000beef not indexed" }}What this tells you
- The status is
404anderror.codeistoken_not_found, with the messagetoken 0x000000000000000000000000000000000000beef not indexed. - Treat it as “not a token on this chain” (a wallet, a contract that isn’t an ERC-20, or a typo), not as a temporary failure: retrying won’t change it.
What the profile contains
The profile is grouped into sections. Field names are stable, so you can read them without checking the shape first.
| Section | Key fields | What it answers |
|---|---|---|
| Identity | name, symbol, decimals, type, standard | What the token is. type is launchpad, generic or stock. |
| Supply | total_supply, burned, locked, circulating_supply | How many tokens exist and how many were burned or locked. Amounts are in whole tokens. |
price | usd, eth, change_pct, ath_usd, ath_ts, confidence, source_pool | The live price, its change per window, the all-time high and how far to trust it. |
market | market_cap_usd, fdv_usd, liquidity_usd, quote_liquidity_usd, pools_count | How big the market is and how much liquidity backs it. |
holders | count, top10_pct, dev_pct, dev_holding, burned_pct, locked_pct | How spread out the supply is. |
launch and creation | launchpad, status, progress_pct, graduated_block, deployer, factory | Where and how the token was created. launch is null for tokens that didn't use a launchpad. |
liquidity | status, locked_pct, lockers, next_unlock_ts, permanent | Whether the liquidity can be pulled, and when. |
stats | trades, buys, sells, traders, volume_usd per window, plus all_time | How much it trades, from 1 second to 24 hours. |
metadata | logo, banner, description, links, sources | Logo and links for your UI, and where they came from. |
Two sections are links rather than data: security.see and bundles.see point to the security check and the launch-bundle analysis, which are heavier to compute. That keeps the profile fast enough to call on every page view.
A few things differ by token type. Launchpad tokens such as CHARGE carry launch and a liquidity object with their launch locker. Tokens from other factories have launch: null and a liquidity summary with a see link to the liquidity endpoint. Tokenized stocks have type: "stock" and a ui_multiplier. On a token’s very first request, meta.pending lists sections that are still loading; it is empty ([]) in the example above.
Use it in your app
-
Fetch the profile when a user opens a token. One request fills a token page: header (logo, name, links), price card, market stats and holder summary. No key is needed while you prototype.
-
Handle
404 token_not_found. Show “not a token on Robinhood Chain” instead of retrying. -
Read optional sections defensively.
launchisnullfor non-launchpad tokens andpricecan benullfor a token that has never had a market. -
Follow the links for detail. Call
security.seebefore you let users trade, and the pools endpoint when you need every market. -
Use lighter calls in loops. For a price ticker, call
/priceinstead; for a list of tokens, usePOST /tokens/batchwith only the fields you show.
// Token page header from one call (no key needed).const token = "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8";const res = await fetch(`https://api.crius.sh/v1/robinhood/token/${token}`);if (res.status === 404) throw new Error("not a token on Robinhood Chain");const { data, meta } = await res.json();
console.log(`${data.name} (${data.symbol}), ${data.type}`);console.log(`price $${data.price?.usd}, market cap $${data.market.market_cap_usd}`);console.log(`${data.holders.count} holders, top 10 hold ${data.holders.top10_pct}%`);if (data.launch) console.log(`${data.launch.launchpad_name}: ${data.launch.status}`);console.log(`liquidity ${data.liquidity?.status}, read at block ${meta.block}`);Frequently asked questions
What is the best API for Robinhood Chain token data?
Pick one that indexes the chain itself, covers every token (not only listed ones) and tells you how fresh each answer is. The Crius API reads Robinhood Chain from its own archive nodes, decodes every block as it arrives and returns a full token profile in one call, with meta.block and meta.lag_ms on every response. The token profile is on the anonymous plan, so you can test it without signing up.
Does the token profile need an API key?
No. /token/{address} is on the anonymous plan, limited to 2 requests per second per IP. With a free key it costs 1 credit and your limit goes up to 10 requests per second. See Plans & limits.
Which tokens does it cover?
Every ERC-20 on Robinhood Chain: launchpad tokens (type: "launchpad"), tokens from other factories (generic), tokenized stocks (stock), and WETH and USDG. An address that isn't an indexed token returns 404 with the code token_not_found.
How do I get profiles for many tokens at once?
Use POST /v1/robinhood/tokens/batch with up to 100 addresses and a fields list of dot paths (price.usd, market.market_cap_usd, holders.count). It returns only those fields for each token. See Get prices for many tokens.
Where do the logo and social links come from?
From the token's own metadata first (its launchpad launch, an on-chain metadata URI or its verified source), with its DexScreener profile filling gaps. metadata.sources says which one was used, and metadata.links always has all six keys (null when unknown).
Related
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