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

# API Changelog - Updates, Features & Breaking Changes

> OddsPapi API changelog. New features, improvements, bug fixes, and breaking changes. Track WebSocket and REST API updates for sports betting data integration.

We continuously improve the Odds API.
This page lists **new features**, **changes**, **fixes**, and **breaking changes**.

<Note>
  All timestamps are UTC.
  If a change affects data shape or behavior, it will be marked as **Breaking**.
</Note>

***

## 2026-05-25

### ✨ Added

* **WebSocket `receiveType: "zstd"` — dictless compression.** Opt-in zstd egress with **no dictionary handling**: every data frame is a standalone dictless zstd frame (`dictId 0`), decoded in one line (`zstd.decompress(frame)` → JSON). \~5–6× smaller than JSON on `odds` — the simplest way to cut bandwidth. See [Compression](/websocket/compression).
* **WebSocket `receiveType: "zstd-dict"` — trained dictionaries.** Maximum ratio (\~7–9× on `odds`) using per-channel dictionaries the server pushes as `dict` control frames at connect.

### 🔁 Changed

* **`receiveType: "zstd"` now means dictless.** During the zstd beta, `"zstd"` previously delivered trained dictionaries; that behavior moved to the new `"zstd-dict"`. If you were decoding dictionary frames under `"zstd"`, switch to `"zstd-dict"`.
* **Dictionary version cache removed.** The `dicts` login field is gone; the server now re-sends the (\~32 KB) dictionaries on every `zstd-dict` connection, so clients no longer persist or version dictionaries across reconnects. A `dicts` field, if still sent, is ignored.

***

## 2026-04-09

### ✨ Added

* **Fixture view: `venue` section** — new nested object on all fixture responses with `venueId`, `venueName`, and `venueLocation`. Translated per language.
* **Fixture view: `clock` section** — new nested object on all fixture responses with `currentPeriod`, `currentTime`, `remainingTime`, `remainingTimeInPeriod`, and `stopped`. All keys present with `null` values until clock data is populated for a fixture.
* **Fixture view: `participant1ShortName` / `participant2ShortName`** — new fields in the `participants` section of fixture responses, sourced from translated participant data.
* **Fixture view: `seasonRound`** — new field in the `season` section of fixture responses.
* **Futures view: `marketId`** — the `market` section in future responses now includes the `marketId` from the futures table. Name fields (`marketName`, `marketType`, `playerMarket`, `participantMarket`) remain `null` for now.
* **Participants endpoint: `participantShortName`** — the `GET /{lang}/participants` response now includes `participantShortName` for each participant.
* New REST endpoint: **`GET /{lang}/venues?venueIds=...`** — returns venue data with translated `venueName` and `venueLocation`.
* New WebSocket channel: **`clocks`** — delivers live clock updates per fixture (same routing as `scores`: filtered by `fixtureId`, sport, tournament). Supports resume/replay.

### ⚠️ Breaking

* **Fixture response shape changed** — all fixture endpoints (REST and WebSocket) now include three new top-level keys: `venue` (object), `clock` (object), and updated `participants` / `season` sections. Clients parsing fixture responses strictly should update their models.
  * `season` now includes `seasonRound: integer | null`
  * `participants` now includes `participant1ShortName: string | null` and `participant2ShortName: string | null`
  * `venue: { venueId, venueName, venueLocation }` added after `season`
  * `clock: { currentPeriod, currentTime, remainingTime, remainingTimeInPeriod, stopped }` added after `scores`
* **Future response shape changed** — `market.marketId` is now populated (integer or null) instead of always `null`.

***

## 2025-12-12

### ✨ Added

* WebSocket **resume & replay** support using `entryId` cursors
* New WebSocket channels:
  * `injuries`
  * `lineups`
  * `stats`
* AsyncAPI 3.0 reference for WebSocket gateway

### 🔧 Improved

* Reduced WebSocket latency for `odds` and `scores`
* Better filtering for `sportIds`, `tournamentIds`, and `bookmakers`

### 🐛 Fixed

* Fixed an issue where some `odds` updates were delivered without bookmaker gating
* Fixed incorrect `live` flag on some fixtures during transitions

***

## 2025-11-28

### ⚠️ Breaking

* `odds.payload.odds` keys are now **always bookmaker-scoped**
  * Old clients expecting a flat structure must update

### ✨ Added

* Support for `receiveType: "binary"` (MessagePack)
* Added `entryId` to all update messages

***

## 2025-11-10

### ✨ Added

* Initial WebSocket gateway
* Channels:
  * `fixtures`
  * `scores`
  * `odds`
  * `bookmakers`
