注單
以游標增量同步已結算注單,以及每日彙總。
相關指南:閱讀這部分的串接指南
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…)。