Skip to main content
GET
GET /v1/token/ohlcv · 5 credits Chart-ready candles from 1s to 1M. By default, one market: the pool we price the token from (rank 1 of /v1/token/pools), resolved at request time, and, for a token that graduated from a bonding curve, its curve history stitched in front of the current pool so the series is continuous across the migration. meta.pools lists the pool(s) the page was built from. Pass pools= to aggregate an explicit set instead (≤50). Wick-outlier clamping and candle connecting are applied server-side. On Base, the forming candle folds preconfirmed (flashblocks) swaps ~2.5s before block commit.
An unknown token returns 404. The EVM native coin (0x0000…0000) has no market of its own, so no candles: it returns 400 INVALID_PARAM; take its price from /v1/prices/native and the markets it quotes from /v1/token/pools. Prices are native-quoted by default (meta.quote: "native"); on Solana pass quote=usd for USD candles, otherwise multiply by the native USD price.
Two volumes per candle. volume is the traded value on the quote side, in the chain’s native asset (ETH, SOL, BNB…) or in USD with quote=usd. volumeToken is the traded amount in units of the token itself (the base-asset volume of a Binance kline); it is never converted, whatever quote is. Both count exactly the same trades, and trades is how many: the number of swaps executed against the market in the bucket (0 on a filled candle). It counts swaps, not transactions: a transaction that swaps twice on the market counts twice, exactly as its volume does; unique transactions are the txns of the stats endpoints.
Intervals run from 1s to 1M. 1w candles are epoch-aligned weeks, Thursday 00:00 UTC to Thursday (the standard weekly bucket); 1M candles are calendar months in UTC (1st of the month 00:00 UTC, 28 to 31 days). 7d and 30d are accepted as aliases of 1w and 1M, and so are 1min, 5min, 15min, 30min and 60 (Mobula-style); meta.interval always echoes the canonical key.
quote=usd serves the candle as it traded in dollars: every swap is valued at the SOL/USD rate of its own minute, so open, high, low, close and volume are the USD figures of the trades themselves, whatever the interval (a daily or weekly candle is not converted at one rate).
The time axis is dense by default: every bucket up to endTime is present, and a bucket without a trade is a flat zero-volume candle at the previous close. Pass fill=false for a sparse axis with traded buckets only. limit is honoured whenever the token’s history allows it, however quiet the token is.
Every candle opens at the close of the previous traded candle, the first candle of a page included (its open is the close of the last traded candle before the page): paging backwards yields one continuous series, and a given bucket has the same open whatever page it lands on. Only the very first candle of the token’s history, or the first candle at or after a from you set, opens at its own first trade. The chaining is exact in the native series; with quote=usd each candle is converted at its own window’s SOL/USD rate, so consecutive USD opens step by the rate’s move between windows - most visible on tokens that are flat in USD terms.
meta.nextEndTime appears when a page ends early on a very deep scan - pass it as the next endTime to keep paging; it always points at real history, never at an empty stretch. Otherwise page with oldestTime - 1 while meta.hasMore is true. meta.oldestTime and meta.newestTime are null on an empty page. endTime and from are unix seconds; a value in milliseconds is accepted too and normalized (candle time is always seconds). Up to 2000 candles per page. Historical pages are immutable and cached, so pagination is fast and deterministic.

Authorizations

Authorization
string
header
required

Your raw API key (not needed on the demo server).

Query Parameters

chain
string
required

Public chain id - evm:<id> or solana (solana:solana accepted).

address
string
required

Token address (EVM hex, case-insensitive).

pools
string

Optional CSV of pool addresses (≤50) to aggregate; default: the pool we price the token from, tracked across a bonding-curve migration.

interval
string
default:5m
required

1s|5s|15s|30s|1m|3m|5m|15m|30m|1h|2h|4h|6h|12h|1d|1w|1M (default 5m). 1w buckets are epoch-aligned weeks (Thursday 00:00 UTC to Thursday, the standard weekly bucket); 1M buckets are calendar months (1st of the month 00:00 UTC). 7d and 30d are accepted as aliases of 1w and 1M; meta.interval always echoes the canonical key.

limit
integer
default:200

Candles per page, 1-2000 (default 200). Honoured whenever the history allows it, however quiet the token is.

Required range: 1 <= x <= 2000
endTime
integer

Unix seconds, inclusive upper bound (at most 1 day ahead; a millisecond value is accepted and normalized). Paginate back with the previous meta.oldestTime - 1 while meta.hasMore is true.

Required range: x >= 0
from
integer

Unix seconds, inclusive lower bound (scans stop there); a millisecond value is accepted and normalized.

Required range: x >= 0
quote
default:native

native (default) or usd (Solana) - usd serves the candle as it traded in dollars: every swap is valued at the SOL/USD rate of its own minute, so open, high, low, close and volume are the USD figures of the trades themselves, whatever the interval. volumeToken (units of the token) is never converted.

Available options:
native
fill
boolean
default:true

Dense time axis (default true): a flat zero-volume candle for every bucket without a trade. false returns traded buckets only.

Response

200

Standard { data, meta } envelope.