> ## 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更新日志 - 更新、功能和重大变更

> OddsPapi API更新日志。新功能、改进、错误修复和重大变更。跟踪WebSocket和REST API更新以进行体育博彩数据集成。

我们持续改进Odds API。
此页面列出**新功能**、**变更**、**修复**和**重大变更**。

<Note>
  所有时间戳均为UTC。
  如果变更影响数据形状或行为，将标记为**重大变更**。
</Note>

***

## 2026-10-01

下文中与盘口相关的全部内容——新增的 `marketType`、各项重命名、`period` 变更——
都**仅是数据变更**。没有任何端点、字段或类型发生改变，且全部通过
`GET /markets`（以及 `GET /fixtures/markets`）提供。
在该日期当天或之后重新拉取一次目录即可保持最新；赔率载荷本身不受影响，
只是会开始携带新的 `outcomeId`。

### 新增

* **`GET /{lang}/fixtures/odds/parlay`** — 根据一组 `oddsIds` 计算串关赔率，可跨赛事与运动项目。参见[串关与 SGP](/zh/api-reference/parlays)。
* **`GET /{lang}/fixtures/odds/sgp`** — 计算带**相关性**的同场串关，由博彩公司报价。`price` 体现相关性，`singlesPrice` 为简单乘积。
* **两个新端点上的 `missingOddsIds`** — 列出未能找到的已请求各关，因此空的部分不会产生歧义。
* **所有端点支持 `X-API-Key` 请求头认证**，与 `apiKey` 查询参数并存。请只使用其中一种。参见[认证](/zh/api-reference/authentication)。
* **新增 64 个电竞 `marketType` 取值**和 568 个 `marketType` × `period` 组合——覆盖 Counter-Strike、League of Legends、Dota、Valorant 和 Rainbow Six 的目标类、首个目标与连杀盘口。地图级盘口归入新的 `sportId` **83**（电竞无尽对决 Mobile Legends）。
* **新增 195 个 `period` 键**，全部为子赛段网格——`p1r1` … `p5r36`（地图内的回合）与 `p1g2` … `p5g6`（网球）。词汇表从 19 个取值增长到 213 个，并保持仅追加。

<Accordion title="全部 64 个新增 marketType">
  **电竞目标的总分 / 让分 / 单队总分** — `totals-kills`、`totals-towers`、`totals-turrets`、`totals-dragons`、`totals-barons`、`totals-roshans`、`totals-inhibitors`、`totals-barracks`、`totals-rounds`、`totals-headshots`、`spreads-kills`、`spreads-towers`、`spreads-turrets`、`spreads-dragons`、`spreads-roshans`、`spreads-inhibitors`、`spreads-barracks`、`spreads-rounds`、`teamtotals-kills-team1`/`-team2`、`teamtotals-towers-team1`/`-team2`、`teamtotals-turrets-team1`/`-team2`、`teamtotals-dragons-team1`/`-team2`、`teamtotals-barons-team1`/`-team2`、`teamtotals-roshans-team1`/`-team2`、`teamtotals-inhibitors-team1`/`-team2`、`teamtotals-barracks-team1`/`-team2`、`teamtotals-rounds-team1`/`-team2`

  **首个目标** — `firstblood`、`firsttower`、`firstbaron`、`firstroshan`、`firstinhibitor`、`firstbarracks`

  **连杀** — `triplekill`、`quadrakill`、`pentakill`

  **其他** — `1x2-kills`、`drawnobet-kills`、`oddeven-kills`、`oddeven-rounds`、`racetokills`、`winningmargin-rounds`、`playertotals-kills`、`playertotals-headshots`、`toqualify`

  **此前并不存在的重命名目标** — `spreads-bookings`、`players-commitpenalty`、`players-goalieshutouts`、`players-goalsagainst`、`players-nextgoalscorer`、`players-powerplaypoints`、`players-secondgoalscorer`、`players-shorthandedgoals`、`players-shorthandedgoalscorer`、`players-thirdgoalscorer`。它们之所以是“新增”，只是因为原有盘口迁移到了这些取值——参见下方的重命名对照表。
</Accordion>

### 变更

* **24 个 `marketType` 取值被重命名，以统一各运动项目的命名**，共影响冰球、足球和板球中的 **222** 个盘口。单数前缀 `player-`、`spread-`、`total-` 统一为其他地方已在使用的复数形式 `players-`、`spreads-`、`totals-`。
* **74 个盘口的 `period` 发生变化。** 其中 **28 个由 `fulltime` 改为 `result`**，覆盖 26 个在常规时间之后不存在计分阶段的运动项目——对它们而言这两个取值本就是同一个数字的两种叫法，参见[各项目的周期](/zh/guides/periods)。另外 **46 个原本 `period` 为空白，现已填充**。全过程 `marketId` 均保持不变。
* **已不存在 `period` 为空的盘口。** 如果您曾为空字符串做特殊处理，现在可以删掉那个分支。

