Responses & conventions
The Crius API response envelope, meta block, number and amount formats, timestamps, addresses, pagination, finality levels and liquidity and market-cap definitions.
The envelope
Every successful response is a JSON object with data and meta:
{ "data": { "symbol": "WETH", "usd": 2381.97 }, "meta": { "chain": "robinhood", "block": 95503718, "block_ts": 1792712926000, "block_age_ms": 1050, "lag_ms": 37, "safe_block": 95497061, "finalized_block": 95493649 }}meta field |
Meaning |
|---|---|
block |
The latest L2 block the data reflects |
block_ts |
That block’s timestamp (unix ms) |
block_age_ms |
How old that block is |
lag_ms |
How long ago our index applied it |
safe_block |
Latest block whose batch is posted to Ethereum |
finalized_block |
Latest block finalized on Ethereum |
next_cursor |
On paginated lists: pass it as ?cursor= for the next page |
Errors use {"error": {"code": "…", "message": "…"}} with a matching HTTP status. See Errors.
Numbers and amounts
- USD values, prices and ratios are JSON numbers, always in plain decimal notation (
0.00000576413, never5.76e-6), rounded to 6 significant digits. - Token amounts are in human units (already divided by the token’s decimals).
- Percentages are 0–100 (
12.5means 12.5%). liquidity_usdis 2 × the quote side of a pool (the convention DEX screeners use).quote_liquidity_usdis the real quote amount sellers could withdraw. For bonding curves only the real quote raised counts.market_cap_usd= price × (total supply − tokens burned at0x0or0x…dEaD), with unsold bonding-curve tokens included.fdv_usd= price × total supply.
Time
- Every
*_tsfield is unix milliseconds (UTC). - Stats windows:
1s,30s,1m,5m,1h,4h,6h,24h, plusall_timetotals. - Candle intervals:
1s,30s,1m,5m,15m,1h,4h,6h,1d. - Robinhood Chain produces a block roughly every 100 ms. Inside contracts,
block.numberis the Ethereum L1 block (about 12 s), which is why per-block contract rules (anti-snipe, sell throttles) act on L1 blocks; responses expose bothblockandl1_blockwhere it matters.
Addresses
Addresses are accepted in any case and always returned lowercase. Native ETH is 0x0000000000000000000000000000000000000000 with symbol ETH. Uniswap v4 pools are identified by their 32-byte pool id.
Token logo and links
A token’s logo and links have one shape on every endpoint. They come from the token’s own metadata first (its launch, its on-chain metadata URI, its verified source), with its DexScreener profile filling any gaps.
- The token profile (
/token/{address}) has the full object inmetadata:
"metadata": { "logo": "https://…/logo.png", "banner": "https://…/header.png", "description": "…", "links": { "website": "https://…", "twitter": "https://x.com/…", "telegram": null, "discord": null, "farcaster": null, "github": null }, "sources": { "logo": "metadata_uri", "links": "launch" }}- Lists and search (
/tokens,/search) carry the samelogoandlinkson each row. - Any token inside another object (pool sides, trades, wallet holdings, launch pairs, liquidity events, prices, WebSocket trades) carries the same
logonext to itsaddressandsymbol.
links always has all six keys, null when unknown, so you can read links.twitter without checking the shape. metadata.socials (one {url, source} object per platform) and dexscreener.profile remain for existing integrations; new code should read metadata.logo and metadata.links.
Pagination
Lists take limit (each endpoint documents its maximum, usually 500) and return meta.next_cursor when there is more. Pass it back as cursor; cursors are opaque and stable.
Finality
Every event (trade, transfer, liquidity change) carries a finality level:
| Level | Meaning |
|---|---|
latest |
Confirmed by the Robinhood Chain sequencer (sub-second) |
safe |
Its batch has been posted to Ethereum |
finalized |
Finalized on Ethereum |
Most apps can use latest. If you need settled data only, filter by finality where an endpoint supports it, or subscribe to the stream with "finality": "safe". See Finality & reorgs.
History
Fields marked history: "partial" or since_index_start cover data from when our index started for that item; they become complete once the history backfill reaches it. Profiles show history: "complete" once everything is indexed.
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