# GET /v2/tickers/{ticker}/history/{interval}

**Ticker history**

True series history for a ticker: pick up to 25 columns with `fields` and get one flat row per interval step — `{ "t": "2026-07-24", "price": 179.0, "rsi_14": 61.5, … }` — chronological, cursor-paged backward. This is the multi-column twin of [`/v2/signals/{signal}/{ticker}/history/{interval}`](/docs/endpoints/signals/history) (one column, many tickers of interest → that endpoint; many columns, one ticker → this one). Where a caller previously looped `?asof=` snapshots per date, one call here replaces the loop.

All-time on every plan — series history is never gated (the plan-gated capability is the `asof` point-in-time param, a different promise). Booleans come back as booleans, numerics as numbers; unknown columns are 400 `invalid_query`.

## Plan access

- **Plan access.** Included on every plan.
- **Rate limit.** Hobby 600/min · Pro 6,000/min · Scale 60,000/min.
- **History.** Series history is all-time on every plan. Point-in-time `asof` reaches back 30 days on Free, unlimited on every paid plan.

## Query / path parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `ticker` | path | string | yes | Ticker symbol. Example: `NVDA`. |
| `interval` | path | string | yes | Series granularity. Enum: `1m`, `1h`, `1d`. |
| `fields` | query | string | no | Comma list of columns (max 25). Default: price, day_change_pct, relative_volume, market_cap — intersected with the interval's schema, since the intraday tiers carry a subset of the daily columns (market_cap is daily-only). Example: `price,rsi_14,above_sma_200`. |
| `from` | query | string | no | Earliest timestamp (inclusive), `YYYY-MM-DD` or ISO. |
| `to` | query | string | no | Latest timestamp (inclusive), `YYYY-MM-DD` or ISO. |
| `limit` | query | integer | no | Rows per page. Max 1000. Default: `252`. |
| `cursor` | query | string | no | Opaque cursor from the previous response — pages older. |

## Status codes

- **200** — Envelope with `ticker`, `interval`, `fields`, `count`, `next_cursor`, and `series` — flat rows, chronological ASC.
- **400** — Bad interval/fields/bounds, or `invalid_query` for an unknown column.
- **401** — Missing or invalid API key.

## Sample response

```json
{
  "as_of": "2026-07-27T16:10:44.000Z",
  "ticker": "NVDA",
  "interval": "1d",
  "fields": ["price", "rsi_14", "above_sma_200"],
  "count": 141,
  "next_cursor": null,
  "series": [
    { "t": "2026-01-02", "price": 152.11, "rsi_14": 48.2, "above_sma_200": true },
    { "t": "2026-01-05", "price": 154.90, "rsi_14": 51.7, "above_sma_200": true },
    "(...)"
  ]
}
```

## Examples

### Price + RSI + trend flag, daily, year to date

Request:

```shell
curl "https://api.tickerbot.io/v2/tickers/NVDA/history/1d?fields=price,rsi_14,above_sma_200&from=2026-01-01" \
  -H "Authorization: Bearer YOUR_KEY"
```

Response (`200`):

```json
{
  "as_of": "2026-07-27T16:10:44.000Z",
  "ticker": "NVDA",
  "interval": "1d",
  "fields": ["price", "rsi_14", "above_sma_200"],
  "count": 141,
  "next_cursor": null,
  "series": [
    { "t": "2026-01-02", "price": 152.11, "rsi_14": 48.2, "above_sma_200": true },
    { "t": "2026-01-05", "price": 154.90, "rsi_14": 51.7, "above_sma_200": true },
    "(...)"
  ]
}
```

## Notes

- Minute (`1m`) and hourly (`1h`) series exist from each tier's backfill start and carry the intraday column subset; daily is the full-history, full-column tier.

---

Interactive sandbox + parameter editor: https://tickerbot.io/docs/endpoints/tickers/history-series
