> ## 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.

# 赔率频道 - 实时博彩赔率流

> 通过WebSocket流式传输实时博彩赔率。聚合自200+家博彩公司的实时赔率，支持小数、分数、美式赔率格式及订单簿深度。

## 数据流内容

针对特定 `fixtureId` 的盘口结果实时赔率更新。

赔率按博彩商分组，并通过每个结果的唯一 **oddsId** 进行键控。
每条记录代表单个 **oddsId**（一个结果的一个价格）。

***

## 路由

* 实体键：`payload.fixtureId`
* 过滤器：`sportIds`、`tournamentIds`、`fixtureIds`、`bookmakers`
* 访问权限：由您的 `apiKey` 决定
* 博彩商授权：✅ 是

***

## 传输语义

* 此频道是**高吞吐量**的
* 更新是**仅最新状态**
* 网关可能在负载下合并或丢弃中间更新
* **不要**假设逐笔完整性

将每条消息视为**状态更新**，而非账本。

> 需要每一次价格变动或收盘价？数据流用于基于最新状态进行交易；如需完整变动请使用[历史赔率](/zh/api-reference/concepts)，如需开盘/收盘价请使用 [CLV](/zh/api-reference/concepts)。

***

## 负载结构

oddsId：

```
<fixtureId>:<bookmaker>:<outcomeId>:<playerId>
```

***

## 结果对象（完整架构）

每个赔率条目是一个**结果（outcome）**，包含以下字段：

| 字段                   | 类型                | 描述                                             |                       |
| -------------------- | ----------------- | ---------------------------------------------- | --------------------- |
| `bookmaker`          | `string`          | 博彩商标识（如 `"stake"`、`"pinnacle"`、`"polymarket"`） |                       |
| `outcomeId`          | `integer`         | 结果标识符                                          |                       |
| `playerId`           | `integer`         | 选手ID（非选手盘口为 `0`）                               |                       |
| `price`              | `number`          | 小数赔率                                           |                       |
| `active`             | `boolean`         | 此结果当前是否可用                                      |                       |
| `marketActive`       | `boolean \| null` | 整个盘口是否激活                                       |                       |
| `mainLine`           | `boolean \| null` | 是否为博彩商的主盘                                      |                       |
| `marketId`           | `integer`         | 盘口标识符                                          |                       |
| `bookmakerMarketId`  | `string \| null`  | 博彩商原生盘口ID                                      |                       |
| `bookmakerOutcomeId` | `string \| null`  | 博彩商原生结果ID                                      |                       |
| `bookmakerChangedAt` | `number \| null`  | 博彩商提供的变更时间戳（毫秒）                                |                       |
| `priceFractional`    | \`string          | \`                                             | 分数赔率（如 `"5/2"`）       |
| `priceAmerican`      | \`integer         | \`                                             | 美式赔率（如 `-110`、`+250`） |
| `limit`              | `number \| null`  | 最大接受投注额（如有提供）                                  |                       |
| `betslip`            | `string \| null`  | 可选的博彩商投注单或深链接令牌                                |                       |
| `meta`               | `object \| null`  | 博彩商特定元数据（订单簿、阶梯等）                              |                       |
| `changedAt`          | `number`          | 网关变更时间戳（毫秒，UTC）                                |                       |

***

## 时间戳说明

* `changedAt` **始终存在**，表示网关接受更新的时间
* `bookmakerChangedAt`（如存在）反映博彩商自己的时间戳
* 这些值可能不同 — 不要假设它们相等

***

## 高级元数据（`meta`）

某些博彩商（如预测市场/交易所）提供丰富的元数据。

示例：

```json theme={null}
{
  "meta": {
    "lay": [
      { "price": 2.00, "size": 100.0 },
      { "price": 2.10, "size": 80.0 }
    ],
    "back": [
      { "price": 1.95, "size": 50.0 }
    ]
  }
}
```

典型的 `meta` 内容可能包括：

* 订单簿阶梯（`back` / `lay`）
* 流动性提示
* 内部规模或刻度元数据

`meta` 的架构是**博彩商特定的**，可能会演变。

***

## 示例：传统博彩商赔率

```json theme={null}
{
  "channel": "odds",
  "type": "UPDATE",
  "payload": {
    "fixtureId": "id1100013270505136",
    "odds": {
      "pinnacle": {
        "id1100013270505136:pinnacle:111:0": {
          "bookmaker": "pinnacle",
          "outcomeId": 111,
          "playerId": 0,
          "active": true,
          "price": 1.155,
          "marketActive": true,
          "mainLine": true,
          "bookmakerMarketId": "line/4/487/1628488896/3565645414/0/moneyline",
          "bookmakerOutcomeId": "home",
          "bookmakerChangedAt": 1776717657043,
          "limit": 19354,
          "priceAmerican": -645,
          "priceFractional": "11/71",
          "marketId": 111,
          "changedAt": 1776717657402
        },
        "id1100013270505136:pinnacle:112:0": {
          "bookmaker": "pinnacle",
          "outcomeId": 112,
          "playerId": 0,
          "active": true,
          "price": 5.77,
          "marketActive": true,
          "mainLine": true,
          "bookmakerMarketId": "line/4/487/1628488896/3565645414/0/moneyline",
          "bookmakerOutcomeId": "away",
          "bookmakerChangedAt": 1776717657043,
          "limit": 3000,
          "priceAmerican": 477,
          "priceFractional": "477/100",
          "marketId": 111,
          "changedAt": 1776717657402
        }
      }
    }
  },
  "ts": 1776717657500,
  "entryId": "1776717657500-84805"
}
```

***

## 示例：预测市场赔率（扩展字段）

```json theme={null}
{
  "channel": "odds",
  "type": "UPDATE",
  "payload": {
    "fixtureId": "id1100064864029581",
    "odds": {
      "polymarket": {
        "id1100064864029581:polymarket:112:0": {
          "bookmaker": "polymarket",
          "outcomeId": 112,
          "playerId": 0,
          "active": true,
          "price": 6.369,
          "priceAmerican": 537,
          "limit": 4.71,
          "bookmakerMarketId": "1011497",
          "bookmakerOutcomeId": "4937...",
          "meta": {
            "back": [{ "price": 6.369, "size": 30.0 }],
            "lay": [{ "price": 100.0, "size": 15.0 }]
          },
          "marketActive": true,
          "changedAt": 1766939876376
        }
      }
    }
  },
  "ts": 1766939876700,
  "entryId": "1766939876700-653"
}
```

***

## 实现指南

* 始终使用以下格式作为存储键
  ```
  {fixtureId}:{bookmaker}:{outcomeId}:{playerId}
  ```
* 按 `marketId` 分组结果（参见**概念**）用于：
  * 套利检测
  * 超额回报计算
  * 概率归一化
* 将 `active=false` 或 `marketActive=false` 视为**硬停止**
* 保留 `meta` 中的未知字段以保持向前兼容性

***
