# Deprecations

What is deprecated, what replaces it, and when it may stop. Each deprecated route also says so on every response, in headers.

## How a deprecation works

A deprecated route keeps serving identical responses until its sunset date, and every response carries `Deprecation` (the date it was deprecated), `Sunset` (the earliest date it may stop) and `Link` (the successor, and this page). After the sunset date we check who still calls it, then switch it to a permanent `410 Gone` that points at the successor. Nothing turns off on a timer. Each successor is a strict superset, so migrating is a URL change.

## Sunsetting

On 2026-10-31: six legacy reads and one field.

| Deprecated route | Use instead | What changes |
|------------------|-------------|--------------|
| `GET /v2/tickers/{ticker}/history/{interval}` | [`/v2/series?ticker=X`](/docs/endpoints/series/get) | Same data plus multi-ticker alignment, OHLCV columns, `1w`/`1q` intervals, and `transitions_only`. |
| `GET /v2/signals/{signal}/{ticker}/history/{interval}` | [`/v2/series?ticker=X&columns=<signal>`](/docs/endpoints/series/get) | One signal is one `columns` value on series — same values, and you can pull several signals in one call. |
| `GET /v2/tickers/{ticker}/events` | [`/v2/events?ticker=X`](/docs/endpoints/events/query) | The full timeline: adds analyst actions plus opt-in signal firings and news, queryable by payload. |
| `GET /v2/analyst/events` | [`/v2/events?kind=analyst`](/docs/endpoints/events/query#kind-analyst) | Same rows from the unified stream; `firm` and `action` are real filters there. |
| `GET /v2/tickers/{ticker}/history?asof=` | [`/v2/tickers/{ticker}?asof=`](/docs/endpoints/tickers/get) | Nothing — it was a second spelling of the as-of read, and the canonical URL returns the byte-identical response. |
| `GET /v2/signals/{signal}/{ticker}/events` | [`/v2/events?kind=signal&signal=X&tickers=Y`](/docs/endpoints/events/query#kind-signal-firings) | The same rows as enter/exit point-events; `merge_gap_seconds` there merges runs the same way. An open run has no exit yet. |

Migration notes for the two history reads: https://tickerbot.io/docs/endpoints/tickers/history-series.md and https://tickerbot.io/docs/endpoints/signals/history.md; for the as-of alias the migration is the one-line URL swap above.

One field on the same date: `minute_tier` on `GET /v2/tickers/{ticker}/coverage` is still returned unchanged until 2026-10-31, then removed. It named an internal roster; sub-hour bars are available for every active symbol regardless of it.

## Retired

None yet. The first sunset is 2026-10-31.
