# GET /v2/tickers/{ticker}?asof=

**As-of ticker**

Add `?asof=` to any ticker read and you get the whole wide row as it stood at that past moment — boolean flags, technical indicators, and the most-recent fundamentals known then. The point-in-time sibling of [As-of scan](/docs/endpoints/scan/asof) and [As-of matches](/docs/endpoints/signals/asof): the same staleness rule and the same plan window everywhere.

For a ticker's values *over time*, use [Ticker history](/docs/endpoints/tickers/history-series) instead — asof answers "what did the row look like at t", history answers "how did it evolve".

(A second spelling, `GET /v2/tickers/{ticker}/history?asof=`, returns the identical response — use whichever reads better in your code.)

## 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: `AAPL`. |
| `asof` | query | string | yes | Target moment as `YYYY-MM-DD` or full ISO timestamp `YYYY-MM-DDTHH:MM:SSZ`. A date returns the row at the close of that day; a timestamp returns the row at that moment — minute-level where available; `_meta.resolution` reports the granularity served. The response returns the most-recent snapshot within the staleness window (14 days for daily) — the SAME rule as `/v2/scan?asof=` and `/v2/signals/{signal}?asof=`, unified 2026-07-27: asof means "the state AT that instant" everywhere. A ticker with no fresh-enough state (delisted, data gap) 404s with `last_available` and a pointer at the series endpoint for "last known state". Plan window: Free reaches back 30 days; every paid plan is unlimited (`403 asof_tier_required` beyond the window). Example: `2026-03-01`. |

## Status codes

- **200** — Wide row at the requested date under `data`. `_meta.frozen_fields` lists fields that are not historized (sector, industry, etc.; JOIN to /tickers/{t} for current values).
- **400** — `bad_request` — `asof` missing or not `YYYY-MM-DD` / `YYYY-MM-DDTHH:MM:SSZ`.
- **401** — Missing or invalid API key.
- **404** — `not_found` — the ticker has no historical state at or before the requested date.

## Sample response

```json
{
  "as_of": "2026-03-01",
  "ticker": "AAPL",
  "_meta": {
    "resolution": "daily",
    "frozen_fields": ["name", "sector", "industry", "asset_type", "exchange"]
  },
  "data": {
    "ticker": "AAPL",
    "date": "2026-02-27",
    "price": 271.43,
    "day_change_pct": 0.0092,
    "volume_today": 38104000,
    "rsi_14": 64.7,
    "above_sma_50": true,
    "pe_ratio": 31.2,
    "eps": 9.04,
    "...": "(full daily row)"
  }
}
```

## Examples

### AAPL as of 2026-03-01

Request:

```shell
curl "https://api.tickerbot.io/v2/tickers/AAPL/history?asof=2026-03-01" \
  -H "Authorization: Bearer YOUR_KEY"
```

Response (`200`):

```json
{
  "as_of": "2026-03-01",
  "ticker": "AAPL",
  "_meta": {
    "resolution": "daily",
    "frozen_fields": ["name", "sector", "industry", "asset_type", "exchange"]
  },
  "data": {
    "ticker": "AAPL",
    "date": "2026-02-27",
    "price": 271.43,
    "day_change_pct": 0.0092,
    "volume_today": 38104000,
    "rsi_14": 64.7,
    "above_sma_50": true,
    "pe_ratio": 31.2,
    "eps": 9.04,
    "...": "(full daily row)"
  }
}
```

## Notes

- Replayable history on every plan. A missing or malformed `asof` returns `400 bad_request`; a date with no fresh-enough state returns `404 not_found` with `last_available` — the row must be within the staleness window (14 days for daily), the same rule as every other asof surface (unified 2026-07-27).
- The returned `data.date` may be earlier than the requested `asof` (weekend/holiday/gap) — it is the latest daily state within the window on or before that date. See the example: `asof=2026-03-01` (a Sunday) returns the `2026-02-27` row.
- `frozen_fields` are not historized; they're snapshots of the *current* value. The other fields are correct as of the requested date.

---

Interactive sandbox + parameter editor: https://tickerbot.io/docs/endpoints/tickers/asof
