Get OHLCV candles for Robinhood Chain tokens (OHLCV API)
Robinhood Chain OHLCV API: candles for any token from 1 second to 1 day, with buy volume, trade count and market cap per candle. Real examples and chart code.
The Robinhood Chain OHLCV API is GET /v1/robinhood/token/{address}/candles?interval=1h. Candles come back in columnar arrays aligned by index: t (bucket start, unix ms), o, h, l, c, v (USD volume), bv (buy volume), n (trades) and mc (market cap at close). Intervals run from 1s to 1d, up to 1,500 candles per call. Anonymous plan, 2 credits per call with a key.
OHLCV candles are a token’s price history in fixed time buckets: the open, high, low and close of each bucket plus its volume. Crius builds them from every swap on Robinhood Chain, from 1-second to 1-day buckets, and returns them in columnar arrays (one array per field) that map directly onto charting libraries. Each candle also carries the buy volume, the number of trades and the market cap at its close, so one call can draw the price chart, the volume bars and a market-cap axis. This is the Crius OHLCV API for Robinhood Chain, on the anonymous plan.
Get candles in one call
WETH hourly candles
What did WETH (0x0bd7d308f8e1639fab988df18a8011f41eacad73) do over the last three hours?
curl "https://api.crius.sh/v1/robinhood/token/0x0bd7d308f8e1639fab988df18a8011f41eacad73/candles?interval=1h&limit=3"const res = await fetch("https://api.crius.sh/v1/robinhood/token/0x0bd7d308f8e1639fab988df18a8011f41eacad73/candles?interval=1h&limit=3");const { data, meta } = await res.json();import requests
r = requests.get( "https://api.crius.sh/v1/robinhood/token/0x0bd7d308f8e1639fab988df18a8011f41eacad73/candles?interval=1h&limit=3",)body = r.json()print(body["data"])Real response 200 Captured Oct 28, 2026 · 68 lines (arrays trimmed)
{ "data": { "bv": [ 7719250, 3592353, 454055 ], "c": [ 2358.89, 2361.93, 2357.69 ], "currency": "usd", "h": [ 2389.5, 2369.36, 2363.53 ], "interval": "1h", "l": [ 2345.91, 2345.98, 2353.91 ], "mc": [ 90541111, 90657707, 90494986 ], "n": [ 21263, 23756, 3140 ], "o": [ 2369.35, 2358.89, 2361.93 ], "t": [ 1793217600000, 1793221200000, 1793224800000 ], "v": [ 15761872, 7055129, 1053224 ] }, "meta": { "block": 100406798, "block_age_ms": 1271, "block_ts": 1793225077000, "chain": "robinhood", "finalized_block": 100397649, "from_ts": 1793217600000, "lag_ms": 78, "note": "default (usd) = the token's real markets merged plus its launch curve; ?pool=main its main market only (the default with currency=quote), ?pool=<key> one pool, ?pool=all every pool. Candles open at the previous close (?continuous=false for first-trade opens); buckets without trades are omitted unless ?fill=true", "pools": [ "0xa9188730fe85be88ad499d7d52b099e800fb0334", "0x69bfaf19c9f377bb306a89aed9f6b07e2c1a8d9a", "0xd42a491087a15e5afd51feb3606066cc152d2b09" ], "safe_block": 100401329, "to_ts": 1793225077000 }}What this tells you
tholds the bucket starts: 1793217600000, 1793221200000 and 1793224800000 (20:00, 21:00 and 22:00 UTC on October 28, 2026). Index 0 of every array is the 20:00 candle.- The 20:00 hour opened at 2369.35, reached
h2389.5 andl2345.91, and closed at 2358.89. The 21:00 candle opens at exactly that close: candles are continuous by default. v[0]is $15,761,872 of volume acrossn[0]21,263 trades. Buys werebv[0]$7,719,250, so sells were $8,042,622 (v − bv).- The last candle (22:00) was still open:
meta.to_tsis 1793225077000, four minutes into the hour. meta.poolslists the pools merged into these candles, andmcthe market cap at each close (90,494,986 for the last).
Daily candles for a tokenized stock, weekends included
How did NVIDIA's tokenized stock (NVDA, 0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec) trade day by day?
curl "https://api.crius.sh/v1/robinhood/token/0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec/candles?interval=1d&limit=5"const res = await fetch("https://api.crius.sh/v1/robinhood/token/0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec/candles?interval=1d&limit=5");const { data, meta } = await res.json();import requests
r = requests.get( "https://api.crius.sh/v1/robinhood/token/0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec/candles?interval=1d&limit=5",)body = r.json()print(body["data"])Real response 200 Captured Oct 28, 2026 · 88 lines (arrays trimmed)
{ "data": { "bv": [ 1633483, 1256937, 5277227, 4605087, 5262971 ], "c": [ 212.244, 212.256, 216.74, 218.393, 214.214 ], "currency": "usd", "h": [ 212.611, 213.829, 217.895, 226.763, 227.916 ], "interval": "1d", "l": [ 209.923, 204.939, 210.307, 204.029, 204.947 ], "mc": [ 18767361, 18768439, 19164913, 19311033, 18941545 ], "n": [ 13157, 10513, 32278, 37391, 31375 ], "o": [ 211.41, 212.244, 212.256, 216.74, 218.393 ], "t": [ 1792800000000, 1792886400000, 1792972800000, 1793059200000, 1793145600000 ], "v": [ 3009687, 2370467, 9927098, 9083994, 11237635 ] }, "meta": { "block": 100409733, "block_age_ms": 281, "block_ts": 1793225379000, "chain": "robinhood", "finalized_block": 100401329, "from_ts": 1792800000000, "lag_ms": 24, "note": "default (usd) = the token's real markets merged plus its launch curve; ?pool=main its main market only (the default with currency=quote), ?pool=<key> one pool, ?pool=all every pool. Candles open at the previous close (?continuous=false for first-trade opens); buckets without trades are omitted unless ?fill=true", "pools": [ "0xaa8039d8e39d2bbcae23762e71f5a12162875a61848f0d96914c827f61877ef6", "0x3bb34a44f1b2b5f32c034c38a53065a521a47b199700fa9bd19d60985ff24bf1", "0xb944cec30bd4175855215d767adc81f39e5f7e2b", "0x8b6a6416a5d1040efcfa6234da6aa1265dfe123e", "0xcbdfea90430a30ee4469c9902e120a77e7c7e4711d5643671c1d1957f2f1ce27" ], "safe_block": 100405028, "to_ts": 1793225378000 }}What this tells you
- Five daily candles, October 24 to October 28, 2026 (
tfrom 1792800000000 to 1793145600000, midnight UTC). - The first two days are a Saturday and a Sunday, and the token still traded: 13,157 and 10,513 trades for $3,009,687 and $2,370,467 of volume. On-chain stock tokens trade all week, so a daily chart has no gaps.
- Over the five days the close went from 212.244 to 214.214, but the range was wide:
h227.916 andl204.947 on the last day. - The busiest day by volume was the last,
v[4]$11,237,635 over 31,375 trades, while it was still open.
What the fields mean
| Field | Meaning |
|---|---|
t | Bucket start, unix milliseconds (UTC). |
o, h, l, c | Open, high, low, close in USD (or in the quote token with currency=quote). Each candle opens at the previous close unless continuous=false. |
v | Volume in USD. Every trade counts here, including those that don't set the price. |
bv | Buy volume in USD. Sell volume is v − bv. |
n | Number of trades in the bucket. |
mc | Market cap at the close. |
interval, currency | What you asked for, echoed back. |
meta.pools | The pools merged into the candles. |
meta.from_ts, meta.to_ts | The time range covered. |
Which markets the candles use
By default (currency=usd), candles merge the token’s real markets: every pool with at least $1,000 or 2% of the token’s liquidity, plus its launch curve for launchpad tokens. A $1 trade in a forgotten side pool can’t draw a wick. You can change that:
| Parameter | Effect |
|---|---|
pool=main |
The main market only (the default with currency=quote) |
pool=<pool id> |
One pool |
pool=all |
Every pool, thin ones included |
currency=quote |
Prices in the pool’s quote token, such as ETH |
continuous=false |
Each candle opens at its first trade instead of the previous close |
fill=true |
Flat candles for buckets without trades |
from_ts, to_ts |
A time window in unix ms |
Some trades never set a candle’s price, though they still count in v and n: trades under $1, a buy and a sell of the same size in one pool and block, trades in minor pools far from the main market’s price, trades more than 5x away from the 10-minute median, isolated spikes, and the price ladder of a launch block. Dust trades (under 10,000 raw units on either side) never set a price either.
Use it in your app
-
Pick the interval from the time range.
1mor5mfor a day,1hfor a week,1dfor months. One call returns up to 1,500 candles. -
Convert the columns to rows for your chart library, and divide
tby 1,000 if it expects seconds. -
Use
fill=truefor evenly spaced axes, especially on quiet tokens and short intervals. -
Page back by passing the first candle’s
tminus 1 asto_tson the next call: each call returns the latestlimitcandles beforeto_ts. -
Keep it live. Poll the last candle, or subscribe to candles over the WebSocket stream. The chart example has a complete TradingView Lightweight Charts page.
// Hourly candles to row objects, ready for a chart library.const token = "0x0bd7d308f8e1639fab988df18a8011f41eacad73"; // WETHconst res = await fetch(`https://api.crius.sh/v1/robinhood/token/${token}/candles?interval=1h&limit=48&fill=true`);const { data } = await res.json();
const rows = data.t.map((t, i) => ({ time: t / 1000, // seconds open: data.o[i], high: data.h[i], low: data.l[i], close: data.c[i], volume: data.v[i], buyVolume: data.bv[i], sellVolume: data.v[i] - data.bv[i], trades: data.n[i], marketCap: data.mc[i],}));const last = rows.at(-1);const buys = last.volume ? Math.round((100 * last.buyVolume) / last.volume) : 0;console.log(`last close $${last.close}, ${last.trades} trades, ${buys}% buys`);Frequently asked questions
Is there a Robinhood Chain OHLCV API?
Yes. GET https://api.crius.sh/v1/robinhood/token/{address}/candles returns open, high, low, close and volume for any token on Robinhood Chain (chain id 4663), built from every swap on Uniswap v2, v3, v4 and launchpad curves. It's on the anonymous plan, so you can call it without a key; with a key it costs 2 credits per call.
How do I get historical OHLCV data for a Robinhood Chain token?
Call /candles with an interval and a time window in from_ts and to_ts (unix ms), or page back from the latest candle by passing the first candle's t minus 1 as to_ts. Each call returns up to 1,500 candles, and launchpad tokens include their bonding-curve history.
What is the best API for Robinhood Chain price charts?
One whose candles come from the chain itself, cover every token from its first trade, and don't let one bad trade draw a fake wick. Crius builds candles from every swap on Robinhood Chain, merges the token's real markets, and leaves thin side pools and outlier trades out of the price (they still count in volume). The candles endpoint is on the anonymous plan and drops straight into TradingView Lightweight Charts: see the chart example.
What candle intervals are supported?
1s, 30s, 1m, 5m, 15m, 1h, 4h, 6h and 1d. The default is 1m. Each call returns up to 1,500 candles (500 by default); page back in time with to_ts.
Why are some time buckets missing?
Buckets with no trades are left out. Add fill=true to get flat candles for those buckets (open = high = low = close = the previous close), so the time axis is evenly spaced.
Why don't the candles match the trades I see on the tape?
Candles show the market price. Trades under $1, same-size round trips in one pool and block, trades far from the main market in minor pools, isolated spikes and launch-block ladders don't set the high or low, though they still count in v and n. For the exact tape, use trades.
Can I get candles in ETH instead of USD?
Yes: currency=quote prices the candles in the main pool's quote token (ETH for most launchpad tokens). pool=<pool id> charts one pool, pool=all every pool.
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