跳转到主要内容

数据流内容

针对特定 fixtureId 的盘口结果实时赔率更新。 赔率按博彩商分组,并通过每个结果的唯一 oddsId 进行键控。 每条记录代表单个 oddsId(一个结果的一个价格)。

路由

  • 实体键:payload.fixtureId
  • 过滤器:sportIdstournamentIdsfixtureIdsbookmakers
  • 访问权限:由您的 apiKey 决定
  • 博彩商授权:✅ 是

传输语义

  • 此频道是高吞吐量
  • 更新是仅最新状态
  • 网关可能在负载下合并或丢弃中间更新
  • 不要假设逐笔完整性
将每条消息视为状态更新,而非账本。

负载结构

oddsId:
<fixtureId>:<bookmaker>:<outcomeId>:<playerId>

结果对象(完整架构)

每个赔率条目是一个结果(outcome),包含以下字段:
字段类型描述
bookmakerstring博彩商标识(如 "stake""pinnacle""polymarket"
outcomeIdinteger结果标识符
playerIdinteger选手ID(非选手盘口为 0
pricenumber小数赔率
activeboolean此结果当前是否可用
marketActiveboolean | null整个盘口是否激活
mainLineboolean | null是否为博彩商的主盘
marketIdinteger盘口标识符
bookmakerMarketIdstring | null博彩商原生盘口ID
bookmakerOutcomeIdstring | null博彩商原生结果ID
bookmakerChangedAtnumber | null博彩商提供的变更时间戳(毫秒)
priceFractional`string`分数赔率(如 "5/2"
priceAmerican`integer`美式赔率(如 -110+250
limitnumber | null最大接受投注额(如有提供)
betslipstring | null可选的博彩商投注单或深链接令牌
metaobject | null博彩商特定元数据(订单簿、阶梯等)
changedAtnumber网关变更时间戳(毫秒,UTC)

时间戳说明

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

高级元数据(meta

某些博彩商(如预测市场/交易所)提供丰富的元数据。 示例:
{
  "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 的架构是博彩商特定的,可能会演变。

示例:传统博彩商赔率

{
  "channel": "odds",
  "type": "UPDATE",
  "payload": {
    "fixtureId": "id1100013262924543",
    "odds": {
      "stake": {
        "id1100013262924543:stake:111:0": {
          "bookmaker": "stake",
          "outcomeId": 111,
          "playerId": 0,
          "active": true,
          "price": 1.91,
          "marketActive": true,
          "mainLine": true,
          "changedAt": 1766427330098
        }
      }
    }
  },
  "ts": 1766427330257,
  "entryId": "1766427330257-84805"
}

示例:预测市场赔率(扩展字段)

{
  "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=falsemarketActive=false 视为硬停止
  • 保留 meta 中的未知字段以保持向前兼容性