注单
以游标增量同步已结算注单,以及每日汇总。
相关指南:阅读这部分的对接指南
TIP
示例使用〈认证与签名〉的示例密钥与时间戳计算签名,可直接用〈签名调试器〉验算。
注单增量同步
GET /api/tenant/v1/bets
依写入顺序读取已结算的注单。每一页返回 nextCursor,下一次调用原样带回即可从上次的位置继续;请把游标持久化。
- 第一次(没有
cursor)从当月(UTC)第一笔开始,或从from指定的时间开始。 - 有
cursor时忽略from。 - 重算与作废以同一个
slipId、较大的rev出现为新的一笔记录;请以(slipId, rev)当唯一键,同一slipId以最大的rev为准。 hasMore为true时立即再读下一页(游标还没追到目前的 UTC 月份时也是true);为false表示已追上,稍后(例如 5–30 秒)再以nextCursor轮询。- 重算与作废的记录依发生的时间写入,一定出现在你的游标之后,不会漏掉。
recSeq只在同一个 UTC 月份内递增,跨月重新起算。- 牛牛(
game: niuniu)的注单多hold(翻倍的预扣合计),payout含退回的预扣:输赢请一律用winLoss(=payout − stake − hold),不要用payout − stake推算。
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
cursor | query | string | 否 | 上一页响应的 nextCursor(格式 yyyymm.序号)。格式: ^\d{6}\.\d+$ |
limit | query | integer | 否 | 每页笔数,1–1000,默认 500。 范围:1–1000 默认: 500 |
from | query | string (date-time) | 否 | 没有 cursor 时的起点,ISO-8601 时间(例如 2026-09-24T00:00:00Z),以分钟为单位对齐。 |
请求示例
http
GET /api/tenant/v1/bets?cursor=202609.1024 HTTP/1.1
Host: elite.ewin888.com
X-Api-Key: ek_s_1a_XXXXXXXXXXXXXXXX
X-Timestamp: 1790218800
X-Nonce: ex51afea5ebcbe22ae488641
X-Signature: e15e5d07dfda0394186395fb7417746c787626d2928ff370d99bea2883c2e46d响应的 data
| 字段 | 类型 | 说明 |
|---|---|---|
items | BetRecord[] | |
items[].recSeq | integer | 写入序号(同一个 UTC 月份内递增)。 |
items[].slipId | string | 注单 ID:一位玩家在一局的所有下注为一张注单。重算与作废沿用同一个 slipId。 |
items[].rev | integer | 版次。同一 slipId 以最大的 rev 为准。范围:1–… |
items[].status | string | settled 首次结算;recalculated 结果修正后重算;void 作废(全额退回本金;牛牛连同预扣)。可能的值: settled、recalculated、void |
items[].username | string | 玩家账号。 |
items[].currency | string | 币种。 |
items[].tableId | string | 桌号,例如 S01(见 GET /tables)。长度:1–… |
items[].game | string | 游戏:baccarat 百家乐、dragontiger 龙虎、holdem 德州扑克、niuniu 牛牛。可能的值: baccarat、dragontiger、holdem、niuniu |
items[].variant | string | 玩法:百家乐 classic(传统,庄赢抽 5%)、nocomm(免佣,庄 6 点赢赔一半、有超级六);龙虎的玩法以桌台的 variants 为准;德州扑克 casino(玩家对荷官,Casino Hold'em)、thbp(玩家对荷官,Texas Hold'em Bonus Poker)、nlhe(玩家对玩家,无限注);牛牛 standard。 |
items[].roundId | string | 局 ID;德州扑克为这一手的 ID(handId)。 格式: ^[0-9A-Z]{26}$ |
items[].shoe | string | 靴号;德州扑克没有靴,为空字符串;牛牛每局一副新牌,这里是场次(默认每 60 局换一场)。 |
items[].round | integer | 本靴第几局;德州扑克为这张桌的第几手;牛牛为本场次第几局。 |
items[].bets | BetLeg[] | 各投注区的本金与退回。 |
items[].bets[].zone | string | 投注区。百家乐:B 庄、P 闲、T 和、BP 庄对、PP 闲对、S6 超级六(免佣)。龙虎:D 龙、TG 虎、T 和、ST 同花和;大小单双(您在 Console 桌台设置打开的桌才有):DB 龙大、DS 龙小、DO 龙单、DE 龙双、TB 虎大、TS 虎小、TO 虎单、TE 虎双。德州扑克:玩家对荷官 Casino Hold'em ANTE 底注、CALL 跟注(2 倍底注)、AAB AA 边注;玩家对荷官 Texas Hold'em Bonus ANTE 底注、FLOP 翻牌注(2 倍底注)、TURN 转牌注(1 倍底注)、RIVER 河牌注(1 倍底注)、BONUS 红利注;玩家对玩家 POT(这手投入底池的合计,return 为没被跟注退回的部分)。牛牛(都是押那一家闲赢庄):P1E 闲一平倍、P1D 闲一翻倍、P2E 闲二平倍、P2D 闲二翻倍、P3E 闲三平倍、P3D 闲三翻倍。可能的值: B、P、T、BP、PP、S6、D、TG、ST、DB、DS、DO、DE、TB、TS、TO、TE、ANTE、CALL、AAB、FLOP、TURN、RIVER、BONUS、POT、P1E、P1D、P2E、P2D、P3E、P3D |
items[].bets[].amount | string | 本金。 格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].bets[].return | string | 退回金额(本金+净赢;和局退回本金;输为 0)。牛牛翻倍格另含退回的预扣。 格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].bets[].hold | string | 只有牛牛翻倍格(P1D、P2D、P3D):这一格下注时另外预扣的金额(默认为本金 × 2),没用到的部分已含在 return。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].bets[].mult | integer | 只有牛牛翻倍格:实际套用的倍数。闲赢为闲家牌型的倍数、闲输为庄家牌型的倍数(默认 无牛~牛6 ×1、牛7~牛9 ×2、牛牛 ×3);退款为 0。范围:0–10 |
items[].stake | string | 本金合计(牛牛不含预扣)。 格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].hold | string | 只有牛牛:翻倍的预扣合计(各翻倍格的 bets[].hold 相加;没有押翻倍时为 0)。翻倍可能输超过本金(默认最多本金的 3 倍),所以下注时除了本金,另外从余额预扣这笔金额,结算时把没用到的部分连同派彩一起退回(含在 payout)。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].validStake | string | 有效投注(庄闲对押、和局等依规则扣除)。牛牛:平倍为本金、翻倍为本金 × 实际倍数(bets[].mult),退款的格子不算。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].rolling | string | 洗码量(输掉的注,超级六不计)。牛牛为输掉的金额(翻倍输的是本金 × 庄家牌型的倍数)。 格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].payout | string | 派彩合计(含本金);牛牛另含退回的预扣。 格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].winLoss | string | 玩家输赢 = payout − stake(正数玩家赢);牛牛为 payout − stake − hold。对账请一律用这个字段。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].delta | string | 这一版对玩家余额的入账差额:首次结算为 payout;重算为新旧派彩差(可为负);作废为本金(牛牛再加预扣)减去先前的派彩。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].result | ResultCode | |
items[].result.code | string | 结果码(一个十六进制字符,格式见〈桌台与局结果〉);作废且没有结果时为空字符串。德州扑克为这位玩家这手的结果:玩家对荷官 player_wins、dealer_wins、tie、dealer_not_qualified(只有 Casino Hold'em)、fold;玩家对玩家 win、split、lose、fold;作废 void。牛牛为 5 个字符 [胜负][庄][闲一][闲二][闲三]:第一个字符是闲家赢的比特(闲一 1、闲二 2、闲三 4 相加,0–7),之后是各家的牌型(0–9、A 牛牛、B 五花牛、C 炸弹、D 五小牛、- 不知道),例如 5893A。 |
items[].result.cardInfo | string | 牌面字符串(百家乐 12 字符、龙虎 4 字符,格式见〈桌台与局结果〉);没有结果时为空字符串。德州扑克为 公牌|这位玩家的两张底牌|荷官的两张(空白分隔的牌面代码,荷官只有玩家对荷官桌才有),例如 AS KD 7H 7C 2S|AH 7D|QS 3C。牛牛为 头牌|庄|闲一|闲二|闲三(每家 5 张依 1–5 的顺序,空白分隔),例如 7H|KS QD 10C 3S 5H|4C 6D JS 9C KH|2D 8S QC AH 2C|7D 3H KD 5C 5D。 |
items[].result.hands | 对应表<string, integer> | 只有牛牛:各家的牌型代码(B、P1、P2、P3 → 0–13),不必自己解结果码。作废(status: void)的注单没有这个字段。键: B、P1、P2、P3 |
items[].result.winners | 对应表<string, string> | 只有牛牛:每一家闲对庄的输赢(P1、P2、P3 → P 闲赢、B 庄赢)。作废(status: void)的注单没有这个字段。键: P1、P2、P3 |
items[].rake | string | 只有德州扑克:这手归这位玩家的抽水(玩家对玩家桌;玩家对荷官桌为 0)。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
items[].onsite | boolean | 只有德州扑克:现场座位(开桌商户的现场客人,荷官在平板登记、不走钱包;username 为「现场 |
items[].hand | object | 只有德州扑克:这一手的结果摘要(完整手牌记录在 Console「德州扑克记录」)。 |
items[].hand.handId | string | 这一手的 ID(同 roundId)。 |
items[].hand.no | integer | 这张桌的第几手(同 round)。 |
items[].hand.outcome | string | 这位玩家的结果(同 result.code)。 |
items[].hand.cards | string | 公牌与这位玩家亮出的牌(同 result.cardInfo)。 |
items[].placedAt | string (date-time) | UTC 时间,ISO-8601 含毫秒。 |
items[].settledAt | string (date-time) | 这一版的结算(或重算、作废)时间。 |
nextCursor | string | 注单同步游标(yyyymm.序号)。请视为不透明字符串,原样保存与带回。格式: ^\d{6}\.\d+$ |
hasMore | boolean | true 表示可能还有下一页,请立即再读。 |
响应示例
json
{
"ok": true,
"data": {
"items": [
{
"recSeq": 1024,
"slipId": "01K5Y0B8Z6R2M4N7P9Q3S5T8VW.7H3KQ2XA",
"rev": 1,
"status": "settled",
"username": "alice",
"currency": "TWD",
"tableId": "S01",
"game": "baccarat",
"variant": "nocomm",
"roundId": "01K5Y0B8Z6R2M4N7P9Q3S5T8VW",
"shoe": "260924-03",
"round": 12,
"bets": [
{
"zone": "B",
"amount": "10000",
"return": "15000"
},
{
"zone": "S6",
"amount": "1000",
"return": "13000"
}
],
"stake": "11000",
"validStake": "6000",
"rolling": "0",
"payout": "28000",
"winLoss": "17000",
"delta": "28000",
"result": {
"code": "1",
"cardInfo": "122334424000"
},
"placedAt": "2026-09-24T03:00:41.120Z",
"settledAt": "2026-09-24T03:01:20.480Z"
}
],
"nextCursor": "202609.1024",
"hasMore": false
}
}德州扑克(玩家对荷官、玩家对玩家)
json
{
"ok": true,
"data": {
"items": [
{
"recSeq": 2048,
"slipId": "01K62H3P9R8Q7M6N5B4V3C2X1Z.9K2LM4QP",
"rev": 1,
"status": "settled",
"username": "alice",
"currency": "TWD",
"tableId": "H01",
"game": "holdem",
"variant": "casino",
"roundId": "01K62H3P9R8Q7M6N5B4V3C2X1Z",
"shoe": "",
"round": 318,
"bets": [
{
"zone": "ANTE",
"amount": "100",
"return": "200"
},
{
"zone": "CALL",
"amount": "200",
"return": "400"
},
{
"zone": "AAB",
"amount": "50",
"return": "0"
}
],
"stake": "350",
"validStake": "350",
"rolling": "350",
"payout": "600",
"winLoss": "250",
"delta": "600",
"result": {
"code": "player_wins",
"cardInfo": "AS KD 7H 7C 2S|AH 7D|QS 3C"
},
"rake": "0",
"onsite": false,
"hand": {
"handId": "01K62H3P9R8Q7M6N5B4V3C2X1Z",
"no": 318,
"outcome": "player_wins",
"cards": "AS KD 7H 7C 2S|AH 7D|QS 3C"
},
"placedAt": "2026-09-27T08:12:03.410Z",
"settledAt": "2026-09-27T08:13:10.020Z"
},
{
"recSeq": 2049,
"slipId": "01K62H9A1B2C3D4E5F6G7H8J9K.3Q7XK2PL",
"rev": 1,
"status": "settled",
"username": "bob",
"currency": "TWD",
"tableId": "H02",
"game": "holdem",
"variant": "nlhe",
"roundId": "01K62H9A1B2C3D4E5F6G7H8J9K",
"shoe": "",
"round": 77,
"bets": [
{
"zone": "POT",
"amount": "400",
"return": "0"
}
],
"stake": "400",
"validStake": "400",
"rolling": "400",
"payout": "740",
"winLoss": "340",
"delta": "740",
"result": {
"code": "win",
"cardInfo": "QS QH 5D 9C 2H|QD JC"
},
"rake": "40",
"onsite": false,
"hand": {
"handId": "01K62H9A1B2C3D4E5F6G7H8J9K",
"no": 77,
"outcome": "win",
"cards": "QS QH 5D 9C 2H|QD JC"
},
"placedAt": "2026-09-27T08:20:41.000Z",
"settledAt": "2026-09-27T08:22:05.300Z"
}
],
"nextCursor": "202609.2049",
"hasMore": false
}
}牛牛(平倍、翻倍与预扣)
json
{
"ok": true,
"data": {
"items": [
{
"recSeq": 3072,
"slipId": "01K65N7Q2W4E6R8T0Y1V3J5K7P.7H3KQ2XA",
"rev": 1,
"status": "settled",
"username": "alice",
"currency": "TWD",
"tableId": "N01",
"game": "niuniu",
"variant": "standard",
"roundId": "01K65N7Q2W4E6R8T0Y1V3J5K7P",
"shoe": "260928-01",
"round": 7,
"bets": [
{
"zone": "P1E",
"amount": "1000",
"return": "1950"
},
{
"zone": "P2D",
"amount": "500",
"return": "500",
"hold": "1000",
"mult": 2
},
{
"zone": "P3E",
"amount": "500",
"return": "975"
},
{
"zone": "P3D",
"amount": "1000",
"return": "5850",
"hold": "2000",
"mult": 3
}
],
"stake": "3000",
"hold": "3000",
"validStake": "5500",
"rolling": "1000",
"payout": "9275",
"winLoss": "3275",
"delta": "9275",
"result": {
"code": "5893A",
"cardInfo": "7H|KS QD 10C 3S 5H|4C 6D JS 9C KH|2D 8S QC AH 2C|7D 3H KD 5C 5D",
"hands": {
"B": 8,
"P1": 9,
"P2": 3,
"P3": 10
},
"winners": {
"P1": "P",
"P2": "B",
"P3": "P"
}
},
"placedAt": "2026-09-28T06:30:12.300Z",
"settledAt": "2026-09-28T06:30:51.640Z"
}
],
"nextCursor": "202609.3072",
"hasMore": false
}
}错误码
| 错误码 | HTTP | 意义 |
|---|---|---|
INVALID_CURSOR | 400 | cursor 格式错误。 |
INVALID_PARAMETER | 400 | 缺少必要字段,或字段格式、值不正确;message 会指出是哪个字段。 |
所有端点另外都可能返回共通错误(UNAUTHORIZED、IP_NOT_ALLOWED、TENANT_SUSPENDED、RATE_LIMITED、INTERNAL_ERROR…)。
每日每玩家汇总
GET /api/tenant/v1/bets/summary
指定日期(依你的租户时区)每位玩家的注单汇总,只计每张注单的最新版本,作废注单的本金不计入 stake。适合做每日对账。
- 最多返回 1,000 位玩家(依输赢排序)。
- 德州扑克的现场座位(注单
onsite: true)不是你的会员,不列入汇总;要看现场座位请查注单。 - 牛牛的注单在汇总的
payout以「本金+输赢」计入,不含退回的预扣(与其他游戏的算法一致);注单本身的payout则含退回的预扣。
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
date | query | string | 是 | 日期 YYYY-MM-DD(租户时区),必须是存在的日期。格式: ^\d{4}-\d{2}-\d{2}$ |
请求示例
http
GET /api/tenant/v1/bets/summary?date=2026-09-24 HTTP/1.1
Host: elite.ewin888.com
X-Api-Key: ek_s_1a_XXXXXXXXXXXXXXXX
X-Timestamp: 1790218800
X-Nonce: exff72e1c4c7919a1f829231
X-Signature: 319627c263a261afc9c99a4ba68b1d781ffe994bc6cc6b7770c1705598f05acf响应的 data
| 字段 | 类型 | 说明 |
|---|---|---|
date | string | 日期 YYYY-MM-DD。格式: ^\d{4}-\d{2}-\d{2}$ |
timezone | string | 租户时区(IANA,例如 Asia/Taipei)。 |
players | PlayerDaySummary[] | |
players[].username | string | 玩家账号。 |
players[].slips | integer | 注单数(含作废)。 |
players[].stake | string | 本金合计(不含作废)。 格式: ^-?\d{1,15}(\.\d{1,4})?$ |
players[].validStake | string | 玩家金额,十进制字符串,最多 4 位小数;响应会去掉小数尾端的 0(例如 "100"、"0.95"、"1000.5")。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
players[].rolling | string | 玩家金额,十进制字符串,最多 4 位小数;响应会去掉小数尾端的 0(例如 "100"、"0.95"、"1000.5")。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
players[].payout | string | 派彩合计(含本金)。牛牛的注单以「本金+输赢」计入,不含退回的预扣(注单本身的 payout 含预扣)。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
players[].winLoss | string | 玩家金额,十进制字符串,最多 4 位小数;响应会去掉小数尾端的 0(例如 "100"、"0.95"、"1000.5")。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
players[].rake | string | 德州扑克玩家对玩家桌的抽水合计(其他游戏为 0)。格式: ^-?\d{1,15}(\.\d{1,4})?$ |
响应示例
json
{
"ok": true,
"data": {
"date": "2026-09-24",
"timezone": "Asia/Taipei",
"players": [
{
"username": "alice",
"slips": 42,
"stake": "52000",
"validStake": "31500",
"rolling": "18000",
"payout": "55200",
"winLoss": "3200",
"rake": "0"
}
]
}
}错误码
| 错误码 | HTTP | 意义 |
|---|---|---|
INVALID_PARAMETER | 400 | 缺少必要字段,或字段格式、值不正确;message 会指出是哪个字段。 |
所有端点另外都可能返回共通错误(UNAUTHORIZED、IP_NOT_ALLOWED、TENANT_SUSPENDED、RATE_LIMITED、INTERNAL_ERROR…)。