<Accordion title="全部 74 项 period 变更">
  **`fulltime` → `result`——26 个运动项目的 `1x2` 盘口：** MMA `203`、拳击 `213`、沙滩排球 `303`、壁球 `343`、三人篮球 `353`、冰壶 `393`、Padel `403`、足球特别项目 `443`、沙滩手球 `473`、田径 `483`、羽毛球 `493`、草地滚球 `503`、越野 `513`、电竞使命召唤 `563`、电竞守望先锋 `573`、电竞彩虹六号 `583`、电竞火箭联盟 `593`、电竞星际争霸 `603`、电竞无畏契约 `613`、电竞传说对决 `623`、电竞王者荣耀（King of Glory）`633`、柔道 `643`、电竞王者荣耀（Honor of Kings）`653`、速度赛车 `663`、高尔夫 `673`、自行车 `683`。

  拳击还额外移动了两条 `Total Rounds` 线（`216`、`218`）——它们是该项目最后两个仍停留在 `fulltime` 的盘口，而拳击其余的 Total Rounds 线早已使用 `result`。

  **空白 → 已填充，共 46 个盘口：**

  | 新的 `period`                      | 盘口数 | 具体内容                                    |
  | -------------------------------- | --- | --------------------------------------- |
  | `fulltime`                       | 13  | 足球的两个半场类盘口与最高比分半场类盘口、"是否会有加时"、"是否会有延长局" |
  | `result`                         | 10  | 篮球球员首次类盘口、排球准确盘数                        |
  | `p1+p2`、`p3+p4`、`p3+p4+overtime` | 8   | 篮球与美式足球的半场拆分                            |
  | `p1g2` … `p5g6`                  | 15  | 网球 `correctscore`"打完 *N* 局之后"           |
</Accordion>

<Accordion title="完整的 marketType 重命名对照表">
  | 原 `marketType`                 | 新 `marketType`                  | 运动项目 | 盘口数 | `marketId`                             |
  | ------------------------------ | ------------------------------- | ---- | --- | -------------------------------------- |
  | `moneyline`                    | `toqualify`                     | 足球   | 1   | `10728`                                |
  | `player-anytimegoalscorer`     | `players-anytimegoalscorer`     | 冰球   | 4   | `152401`, `152671`, `152709`, `152747` |
  | `player-assists`               | `players-assists`               | 冰球   | 1   | `152376`                               |
  | `player-blocks`                | `players-blocks`                | 冰球   | 1   | `152468`                               |
  | `player-commitpenalty`         | `players-commitpenalty`         | 冰球   | 1   | `152670`                               |
  | `player-firstgoalscorer`       | `players-firstgoalscorer`       | 冰球   | 4   | `152402`, `152672`, `152710`, `152748` |
  | `player-goalieshutouts`        | `players-goalieshutouts`        | 冰球   | 1   | `152654`                               |
  | `player-goals`                 | `players-goals`                 | 冰球   | 4   | `152381`, `152679`, `152717`, `152755` |
  | `player-goalsagainst`          | `players-goalsagainst`          | 冰球   | 1   | `152644`                               |
  | `player-lastgoalscorer`        | `players-lastgoalscorer`        | 冰球   | 1   | `152406`                               |
  | `player-nextgoalscorer`        | `players-nextgoalscorer`        | 冰球   | 1   | `152405`                               |
  | `player-points`                | `players-points`                | 冰球   | 4   | `152386`, `152689`, `152727`, `152765` |
  | `player-powerplaypoints`       | `players-powerplaypoints`       | 冰球   | 1   | `152443`                               |
  | `player-saves`                 | `players-saves`                 | 冰球   | 1   | `152579`                               |
  | `player-secondgoalscorer`      | `players-secondgoalscorer`      | 冰球   | 1   | `152403`                               |
  | `player-shorthandedgoals`      | `players-shorthandedgoals`      | 冰球   | 1   | `152664`                               |
  | `player-shorthandedgoalscorer` | `players-shorthandedgoalscorer` | 冰球   | 1   | `152669`                               |
  | `player-shots`                 | `players-shots`                 | 冰球   | 1   | `152425`                               |
  | `player-shotsongoal`           | `players-shotsongoal`           | 冰球   | 4   | `152391`, `152703`, `152741`, `152779` |
  | `player-thirdgoalscorer`       | `players-thirdgoalscorer`       | 冰球   | 1   | `152404`                               |
  | `spread-bookings`              | `spreads-bookings`              | 足球   | 59  | `10972`–`101332` (59 ids)              |
  | `spread-corners`               | `spreads-corners`               | 足球   | 54  | `10845`–`101635` (54 ids)              |
  | `total-fours`                  | `totals-fours`                  | 板球   | 42  | `2712`–`27126` (42 ids)                |
  | `total-sixes`                  | `totals-sixes`                  | 板球   | 32  | `2754`–`27158` (32 ids)                |

  **其中 13 项重命名会并入已经存在的 `marketType`** — `players-anytimegoalscorer`、
  `players-assists`、`players-blocks`、`players-firstgoalscorer`、`players-goals`、
  `players-lastgoalscorer`、`players-points`、`players-saves`、`players-shots`、
  `players-shotsongoal`、`spreads-corners`、`totals-fours` 和 `totals-sixes`
  原本就与其单数形式同时存在于注册表中。如果您按 `marketType` 分组，这些分组只会**变大**
  而不会消失——同一概念下的重复写法被消除了。

  `moneyline` → `toqualify` 这一行是唯一一项并非纯命名调整的改动：一个原本类型为 `moneyline` 的足球盘口
  现在改为 `toqualify`，这正是它一直以来的实际含义。它也是本次发布中唯一一个 `marketName`
  发生变化的盘口——由 `Winner (incl. overtime)` 改为 `To Qualify`。
