# GET /v2/tickers/{ticker}/coverage

**Ticker coverage**

For one ticker, what we hold and how far back — so an empty result is never ambiguous.

## Query / path parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `ticker` | path | string | yes | Case-insensitive. Equities are bare symbols (`AAPL`); every other class carries a prefix — rates (`R:SOFR`), crypto (`X:BTCUSD`), fx (`X:EURUSD`). Bare `BTC`/`ETH` are US-listed ETFs, not spot crypto. See [Tickers](/docs/tickers). Example: `AAPL`. |

## Returns

- `as_of` (string) — Server time this response was assembled (ISO 8601).
- `ticker` (string) — The symbol you asked for.
- `name` (string) — Company or instrument name.
- `minute_tier` (object) — Whether this ticker is in the minute tier (`included`) and its `rank` within it. `included:false` is NOT "no intraday data": the object then carries `on_demand: true`, `first_call_latency` (`"3-10s"`) and `window_days` (31) — sub-hour bars for the symbol are fetched from the provider on first request and stored, so the first call is slow and later ones are sub-second.
- `spans` (object) — Per resolution — `oldest`, `newest`, `rows`.
- `measured_fields` (array) — Per-field measured depth where the backfill engine has probed — `field`, the grain it was measured at (`daily`, `hourly`, `minute`), `first_date`, `last_date`, `pct_complete`. Capped at 1500 rows.

## Status codes

- **200** — Success — the response shape is documented under Returns above.
- **400** — `bad_request` — malformed ticker symbol (a single symbol is required).
- **404** — `not_found` — the ticker is not in the universe.

## Sample response

```json
{
  "as_of": "2026-08-11T21:01:27.441Z",
  "ticker": "AAPL",
  "name": "Apple Inc.",
  "minute_tier": { "included": true, "rank": 9 },
  "spans": {
    "bars":   { "oldest": "2003-09-10T00:00:00.000Z", "newest": "2026-08-11T00:00:00.000Z", "rows": 5766 },
    "daily":  { "oldest": "2003-09-10T00:00:00.000Z", "newest": "2026-08-10T00:00:00.000Z", "rows": 5765 },
    "hourly": { "oldest": "2003-09-10T14:00:00.000Z", "newest": "2026-06-12T20:00:00.000Z", "rows": 39977, "measured_at": "2026-07-11T13:23:46.704Z" },
    "minute": { "oldest": "2003-09-10T12:00:00.000Z", "newest": "2026-07-13T23:49:00.000Z", "rows": 3738771, "measured_at": "2026-07-14T02:53:38.258Z" }
  },
  "measured_fields": [
    { "field": "large_cap", "tier": "daily", "first_date": "2010-02-16T00:00:00.000Z", "last_date": "2026-07-20T00:00:00.000Z", "pct_complete": 1 },
    { "field": "mega_cap",  "tier": "daily", "first_date": "2010-02-16T00:00:00.000Z", "last_date": "2026-07-20T00:00:00.000Z", "pct_complete": 1 },
    "… (one row per measured field)"
  ]
}
```

## Notes

- Reports per-resolution data spans (bars, daily, hourly, minute), whether the ticker is in the minute tier, and per-field measured depth wherever the backfill engine has probed.
- Hourly and minute spans come from a periodic measurement, so the response carries `measured_at`. Bars and daily spans are computed live.
- **Untiered is not uncovered.** `minute_tier.included:false` means the symbol is not in the pre-loaded minute tier — [`/v2/bars/{ticker}/{interval}`](/docs/endpoints/bars/get) still serves its `1m`–`1h` bars, fetched from the provider on demand: the first call for a symbol takes ~3–10s and fills up to 31 days ending at `to`/`before`/now; later calls are sub-second; page further back with `next_cursor`. The object says so (`on_demand`, `first_call_latency`, `window_days`) so a slow first call is never mistaken for a gap. A `minute` span may be absent here until that first fetch has happened.

---

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