> ## Documentation Index
> Fetch the complete documentation index at: https://docs.therundown.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Recent updates, new features, and improvements to TheRundown API.

## 2026

### September 2026

* **MLB Playoffs sport ID** -- MLB Playoffs / postseason events now flow under a dedicated sport ID `31`, separate from the MLB regular season (`3`). This follows the same pattern used for MLB Spring Training (`30`). See [Sports & Coverage](/reference/sports).
* **Circa Sports, Heritage Sports, BookMaker, BetCRIS, and Bet105 out of beta** — Circa Sports (`32`), Heritage Sports (`34`), BookMaker (`7`), BetCRIS (`9`), and Bet105 (`33`) have graduated from `beta` to `healthy` and are included when filtering with `affiliate_ids`. The published roster on `GET /api/v2/affiliates` now reports `status: healthy` for every listed book. See [Sportsbook IDs](/reference/sportsbooks).
* **ProphetX and Novig out of beta** — ProphetX (`29`) and Novig (`30`) have graduated from `beta` to `healthy` and are included when filtering with `affiliate_ids`. See `GET /api/v2/affiliates` and [Sportsbook IDs](/reference/sportsbooks).
* **Polymarket US** — Polymarket US is now available as affiliate ID `31` with `status: healthy` and is included when filtering with `affiliate_ids`. Availability varies by sport and market. See `GET /api/v2/affiliates` and [Sportsbook IDs](/reference/sportsbooks).
* **Pinnacle max stake on `liquidity_usd`** — For Pinnacle (affiliate `3`), `liquidity_usd` on V2 price objects now surfaces the book's max stake. Kalshi and Polymarket keep the existing order-book depth meaning. The field is omitted when unavailable. See the [FAQ](/faq) and the [Price object reference](/reference/data-model#price-object).
* **NHL Preseason sport ID** — NHL Preseason events now flow under a dedicated sport ID `27`, separate from the NHL regular season (`6`). This follows the same pattern used for NFL Preseason (`25`). See [Sports & Coverage](/reference/sports).
* **Included data points raised 5× on all paid tiers** — Monthly allowances increased at no price change: Starter 25M, Pro 125M, Ultra 500M, Super 1.25B, Mega 2.5B, and Max 12.5B data points per month. Weekly allowances increased proportionally. Overage rates, burst limits, data delays, and the Free tier are unchanged. See [Rate Limits](/rate-limits).
* **Scores, results, and limits documented** — The new [Scores and Results guide](/guides/scores-and-results) covers per-period scores, overtime, half-score calculations, and validation before grading. Period sums matching final totals are documented as observed behavior, not an enforced guarantee. [Rate Limits](/rate-limits) now explains the per-event data-point cost, completed-results sweeps, and the history window for dated requests.
* **Main-line flag on price history** — Every row from `GET /api/v2/events/{eventID}/markets/history` and `GET /api/v2/markets/history` now carries `is_main_line`, and chart points from `GET /api/v2/events/{eventID}/markets/{marketID}/history` carry `l` (line value) and `m` (main-line flag). All three accept `main_line=true` to return only rows that were the main line when written, so a spread moving from `-3.5` to `-4.5` is visible as the flag leaving one line and arriving on the other at the same timestamp. The documented `change_type` values now match what the API returns (`price`, `open`, `close`, `reopen`, `main_line`, plus `current` when no history rows exist yet for a requested line ID). See [Tracking main-line moves](/guides/historical-odds#tracking-main-line-moves).
* **New-account stats access** — Accounts created on or after `2026-09-07T18:00:00Z` follow the new stats matrix: Free includes the catalog, fixed sample, and a seven-day current-season evaluation; Starter adds current-season completed-game boxes and season aggregates; Pro adds available prior-season archives; and Ultra adds live REST event boxes and stats streaming. Accounts created before the cutoff retain their existing legacy stats access. See [Stats Access](/guides/stats-access).
* **Sportsbook documentation expanded** — BookMaker (`7`), BetCRIS (`9`), Circa Sports (`32`), Bet105 (`33`), and Heritage Sports (`34`) are included with their canonical names in current roster guidance and API examples. Availability varies by source, sport, and market. Earlier changelog entries use the former display names Hard Rock Bet for HardRock (`28`) and Sportsbetting for SportsBetting (`4`); each pair refers to the same affiliate ID. Discover the current roster and integration status through `GET /api/v2/affiliates`, and see [Sportsbook IDs](/reference/sportsbooks) for the canonical names and IDs.

### August 2026

* **Futures listing page metadata** — `GET /api/v2/sports/{sportID}/futures` responses now carry `meta.count` (events on this page), `meta.has_more` (whether another page exists), and `meta.total` (events matching your filters across all pages), so one call tells you the size of a listing without walking every page. `meta.next_cursor` is unchanged: present while more pages exist, absent on the last page. See the [Futures guide](/guides/futures#paging-with-cursors).
* **Free-tier monthly usage cap** — Free API keys now have two usage windows: `20,000` data points per UTC day and `200,000` per UTC calendar month. Reaching either cap returns `429` until that window resets. Free responses retain the daily `X-Datapoints-*` headers and add `X-Datapoints-Monthly-Used`, `X-Datapoints-Monthly-Remaining`, `X-Datapoints-Monthly-Limit`, and `X-Datapoints-Monthly-Reset` so both windows are visible. Starter removes the daily cap and includes a monthly allowance, currently published paid-tier sources, live odds, player props, and supported periods. See [Rate Limits](/rate-limits) for current allowances.
* **Expanded live game state now available on all Ultra plans and higher** — The sport-specific blocks on `live_game_state` are no longer limited to a preview audience. Football events carry `down`, `distance`, `yard_line`, `possession_team_id`, `is_red_zone` and each side's remaining timeouts; basketball and hockey carry their own situation blocks; and `last_play` is included alongside them. Play entries gain `team_id`, `scoring_play`, `score_value`, player `participants` where attribution is available, and football extras (`start_yard_line`, `end_yard_line`, `stat_yardage`, `drive_description`). `live_game_state.sport` now returns a real slug (`nfl`, `nba`, `soccer`, …) for every sport rather than only MLB. All fields are omitted when unavailable, so this is additive. See the new [Live Game State reference](/reference/live-game-state).
* **Live Game State reference published** — Field-level documentation for the in-game state surface and the play-by-play timeline: the clock fields and how to read `clock_as_of`, the per-sport situation blocks, play object fields and common football play types. Includes two behaviors worth knowing: order the play timeline by `sequence` rather than `occurred_at`, and use `down_distance_text` for football field position, since it is the only field that identifies whose side of the field the ball is on. See [Live Game State](/reference/live-game-state).
* **Event status values are sport-specific** — The [Event Statuses](/reference/event-statuses) page now states this explicitly. A soccer match in play reports `STATUS_FIRST_HALF` where tennis reports `STATUS_IN_PROGRESS`, so a status set observed on one sport should not be assumed for another. For detecting period transitions, `live_game_state.period` plus the clock fields is the more portable signal.
* **ProphetX and Novig live (beta)** — The two peer-to-peer exchanges announced earlier this month are now queryable: ProphetX as affiliate ID `29` and Novig as `30`. Both report `status: beta` on `GET /api/v2/affiliates` while coverage ramps, and are included when filtering with `affiliate_ids`. See [Sportsbook IDs](/reference/sportsbooks).
* **Polymarket source-ID mapping documented** — Every Polymarket price's `source_id` encodes the Polymarket event slug, Gamma market ID, and CLOB token ID, so one Gamma API call maps our rows to Polymarket's own `slug`/`conditionId` — and the event-level `affiliate_source_ids["26"]` is the Polymarket event slug. The recipe with a worked example is now in the [Source identifiers reference](/reference/sportsbooks#source-identifiers-mapping-to-a-books-own-data).
* **Main-line-only WebSocket subscriptions** — `main_line: true` on a `markets` or `futures` subscription (or `?main_line=true` on `/api/v2/ws/markets`) now filters the **live delta stream** to main-line rows, matching the REST parameter and the existing snapshot behavior. You receive every price move and close of each current main; alternate-ladder updates are neither delivered nor metered. Pair with a periodic REST refresh (`main_line=true`) when you need the authoritative current main at any instant. See the [WebSocket reference](/api-reference/v2/websocket).
* **Half & live market-ID guidance** — The [Market IDs reference](/reference/markets) now documents the first-half (`4,5,6`) and second-half (`1010,1009,1008`) markets with their lifecycle (the second-half markets are the halftime lines), and clarifies that live full-game rows arrive under the in-play IDs (`41,42,43`): requests for `1,2,3` include them automatically, but frames keep the in-play IDs — match on both families.
* **Hard Rock Bet out of beta** — Hard Rock Bet (`28`) has graduated from `beta` to `healthy` and is included when filtering with `affiliate_ids`.
* **Liquidity on prediction-market prices** — V2 price objects for Kalshi and Polymarket now include `liquidity_usd`, an approximate USD reading of resting order-book depth. It appears on supported event detail, sport/date listings, comparisons, and WebSocket market frames. The field is omitted when unavailable, including for traditional sportsbook prices, and follows the plan requirements of each surface. It travels with price updates and does not by itself indicate price movement. See the [FAQ](/faq) and the [Price object reference](/reference/data-model#price-object).
* **Futures & outrights (early access)** — New `GET /api/v2/sports/{sportID}/futures` endpoint serving championship and tournament-winner competition events in the standard V2 market shape, priced across tracked sportsbooks. Competitions are interval events (`event_date` start, `settle_by` settlement horizon) with per-market `settlement` state once graded; date filtering uses interval overlap and paging is cursor-based. Live now for NFL, MLB, NCAAF, NHL, NBA, NCAAB, WNBA, EPL, PGA Tour golf (new sport ID `40`, including Top 5/10/20 Finish, Make The Cut, and First Round Leader markets), and Formula 1 season championships (new sport ID `41`). Price changes flow through the existing `/api/v2/markets/delta` feed — pass futures market IDs (e.g. `1141`) explicitly, as they are not in the delta default set. Early access on **Ultra plans and higher**; coverage is expanding. See the [Futures guide](/guides/futures).

### July 2026

* **Real-time game stats WebSocket** — Live team and player box-score changes now stream as row-level deltas on the new `stats` channel of the [multiplexed V2 WebSocket](/guides/multiplexed-websocket), and the combined `live` channel includes the same `game_stats` frames. Stat changes now stream at play latency — typically within a few seconds of the corresponding play-by-play update — instead of the previous roughly five-minute refresh path. Like all live game data, stats trail the on-field action by roughly 15–20 seconds, in line with the typical broadcast delay. Available on Ultra plans and higher; each changed stat row counts as one stats data point.
* **Richer game-stat context** — Team game-stat responses now identify the canonical home and away sides with `team.is_home` and `team.is_away`. MLB game stats also distinguish the starting pitcher (`startingPitcher`) from a position player used as a pitcher (`positionPlayerPitching`); discover their current IDs through `GET /api/v2/stats` rather than hard-coding them.
* **MLB doubleheader and makeup metadata** — Event schedule objects now expose `game_number` for true doubleheaders and `game_type` (`doubleheader`, `makeup`, or `doubleheader_makeup`), so integrations no longer need to parse event headlines.
* **Self-service downgrades** -- You can now schedule a plan downgrade from your dashboard. Downgrades take effect at the end of the current billing period — you keep your current tier until then, nothing extra is charged, and a scheduled downgrade can be canceled any time before it applies.
* **Sportsbook source IDs** -- V2 event responses now include `affiliate_source_ids` (each sportsbook's own identifier for the event), and price objects include `source_id` where the book exposes one. Useful for deep-linking and joining against sportsbook-keyed datasets.
* **NFL Preseason and NBA Summer League** -- 2026 NFL Preseason events now flow under a dedicated sport ID `25`, separate from the NFL regular season (`2`). NBA Summer League is live again under sport ID `32`, as in previous seasons.

### June 2026

* **Live game state and play-by-play — Ultra tier and above** -- New real-time game-state data, available exclusively on **Ultra plans and higher**. Live event payloads embed a `live_game_state` snapshot (current inning/quarter, balls-strikes-outs and base runners for MLB, down & distance for football, possession and power-play detail for other sports), and the new `GET /api/v2/events/{eventID}/plays` endpoint returns the full play-by-play timeline with running scores. Plays also stream in real time via the new `plays` channel on the V2 WebSocket. Coverage spans MLB, NBA (including Summer League), WNBA, NCAAB, NFL, NCAAF, NHL, and soccer, with per-play player attribution rolling out progressively.
* **Included data points raised 2.5x on all paid tiers** -- Monthly allowances increased at no price change. Overage rates, burst limits, and data delays were unchanged. See [Rate Limits](/rate-limits) for current allowances.
* **Weekly billing plans** -- Every paid API tier is now available on a weekly billing cadence at a premium over monthly — useful for covering a single tournament or a stretch of a season. Weekly plans include a proportional weekly share of the tier's monthly allowance, metered over the 7-day billing window; the `X-Datapoints-Period` header reads `weekly` on these plans. See [Weekly Billing](/rate-limits#weekly-billing).
* **Player props now require Starter or higher** -- Player prop markets are included on all paid plans starting at Starter, and are no longer returned on Free keys.
* **`event_status` include filter** -- New query parameter on V1 and V2 sport/date event, openers, and closing endpoints. Pass `event_status=STATUS_IN_PROGRESS,STATUS_HALFTIME` (comma-separated) to receive only events in the listed statuses. Complements `exclude_status`, and is applied before it when both are present.
* **`market_ids` capped at 12 per request** -- REST market endpoints now return a `400` when more than 12 market IDs are requested (previously extra IDs were silently ignored). Split larger requests into batches of 12, or omit the parameter: odds endpoints default to the core markets, and market-definition endpoints return all available definitions.
* **3-Way Result (563) in default markets for soccer and NHL** -- Soccer leagues and NHL now default `market_ids` to `1,2,3,563`. The soccer 3-way moneyline (home/draw/away) is served on market `1` as three participants, matching long-standing V1 behavior; market `563` carries the NHL 60-minute (regulation-time) line.
* **`is_main_line` on the markets delta feed** -- Delta entries now always include `is_main_line`, so main-line switches can be tracked from the delta feed alone without refetching snapshots.
* **Upgrade hints on `429` responses** -- Rate-limit and data-point-cap responses now include `upgrade_url` and `upgrade_message` fields alongside the existing `error`, `limit`, and `Retry-After` information.
* **Affiliate `status` field** -- The `GET /api/v2/affiliates` (and `/api/v2/sportsbooks`) response now includes a `status` for each sportsbook: `healthy` (live and verified), `unhealthy` (the feed is currently degraded or down), or `beta` (a new integration whose coverage we are still verifying). Use it to surface book health in your UI or to skip beta books in production. Treat unrecognized values as unknown — new statuses may be added without notice, so don't hard-code the set on the client side.
* **Affiliate `regions` now opt-in** -- `GET /api/v2/affiliates` returns the `regions` array only when you pass `include=regions`. The default response omits it; add the parameter if your integration reads region data.
* **FIFA World Cup 2026 coverage** -- Broad market coverage for the World Cup (sport ID `18`) across tracked sportsbooks, including 1X2, asian handicap, totals and first-half totals, both-teams-to-score, correct score, winning margin, goalscorer props, corners, and cards.

### May 2026

* **ATP and WTA Tennis leagues** -- Added ATP Tennis (sport ID `38`) and WTA Tennis (sport ID `39`) as first-class leagues. Full-match tennis markets use full-game periods (`0` prematch, `7` live); set-specific markets use period IDs to distinguish Set 1 and Set 2, including prematch Set 1/Set 2 (`3`/`4`) and live Set 1/Set 2 (`15`/`16`).
* **Hard Rock Bet affiliate** -- Hard Rock Bet is now available as affiliate ID `28` in beta, with coverage across NBA, WNBA, MLB, NHL, NFL, soccer, tennis, and UFC including player props and live markets. Coverage is expanding while the integration matures.
* **Event stats correlation** -- Event stats responses include `meta.event_id` for easier correlation.

### April 2026

* **theScore Bet affiliate** -- theScore Bet is now available as affiliate ID 24, providing moneyline, spread/runline/puckline, and total markets for NBA, MLB, and NHL (prematch and live). Expanded coverage of additional supported markets is in progress.
* **In-play coverage for LowVig, BetOnline, and Sportsbetting** -- LowVig (11), BetOnline (6), and Sportsbetting (4) now stream live in-play lines across the V2 market catalog, including player props, team props, and alternate lines. Additional market coverage for these books is in progress.

### March 2026

* **Live market variants now default** -- V2 event endpoints now return live moneyline, spread, and total (IDs 41, 42, 43) alongside the standard prematch markets by default. Integrations that pass explicit `market_ids` are unaffected.
* **Faster live score updates** -- Live score data now reflects in-game changes much faster. The `score` object on event responses — including `event_status`, `display_clock`, `game_period`, and current scores — updates more frequently during live games.
* **Ultra tier latency improvements** -- Ultra tier subscribers now receive WebSocket price updates in real time with no batching delay. REST endpoints for Ultra tier also return fresher data.

### February 2026

* **`exclude_status` parameter** -- New query parameter for V1 and V2 event endpoints. Pass `exclude_status=STATUS_POSTPONED,STATUS_CANCELED` (comma-separated) to filter out postponed and canceled games before they reach your application.
* **`delta_last_id` bootstrap** -- V2 markets responses now include `meta.delta_last_id`, a starting cursor for delta polling. Use it to initialize `/api/v2/markets/delta` immediately after a snapshot without missing updates.
* **Subscription plan headers** -- V2 responses now include headers that surface your subscription tier, rate limits, allowed bookmaker IDs, and active feature flags. Useful for building adaptive clients and debugging plan entitlements.
* **`Retry-After` headers on rate limit responses** -- All `429 Too Many Requests` responses now include a `Retry-After` header indicating when you may retry.
* **MLB Spring Training migration** -- MLB Spring Training events have been migrated from sport ID `3` to a dedicated sport ID `30`, isolating preseason games from the regular season. This follows the same pattern used for NBA Summer League (32) and other season-specific sport IDs. If you consume spring training data, update your integration to query sport ID `30`.
* **OpenAPI spec published** -- Full [OpenAPI 3.1 specification](https://docs.therundown.io/openapi.yaml) now available for automated client generation and tooling integration.
* **Market 553 deprecated — use market 410** -- The `any_time_goal_scorer` market (ID 553) has been consolidated into the `to_score` market (ID 410). Market ID 553 will no longer return data. Update integrations that query market 553 to use market 410 instead.

### January 2026

* **V2 Markets WebSocket** -- New `wss://therundown.io/api/v2/ws/markets` endpoint for real-time market and price updates, replacing the legacy V1 WebSocket. Supports granular filtering by sport, market, event, and affiliate.
* **`price_delta` field** -- Pass `include=price_delta` on V2 event endpoints to receive the previous price and direction of change alongside current odds. Useful for animating line movement on page load.
* **`live_variant_id` field** -- Market objects now include a `live_variant_id` mapping prematch markets to their live equivalents, enabling seamless prematch-to-live market switching.

## 2025

### Q4 2025

* **Player prop markets expansion** -- Added combo prop markets: PRA (93), Points + Assists (99), Points + Rebounds (297), Rebounds + Assists (298). Added live player prop markets for points (90), assists (91), three-pointers (92), rebounds (982), blocks (983), and turnovers (984).
* **Market line price history** -- New `GET /api/v2/events/{eventID}/markets/history` and `GET /api/v2/events/{eventID}/markets/{marketID}/history` endpoints for full price history with RFC 3339 time range filtering. Opening and closing line endpoints added at `/openers` and `/closing`.

### Q3 2025

* **V2 markets delta endpoint** -- `GET /api/v2/markets/delta` returns only markets that have changed, providing a more efficient alternative to full event polling.
* **Team totals market** -- Market ID 94 added for individual team over/under totals.
* **Kalshi affiliate** -- Added Kalshi (affiliate ID 25) to tracked sportsbooks.

### Q2 2025

* **V2 API general availability** -- The V2 market-based data model is now the recommended API version. V1 remains available but new features are V2-only.
* **Alternate lines support** -- V2 events endpoint returns main and alternate lines. Use `main_line=true` to filter to primary lines only.
* **Period-based markets** -- Markets now include `period_id` for half, quarter, and period-specific odds.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.