注单记录

按时间窗口拉取注单快照,按游标读取注单变更

注单记录 ​

平台提供两种读取方式,通常一起使用:

接口用途
GET /v1/records按创建时间窗口拉取某一时刻的注单快照,适合补数据和对账
GET /v1/record-changes按游标持续读取注单的变更,适合实时同步

两个接口共用注单限流,默认每个商户 2 次/秒(以 capabilities.limits 为准)。

注单字段 ​

一局游戏对应一条注单,派奖、退款到达后注单会产生新的 revision。

字段类型说明
record_idstring注单 ID。不等于交易 ID 或对局 ID
revisioninteger修订号,越大越新
player_idstring平台玩家 ID
game_idstring游戏 ID
currencystring币种代码
round_idstring对局 ID,与资金交易、对局结束通知中的一致
parent_round_idstring | null父局 ID,免费局等子局才有
bet_amountdecimal string已确认扣款的投注额;扣款确认前为 0
refund_amountdecimal string已确认的退款额
payout_amountdecimal string已确认的累计派奖额
net_amountdecimal string玩家输赢 = payout_amount + refund_amount - bet_amount,可为负
statusstringOPEN(未结算)、SETTLED(已结算)、VOID(全额取消)
created_atstring注单创建时间
settled_atstring | null结算时间;OPEN 时为 null
updated_atstring本修订的时间
  • OPEN 注单的 payout_amount 只是目前已确认的派奖,不是最终结果。
  • 部分退款后,注单按剩余投注保持 OPEN 或 SETTLED;只有全额取消且没有有效结算时才是 VOID。
  • 现金奖励(gift-tasks)不计入注单的派奖。
json
{
  "record_id": "0192f700-7f8e-71a2-c3d4-0e1f2a3b4c5d",
  "revision": 2,
  "player_id": "0192f6a4-3c1e-7b2a-9d40-5e8f1a2b3c4d",
  "game_id": "0192f6a5-1111-7aaa-8bbb-000000000001",
  "currency": "USD",
  "round_id": "r-20260923-000123",
  "parent_round_id": null,
  "bet_amount": "10.00",
  "refund_amount": "0.00",
  "payout_amount": "19.50",
  "net_amount": "9.50",
  "status": "SETTLED",
  "created_at": "2026-09-23T08:00:00.000Z",
  "settled_at": "2026-09-23T08:00:05.000Z",
  "updated_at": "2026-09-23T08:00:05.000Z"
}

按时间窗口拉取 ​

GET {API_URL}/v1/records

参数必填说明
created_from首次必填窗口起点(包含),RFC3339,最多毫秒精度
created_to首次必填窗口终点(不包含)。窗口必须大于 0 且不超过 24 小时
player_id否只看某个玩家
game_id否只看某个游戏
limit否每页条数,1–1000,默认 100
cursor续页必填上一页的 next_cursor。带 cursor 时只能再带 limit,不能再传其他参数
text
GET /v1/records?created_from=2026-09-23T00:00:00Z&created_to=2026-09-24T00:00:00Z&limit=500

成功响应 200 ​

字段说明
items注单列表,按 (created_at, record_id) 升序
next_cursor下一页游标;没有下一页时为 null
has_more是否还有下一页
snapshot_watermark首次请求时冻结的快照位置
projection_as_of数据的截止时间
  • 首次请求会冻结快照:同一条游标链中看到的是同一时刻的数据,按顺序翻页不会漏也不会重复。
  • 快照之后发生的派奖、退款等修改,请通过读取注单变更获取。
  • 游标自首次请求起 24 小时内有效,过期返回 410 CURSOR_EXPIRED。
  • 响应中的时间统一为 UTC、三位毫秒,例如 2026-09-23T08:00:00.000Z。

读取注单变更 ​

GET {API_URL}/v1/record-changes

since、from_now=true 和 cursor 三选一,必须且只能传一个。

参数说明
since从这个变更时间开始读取(包含),RFC3339
from_now固定为 true:从当前位置开始,不返回历史变更
cursor上一页的 next_cursor
limit每页条数,1–1000,默认 100

成功响应 200 ​

字段说明
items[].sequence变更序号(十进制字符串),严格递增。不是时间戳
items[].record_id注单 ID
items[].revision本次变更后的修订号
items[].changed_at变更时间
items[].record该修订的完整注单
next_cursor下次读取用的游标,一定有值,即使本页为空
has_more是否还有积压
projection_as_of数据的截止时间
json
{
  "data": {
    "items": [
      {
        "sequence": "1024",
        "record_id": "0192f700-7f8e-71a2-c3d4-0e1f2a3b4c5d",
        "revision": 2,
        "changed_at": "2026-09-23T08:00:05.000Z",
        "record": { "record_id": "0192f700-7f8e-71a2-c3d4-0e1f2a3b4c5d", "revision": 2, "status": "SETTLED", "…": "…" }
      }
    ],
    "next_cursor": "eyJ2Ijox…",
    "has_more": false
  },
  "request_id": "0192f700-req-0001"
}

持续同步 ​

  1. 保存每次响应的 next_cursor(持久化),下次用它继续读。
  2. has_more=true 时立即读下一页;为 false 时等待一段时间再读。
  3. 同一条注单可能出现多次。按 record_id 保存,只在 revision 更大时覆盖。

重建与游标过期 ​

变更数据保留 90 天。游标或 since 早于保留期时,返回 410 CURSOR_EXPIRED,平台不会悄悄跳过缺失的部分。

需要从头建立数据,或游标过期后,按以下顺序操作才能保证不漏单:

  1. 调用 GET /v1/record-changes?from_now=true,保存返回的 next_cursor(此时 items 为空)。
  2. 用 /v1/records 按 24 小时一个窗口,拉取需要的历史区间。
  3. 从第 1 步的游标开始读取变更,按 revision 去重覆盖。

不要用本地时间代替第 1 步

第 1 步的位置由平台确定。用本地时钟计算 since 来衔接,可能因为时钟差或提交延迟漏掉变更。

平台数据同步暂时落后时,接口返回 503,不会返回空页。稍后重试即可。

最后更新于 13小时前