Skip to main content

端点

连接流程

1. 连接

打开WebSocket连接。连接时无需身份验证。

2. 登录

在连接后 30秒 内发送登录消息:
空的 channels 数组订阅所有可用频道。要订阅特定频道:
可选启用可靠传递和消息确认:

3. 登录确认

成功后,服务器响应:

4. 接收更新

数据消息格式如下:
各频道完整的负载结构见下文负载结构。

5. 保持活跃

服务器每 30秒 发送一次 ping:
在 120秒 内回复 pong,否则连接将被关闭:
您也可以从客户端发送 ping — 服务器会回复 pong。

频道

客户端过滤频道

这些频道仅传递属于您 clientName 的数据:

全局频道

所有订阅者都会收到:

可靠投递与确认

默认情况下,消息是「发后即忘」的——快速,但断连期间丢失的消息就此消失。在登录时启用可靠投递,即可获得带确认与重放的至少一次投递:
启用后,每条 data 消息都携带 requireAck: true,你必须确认它,服务端才能将其从缓冲区释放:
或在一条消息中确认一个范围(推荐,利于吞吐):
工作原理:
  • 服务端为每个订阅缓冲最多 100 条未确认消息,并重发任何 30 秒内未被确认的消息。
  • seq 按订阅且严格递增,因此 seq 出现间隙意味着你漏掉了消息。
  • 要在重连后恢复漏掉的消息,从你处理的最后一个 seq 请求重放:
若你落后超过 100 条消息的缓冲,最旧的未确认消息会被丢弃。请及时确认(或使用 ack_batch),并将任何 replay 无法填补的 seq 间隙视为通过 REST 端点(GET /fixtures/orders、GET /fixtures/bets)对账的信号。

变更订阅

无需重连即可变更频道:
服务端以 channels_updated 回复。

赔率单订阅

betslip 频道为你关注的选项推送实时赔率。有两种订阅方式:
  1. 通过 REST——调用 GET /fixtures/betslip 会注册一个 60 秒滑动窗口;每次调用重置计时器并立即通过 WebSocket 广播一份快照。
  2. 通过 WebSocket——发送 subscribe_betslip 消息并附显式 ttl(10–3600 秒)与博彩商列表以获得更精细的控制,用 unsubscribe_betslip 提前取消。
期货只能通过 REST 订阅——而且期货目前是关闭的。 在 OddsPapi 的 db-v2 标识符方案上线前, GET /futures/betslip 返回 501,因此无法注册期货订阅,也不会推送任何期货增量。开启之后,该端点会 注册同样的 60 秒滑动窗口,其增量推送到本频道;而 subscribe_betslip / unsubscribe_betslip 这两个 WebSocket 消息只接受 fixtureId + outcomeId + playerId,没有期货形态,所以保持期货订阅不中断的 办法是在每个 60 秒窗口内重新调用 GET /futures/betslip。
每客户端最多 20 个活跃赔率单订阅(赛事与期货合计,REST + WS 合计)。消息结构与 subscribed_betslip 确认见下文赔率单订阅消息。

示例:Python 客户端

示例:JavaScript 客户端

消息类型

客户端 → 服务端

服务端 → 客户端

赔率单订阅消息

在订阅前,betslip 频道必须在你的订阅中(通过 login 或 update_channels 添加)。

subscribe_betslip

  • bookmakers 必须为非空列表。
  • ttl 可选(秒),限制在 10–3600 秒;省略时默认 60 秒。
  • 对同一选项重新订阅会刷新 TTL 并更新博彩商集合(幂等)。
服务端确认:
你没有账户的博彩商会从订阅中剔除,并在 skipped 数组中返回。每客户端最多 20 个活跃赔率单订阅(REST + WS 合计)。

unsubscribe_betslip

负载结构

数据消息将频道负载包裹在信封 {type, channel, event, payload, ts, seq} 中。orders、bets 与 settlements 频道投递完整数据库行(row_to_json);balance、emergency 与 betslip 使用自定义结构。

Orders

orders 表的完整行:

Bets / settlements

bets 表的完整行(settlements 频道使用相同结构):
同时订阅 bets 与 settlements 会使结算更新被投递两次——每个频道各一次。若想要专门的结算流,请单独使用 settlements。

Balance

Emergency

Betslip

在赔率单订阅活跃期间推送。赛事负载以 fixtureId + outcomeId + playerId 为键;期货负载以 futureId + futureOutcomeId + participantId 为键,并且完全不携带 playerId。 赛事:
期货:
目前不会推送任何期货增量。 上面的负载是期货增量将来的结构,管道也已就位——GET /futures/betslip 日后会注册与赛事端点相同的 60 秒滑动订阅——但在 OddsPapi 的 db-v2 标识符方案上线前,整套 /futures/* 端点都返回 501,因此不可能存在期货订阅,本频道也不会推送任何期货内容。赛事赔率单的 增量不受影响。odds.{bookmaker} 内的 oddsId 是不透明的——请原样保存并回传。ABP 始终发布实际命中的那个键。

连接限制

后续步骤

币种与额度

各币种下数值如何计价与换算。

错误处理

处理错误响应与被拒原因。