# 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.

Source: https://docs.crius.sh/guides/get-ohlcv-candles/ · Updated 2026-10-28

Short answer

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.

[GET `/token/{address}/candles`](https://docs.crius.sh/reference/trades/ohlcv-candles/) [GET `/token/{address}/trades`](https://docs.crius.sh/reference/trades/trade-tape/)

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

Example [Anonymous · no key · 2 credits](https://docs.crius.sh/reference/trades/ohlcv-candles/)

### WETH hourly candles

What did WETH (0x0bd7d308f8e1639fab988df18a8011f41eacad73) do over the last three hours?

GET/v1/robinhood/token/0x0bd7d308f8e1639fab988df18a8011f41eacad73/candles?interval=1h&limit=3

  

**cURL**

```bash
curl "https://api.crius.sh/v1/robinhood/token/0x0bd7d308f8e1639fab988df18a8011f41eacad73/candles?interval=1h&limit=3"
```

**JavaScript**

```js
const res = await fetch("https://api.crius.sh/v1/robinhood/token/0x0bd7d308f8e1639fab988df18a8011f41eacad73/candles?interval=1h&limit=3");
const { data, meta } = await res.json();
```

**Python**

```python
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)**

```json
{
  "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

-   `t` holds 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 `h` 2389.5 and `l` 2345.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 across `n[0]` 21,263 trades. Buys were `bv[0]` $7,719,250, so sells were $8,042,622 (`v − bv`).
-   The last candle (22:00) was still open: `meta.to_ts` is 1793225077000, four minutes into the hour.
-   `meta.pools` lists the pools merged into these candles, and `mc` the market cap at each close (90,494,986 for the last).

[OHLCV candles reference](https://docs.crius.sh/reference/trades/ohlcv-candles/) Runs from your browser on the anonymous plan [Data looks wrong? Report it](mailto:support@crius.sh?subject=Wrong%20data%20in%20docs%20example%3A%20WETH%20hourly%20candles&body=Page%3A%20https%3A%2F%2Fdocs.crius.sh%2Fguides%2Fget-ohlcv-candles%2F%23weth-1h%0ARequest%3A%20GET%20%2Fv1%2Frobinhood%2Ftoken%2F0x0bd7d308f8e1639fab988df18a8011f41eacad73%2Fcandles%3Finterval%3D1h%26limit%3D3%0A%0AWhat's%20wrong%20or%20missing%3F%0A%0A)

Example [Anonymous · no key · 2 credits](https://docs.crius.sh/reference/trades/ohlcv-candles/)

### Daily candles for a tokenized stock, weekends included

How did NVIDIA's tokenized stock (NVDA, 0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec) trade day by day?

GET/v1/robinhood/token/0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec/candles?interval=1d&limit=5

  

**cURL**

```bash
curl "https://api.crius.sh/v1/robinhood/token/0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec/candles?interval=1d&limit=5"
```

**JavaScript**

```js
const res = await fetch("https://api.crius.sh/v1/robinhood/token/0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec/candles?interval=1d&limit=5");
const { data, meta } = await res.json();
```

**Python**

```python
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)**

```json
{
  "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 (`t` from 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: `h` 227.916 and `l` 204.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.

[OHLCV candles reference](https://docs.crius.sh/reference/trades/ohlcv-candles/) Runs from your browser on the anonymous plan [Data looks wrong? Report it](mailto:support@crius.sh?subject=Wrong%20data%20in%20docs%20example%3A%20Daily%20candles%20for%20a%20tokenized%20stock%2C%20weekends%20included&body=Page%3A%20https%3A%2F%2Fdocs.crius.sh%2Fguides%2Fget-ohlcv-candles%2F%23nvda-1d%0ARequest%3A%20GET%20%2Fv1%2Frobinhood%2Ftoken%2F0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec%2Fcandles%3Finterval%3D1d%26limit%3D5%0A%0AWhat's%20wrong%20or%20missing%3F%0A%0A)

## 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

1.  **Pick the interval from the time range.** `1m` or `5m` for a day, `1h` for a week, `1d` for months. One call returns up to 1,500 candles.
    
2.  **Convert the columns to rows** for your chart library, and divide `t` by 1,000 if it expects seconds.
    
3.  **Use `fill=true` for evenly spaced axes**, especially on quiet tokens and short intervals.
    
4.  **Page back** by passing the first candle’s `t` minus 1 as `to_ts` on the next call: each call returns the latest `limit` candles before `to_ts`.
    
5.  **Keep it live.** Poll the last candle, or subscribe to candles over the [WebSocket stream](https://docs.crius.sh/guides/stream-live-candles/). The [chart example](https://docs.crius.sh/examples/chart/) has a complete TradingView Lightweight Charts page.
    

```js
// Hourly candles to row objects, ready for a chart library.
const token = "0x0bd7d308f8e1639fab988df18a8011f41eacad73"; // WETH
const 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`);
```

Credits

Candles cost 2 credits per call with a key, whatever the `limit`. Ask for the candles you’ll draw in one call instead of many small ones.

## 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](https://docs.crius.sh/examples/chart/).

**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](https://docs.crius.sh/guides/get-token-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

[Docs **Chart example** Draw a live candlestick and volume chart for any Robinhood Chain token with the Crius candles endpoint and TradingView Lightweight Charts, with full source code. Read](https://docs.crius.sh/examples/chart/) [Guide **Stream live candles** Keep a Robinhood Chain candlestick chart live: load candles over REST, update the last bar from the Crius WebSocket, with a runnable Node.js relay. Read](https://docs.crius.sh/guides/stream-live-candles/) [Guide **Token trades** Get every buy and sell of a Robinhood Chain token with USD value, price, gas, tax and the real trader behind routers and smart wallets. Real examples, no key. Read](https://docs.crius.sh/guides/get-token-trades/) [Guide **All-time high and price change** Get a Robinhood Chain token's all-time high, when it was set, its market cap at the peak and its price change from 1 second to 24 hours, plus 7-day change. Read](https://docs.crius.sh/guides/get-all-time-high-and-price-change/) [API reference **OHLCV candles API** Candles in columnar form (one array per field, aligned by index), which is compact and maps straight onto charting libraries. Read](https://docs.crius.sh/reference/trades/ohlcv-candles/)
