Get prices for many Robinhood Chain tokens in one call
Price up to 100 Robinhood Chain tokens in one request with the batch prices API, or get chosen profile fields for many tokens. Real responses, no key needed.
Call GET /v1/robinhood/prices?tokens={address},{address} (or POST /v1/robinhood/prices with {"tokens": [...]}) for up to 100 tokens. data is keyed by address, each with usd, eth, change_24h_pct, liquidity_usd, confidence, symbol and logo; unknown addresses go to meta.missing. For other fields, POST /v1/robinhood/tokens/batch returns just the profile fields you list. Both are on the anonymous plan, 1 credit per call with a key.
When you need prices for a watchlist, a portfolio or a token screener, don’t send one request per token. The batch prices endpoint prices up to 100 Robinhood Chain tokens in one call, keyed by address, with the same on-chain pricing as the single price endpoint plus the 24-hour change. If you need more than prices (market cap, liquidity, holder count), batch profiles return exactly the fields you ask for.
Price a list of tokens in one call
Two tokenized stocks and one wrong address
What are NVDA (0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec) and TSLA (0x322f0929c4625ed5bad873c95208d54e1c003b2d) worth, and what if the list has an address that isn't a token?
curl "https://api.crius.sh/v1/robinhood/prices?tokens=0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec,0x322f0929c4625ed5bad873c95208d54e1c003b2d,0x000000000000000000000000000000000000beef"const res = await fetch("https://api.crius.sh/v1/robinhood/prices?tokens=0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec,0x322f0929c4625ed5bad873c95208d54e1c003b2d,0x000000000000000000000000000000000000beef");const { data, meta } = await res.json();import requests
r = requests.get( "https://api.crius.sh/v1/robinhood/prices?tokens=0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec,0x322f0929c4625ed5bad873c95208d54e1c003b2d,0x000000000000000000000000000000000000beef",)body = r.json()print(body["data"])Real response 200 Captured Oct 28, 2026 · 36 lines (arrays trimmed)
{ "data": { "0x322f0929c4625ed5bad873c95208d54e1c003b2d": { "change_24h_pct": -0.959698, "confidence": "high", "eth": 0.171057, "liquidity_usd": 792587, "logo": null, "source_pool": "0x3ea70ce0b34473692549f97e630a1d82dc05cea94fa55f81b50f10c8c6d8186f", "symbol": "TSLA", "usd": 402.923 }, "0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec": { "change_24h_pct": -1.49823, "confidence": "high", "eth": 0.0909845, "liquidity_usd": 1415590, "logo": null, "source_pool": "0xd4eb21209c4d6093f80b5b84f5c45cc093ea14a3", "symbol": "NVDA", "usd": 214.313 } }, "meta": { "block": 100409724, "block_age_ms": 394, "block_ts": 1793225378000, "chain": "robinhood", "finalized_block": 100401329, "lag_ms": 63, "missing": [ "0x000000000000000000000000000000000000beef" ], "safe_block": 100405028 }}What this tells you
datais an object keyed by lowercase address, not an array: look tokens up by address, in any order.- NVDA:
usd: 214.313,change_24h_pct: -1.49823. TSLA:usd: 402.923,change_24h_pct: -0.959698. Both haveconfidence: "high". - TSLA’s price comes from a pool with
liquidity_usd: 792587, NVDA’s from one with1415590: the 24h change and liquidity come in the same row, so you don’t need a second call. 0x000000000000000000000000000000000000beefisn’t a token, so it’s absent fromdataand listed inmeta.missing. The status is still200.logoisnullfor both stocks here; for tokens with a logo it’s an image URL you can show directly.
Get chosen profile fields for many tokens
Batch prices cover price, change and liquidity. For anything else in the token profile, send POST /v1/robinhood/tokens/batch with a fields list of dot paths. Each token comes back trimmed to those fields, with the same nesting as the full profile.
Market cap and liquidity for WETH and CHARGE
What are the symbol, price, 24h change, market cap and liquidity of WETH and Charge AI, without downloading two full profiles?
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"]}'const res = await fetch("https://api.crius.sh/v1/robinhood/tokens/batch", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ "tokens": [ "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8", "0x0bd7d308f8e1639fab988df18a8011f41eacad73" ], "fields": [ "symbol", "price.usd", "price.change_pct.24h", "market.market_cap_usd", "market.liquidity_usd" ] }),});const { data, meta } = await res.json();import requests
r = requests.post( "https://api.crius.sh/v1/robinhood/tokens/batch", json={"tokens":["0x7b8892cea949bc60d494681d1bc3ea96071ab0b8","0x0bd7d308f8e1639fab988df18a8011f41eacad73"],"fields":["symbol","price.usd","price.change_pct.24h","market.market_cap_usd","market.liquidity_usd"]},)body = r.json()print(body["data"])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
- The body asked for
symbol,price.usd,price.change_pct.24h,market.market_cap_usdandmarket.liquidity_usd, and that’s all each row contains. - WETH:
market.market_cap_usd: 90409474andmarket.liquidity_usd: 73135530. CHARGE:market.market_cap_usd: 3773.42andmarket.liquidity_usd: 5611.8. market.liquidity_usdadds up all the token’s pools, so for WETH it’s far above theliquidity_usdof its single price pool in a batch price row (9,953,382 in the batch prices sample).price.change_pct.24his the same number aschange_24h_pctin batch prices: -0.171971 for CHARGE.
Which call to use
| Call | Returns per token | Use it for |
|---|---|---|
GET /prices?tokens=… | usd, eth, change_24h_pct, liquidity_usd, confidence, source_pool, symbol, logo | Watchlists, tickers, portfolio totals. Cacheable. |
POST /prices | The same, with the list in a JSON body: {"tokens": [...]} | Long lists that don't fit in a URL. |
POST /tokens/batch | Only the fields you list (dot paths into the profile); an empty list returns full profiles | Screeners and tables that need market cap, holders or launch status. |
All three take up to 100 tokens and cost 1 credit per call with a key. Addresses are accepted in any case and returned lowercase.
Use it in your app
-
Collect the addresses you show. A portfolio’s holdings, a watchlist, or the rows on screen.
-
Split into chunks of 100 and send one
POST /pricesper chunk. -
Merge the
dataobjects and look each token up by its lowercase address. -
Report
meta.missinginstead of failing: show “no price” for those tokens. -
Refresh on a timer or on new blocks. Prices change every block; for live updates without polling, subscribe to the WebSocket stream.
// Price any number of tokens, 100 per request.async function getPrices(addresses) { const prices = {}; const missing = []; for (let i = 0; i < addresses.length; i += 100) { const res = await fetch("https://api.crius.sh/v1/robinhood/prices", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ tokens: addresses.slice(i, i + 100) }), }); const { data, meta } = await res.json(); Object.assign(prices, data); missing.push(...meta.missing); } return { prices, missing };}
const { prices, missing } = await getPrices([ "0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec", "0x322f0929c4625ed5bad873c95208d54e1c003b2d",]);for (const [addr, p] of Object.entries(prices)) { const change = p.change_24h_pct == null ? "n/a" : `${p.change_24h_pct.toFixed(2)}%`; console.log(`${p.symbol} $${p.usd} (${change} 24h, ${p.confidence})`);}if (missing.length) console.warn("no price for", missing);Frequently asked questions
How many tokens can I price in one request?
Up to 100 per call, for both batch prices and batch profiles. For a longer list, split it into chunks of 100. One batch call costs 1 credit with a key, however many tokens it carries.
What happens if one of the addresses is wrong?
The request still succeeds. Tokens Crius can't price are left out of data and listed in meta.missing, so one bad address in a portfolio doesn't break the whole call.
Should I use GET or POST for batch prices?
They return the same thing. GET is easy to cache and to test in a browser; use POST with a JSON body when the list would make the URL too long (100 addresses is about 4,300 characters).
How do I value a wallet's holdings on Robinhood Chain?
Price the wallet's tokens with one batch call and multiply each balance by usd. Skip or flag tokens with confidence: "low": their price can't be realized at size. On the Starter plan, the wallet profile returns the holdings already valued.
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