View as markdown
Endpoints · Series

OHLCV bars

GEThttps://api.tickerbot.io/v2/tickers/{ticker}/bars/{interval}

OHLCV bars from 1-second through daily — the chart feed.

string[]required

Ticker symbol, or a comma-separated list (up to 50) for a bulk response keyed by symbol.

enumrequired

Bar interval.

1sOne-second bars. Bars only, active universe, back-filled on demand.
1mOne minute. The finest stored tier; carries the intraday column subset and ~1,100 of ~13,700 tickers.
5mFive-minute bars. Bars only.
15mFifteen-minute bars. Bars only.
30mThirty-minute bars. Bars only.
1hOne hour. Stored tier, intraday column subset, full universe.
1dOne day. The full-history, full-column tier — the only grain that carries daily-only columns (SMAs, RSI, fundamentals).
integerdefault 100

Most-recent N bars. Max 1000 — an over-cap value is clamped, not an error.

string

Continuation token from a prior response's next_cursor; sugar for before (sending both is a 400; a blank cursor= counts as absent), and the way to page inside a from/to window.

string

Return the N bars ending strictly before this date/timestamp — back-paging. Mutually exclusive with cursor (they are the same control — a 400 when both are sent).

string

Window start (inclusive): YYYY-MM-DD, ISO timestamp, or epoch-ms. Combines with to for an explicit window; page within it using cursor. Mutually exclusive with asof and before (400).

string

Window end (inclusive): a bare YYYY-MM-DD means through the end of that day, same as series. Mutually exclusive with asof and before (400).

string

Point-in-time: the most recent bar whose period had **closed** at or before that moment. A bare YYYY-MM-DD means that day's close. A full timestamp means the last FINISHED bar — at 10:00 ET on a Wednesday the day's close has not happened, so 1d returns Tuesday's bar. Returns one bar unless you also pass limit, which gives the last limit closed bars. Mutually exclusive with before/cursor (400). Unlimited depth.

as_ofstring

Server time this response was assembled (ISO 8601).

tickerstring

The symbol you asked for.

intervalstring

The bar size served.

countnumber

Bars returned in single-symbol mode; the number of SYMBOLS in bulk mode.

coveragestring

Why the page looks the way it does: `covered` when bars were found, `no_data` when the vendor has none for the window, `not_in_minute_tier` when a sub-hour interval was asked of a symbol the minute store does not carry.

next_cursorstring

Opaque token for the next page; `null` on the last page. Absent on bulk requests — page bulk symbol-by-symbol.

barsarray

OHLCV bars, chronological, in the compact array shape. Bulk requests key this by symbol instead.

200
Success — the response shape is documented under Returns above.
400
Invalid interval; no, malformed, or more than 50 symbols; invalid or contradictory range controls (asof with before-paging, before with cursor, from/to combined with either, from after to, or a malformed bound); a non-positive-integer limit; or an invalid cursor.
401
Missing or invalid API key.
  • Supports point-in-time (asof) and back-paging (before/limit). 1d and 1h cover the full universe with full history; sub-hour intervals cover the active universe and back-fill on demand. Pass a comma-separated symbol list for a bulk response keyed by symbol.
  • Bars keeps its own route alongside /v2/series on purpose: sub-hour intervals, fetch-on-miss coverage, and the compact chart-ready shape live here. To get OHLCV *joined with* indicator or flag columns on one grid, read series with columns=close,rsi_14,… instead.
  • Available at all intervals. The asof point-in-time param is unlimited-depth — see As-of queries.
  • Anonymously (the docs sandbox, no key) bars are scoped to the latest trading day: you get ONE bar whatever limit says, with a next_cursor to page back. A key lifts that — the same request then returns the full limit.
  • 1d/1h cover the full universe with full history. Sub-hour (1m/5m/15m/30m) covers the active universe; a symbol outside it is fetched from the provider on first request and served in the same call (transparent, capped at ~31 days per fetch).
  • 1s (1-second) bars are served on demand: from our store when present, otherwise passed through from the provider and served in the same call. Second data is not bulk-backfilled — it accumulates as it is requested. Best paired with a tight before+limit window. When the vendor pass-through is unavailable, the response says so: a note (single-symbol) / notes[symbol] (bulk) flags that the range came from the local store only and may be under-covered.
  • coverage is covered, no_data (universe-wide interval with nothing for the symbol), or not_in_minute_tier — a gap is always explicit, never a silent empty array.
  • Paging is before + limit, with cursor/next_cursor as sugar. Accepts epoch-ms or YYYY-MM-DD; bars come back oldest-first.
  • For an explicit historical window, pass from/to (inclusive; same bound semantics as series) and page inside it with cursor. from/to does not combine with asof (point-in-time) or before (tail-paging) — contradictory range controls are a 400, never a silent pick.
Bulk: 5-minute bars for several symbols
curl "https://api.tickerbot.io/v2/tickers/AAPL,MSFT/bars/5m?limit=2" \
  -H "Authorization: Bearer YOUR_KEY"
Response
{
  "as_of": "2026-08-11T22:47:23.948Z",
  "interval": "5m",
  "count": 2,
  "bars": {
    "AAPL": [ { "t": 1786487400000, "o": 304.975, "h": 304.984, "l": 304.955, "c": 304.975, "v": 890 },
              { "t": 1786487700000, "o": 304.975, "h": 304.975, "l": 304.975, "c": 304.975, "v": 2622 } ],
    "MSFT": [ { "t": 1786487400000, "o": 501.9,   "h": 501.9,   "l": 501.846, "c": 501.846, "v": 617 },
              { "t": 1786487700000, "o": 501.845, "h": 501.845, "l": 501.82,  "c": 501.82,  "v": 826 } ]
  },
  "coverage": { "AAPL": "covered", "MSFT": "covered" }
}