</Accordion>

<Warning>
  **如果您按 `marketType` × `period` 来索引盘口，请重新拉取注册表并重新生成这些分组。**
  共有 296 个盘口的 `marketType` 或 `period` 发生变化——硬编码或缓存的映射会悄无声息地不再匹配。

  **如果您按 `marketId` 索引，则不会有任何影响。** 没有任何 `marketId` 被移除，
  也没有任何盘口新增或丢失 `outcomeId`；现有的 32,950 个 id 全部仍然有效，
  新增的 13,891 个纯属新增。
</Warning>

## 2026-04-09

### 新增

* **赛事视图：`venue` 场馆部分** — 所有赛事响应新增嵌套对象，包含 `venueId`、`venueName` 和 `venueLocation`。按语言翻译。
* **赛事视图：`clock` 时钟部分** — 所有赛事响应新增嵌套对象，包含 `currentPeriod`、`currentTime`、`remainingTime`、`remainingTimeInPeriod` 和 `stopped`。在赛事填充时钟数据之前，所有键均为 `null`。
* **赛事视图：`participant1ShortName` / `participant2ShortName`** — 赛事响应 `participants` 部分新增字段，来源于翻译后的参赛方数据。
* **赛事视图：`seasonRound`** — 赛事响应 `season` 部分新增字段。
* **期货视图：`marketId`** — 期货响应 `market` 部分现包含来自期货表的 `marketId`。名称字段（`marketName`、`marketType`、`playerMarket`、`participantMarket`）暂时为 `null`。
* **参赛方端点：`participantShortName`** — `GET /{lang}/participants` 响应现包含每个参赛方的 `participantShortName`。
* 新REST端点：**`GET /{lang}/venues?venueIds=...`** — 返回带有翻译后 `venueName` 和 `venueLocation` 的场馆数据。
* 新WebSocket频道：**`clocks`** — 按赛事传递实时时钟更新（与 `scores` 相同的路由：按 `fixtureId`、运动、赛事过滤）。支持恢复/重放。

### 重大变更

* **赛事响应结构变更** — 所有赛事端点（REST和WebSocket）现包含三个新顶级键：`venue`（对象）、`clock`（对象），以及更新的 `participants` / `season` 部分。严格解析赛事响应的客户端应更新其模型。
  * `season` 现包含 `seasonRound: integer | null`
  * `participants` 现包含 `participant1ShortName: string | null` 和 `participant2ShortName: string | null`
  * `venue: { venueId, venueName, venueLocation }` 在 `season` 之后添加
  * `clock: { currentPeriod, currentTime, remainingTime, remainingTimeInPeriod, stopped }` 在 `scores` 之后添加
* **期货响应结构变更** — `market.marketId` 现已填充（整数或null），不再始终为 `null`。

***

## 2025-12-12

### 新增

* WebSocket **恢复和重放**支持，使用`entryId`游标
* 新WebSocket频道：
  * `injuries`
  * `lineups`
  * `stats`
* WebSocket网关的AsyncAPI 3.0参考

### 改进

* 减少了`odds`和`scores`的WebSocket延迟
* 改进了`sportIds`、`tournamentIds`和`bookmakers`的过滤

### 修复

* 修复了一些`odds`更新在没有博彩公司门控的情况下交付的问题
* 修复了某些赛事在过渡期间`live`标志不正确的问题

***

## 2025-11-28

### 重大变更

* `odds.payload.odds`键现在**始终是博彩公司范围的**
  * 期望扁平结构的旧客户端必须更新

### 新增

* 支持`receiveType: "binary"`（MessagePack）
* 在所有更新消息中添加了`entryId`

***

## 2025-11-10

### 新增

* 初始WebSocket网关
* 频道：
  * `fixtures`
  * `scores`
  * `odds`
  * `bookmakers`
