Skip to content

Bets ​

Incremental, cursor-based sync of settled bets, and daily summaries.

Guide: read the integration guide for this area

TIP

Examples are signed with the example key and timestamp from "Authentication & signing", so you can re-check them in the Signature debugger.

Sync bets (cursor) ​

GET /api/tenant/v1/bets

Reads settled bets in the order they were written. Each page returns nextCursor; pass it back unchanged to continue where you left off, and persist it.

  • The first call (no cursor) starts at the first record of the current UTC month, or at the time given in from.
  • from is ignored when cursor is present.
  • Recalculations and voids appear as a new record with the same slipId and a higher rev. Use (slipId, rev) as the unique key and treat the highest rev of a slipId as final.
  • While hasMore is true read the next page right away (it is also true while the cursor has not reached the current UTC month); when it is false you have caught up, so poll again later (for example every 5–30 seconds) with nextCursor.
  • Recalculations and voids are written at the time they happen, so they always appear after your cursor and are never missed.
  • recSeq increases within a UTC month only and restarts in the next month.
  • Niu Niu slips (game: niuniu) add hold (the total hold for double bets), and their payout includes the returned hold: always take the win/loss from winLoss (= payout − stake − hold), never from payout − stake.

Parameter

ParameterInTypeRequiredDescription
cursorquerystringnonextCursor from the previous page (format yyyymm.sequence).
Format: ^\d{6}\.\d+$
limitqueryintegernoPage size, 1–1000, default 500.
Range: 1–1000
Default: 500
fromquerystring (date-time)noStarting point when there is no cursor, an ISO-8601 time (for example 2026-09-24T00:00:00Z), aligned to the minute.

Example request

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

Response data

FieldTypeDescription
itemsBetRecord[]
items[].recSeqintegerWrite sequence (increases within a UTC month).
items[].slipIdstringSlip ID. All of a player's bets in one round form one slip. Recalculations and voids keep the same slipId.
items[].revintegerRevision. The highest rev of a slipId is final.
Range: 1–…
items[].statusstringsettled first settlement; recalculated recalculated after a result correction; void voided (stakes refunded in full; for Niu Niu together with the hold).
Values: settled, recalculated, void
items[].usernamestringUsername.
items[].currencystringCurrency.
items[].tableIdstringTable ID, for example S01 (see GET /tables).
Length: 1–…
items[].gamestringGame: baccarat, dragontiger, holdem (Texas Hold'em) or niuniu (Niu Niu).
Values: baccarat, dragontiger, holdem, niuniu
items[].variantstringVariant: baccarat classic (5% commission on banker wins) or nocomm (no commission; banker winning with 6 pays half, with Super Six). For dragon tiger use the table's variants. Texas Hold'em: casino (player vs dealer, Casino Hold'em), thbp (player vs dealer, Texas Hold'em Bonus Poker) or nlhe (player vs player, no-limit). Niu Niu: standard.
items[].roundIdstringRound ID; for Texas Hold'em the hand ID.
Format: ^[0-9A-Z]{26}$
items[].shoestringShoe number; an empty string for Texas Hold'em (no shoe). Niu Niu uses a fresh deck every round, so this is the session (a new one every 60 rounds by default).
items[].roundintegerRound number within the shoe; for Texas Hold'em the hand number at this table; for Niu Niu the round number within the session.
items[].betsBetLeg[]Stake and return per bet zone.
items[].bets[].zonestringBet zone. Baccarat: B banker, P player, T tie, BP banker pair, PP player pair, S6 Super Six (no-commission). Dragon tiger: D dragon, TG tiger, T tie, ST suited tie; big/small/odd/even (only on tables where you turn it on in Console Table settings): DB dragon big, DS dragon small, DO dragon odd, DE dragon even, TB tiger big, TS tiger small, TO tiger odd, TE tiger even. Texas Hold'em: player vs dealer Casino Hold'em ANTE ante, CALL call (2× the ante), AAB AA bonus; player vs dealer Texas Hold'em Bonus ANTE ante, FLOP flop bet (2× the ante), TURN turn bet (1× the ante), RIVER river bet (1× the ante), BONUS bonus bet; player vs player POT (everything put into the pot in the hand; return is the uncalled part given back). Niu Niu (each one bets that this player hand beats the banker): P1E player 1 equal, P1D player 1 double, P2E player 2 equal, P2D player 2 double, P3E player 3 equal, P3D player 3 double.
Values: 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[].amountstringStake.
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].bets[].returnstringAmount returned (stake + net win; a push returns the stake; 0 when lost). For a Niu Niu double bet it also includes the returned hold.
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].bets[].holdstringNiu Niu double bets only (P1D, P2D, P3D): the extra amount held from the balance when the bet was placed (stake × 2 by default); the unused part is included in return.
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].bets[].multintegerNiu Niu double bets only: the multiplier actually applied — the player hand's multiplier when the player wins, the banker hand's when the player loses (by default ×1 for No Bull to Bull 6, ×2 for Bull 7–9, ×3 for Niu Niu); 0 when refunded.
Range: 0–10
items[].stakestringTotal stake (for Niu Niu, without the hold).
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].holdstringNiu Niu only: the total hold on double bets (the sum of bets[].hold; 0 without double bets). A double bet can lose more than its stake (up to 3× by default), so this amount is held from the balance on top of the stake when the bet is placed, and the unused part is returned with the payout at settlement (included in payout).
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].validStakestringValid (effective) stake, with banker/player hedges and pushes removed by the rules. Niu Niu: the stake for equal bets and stake × the multiplier actually applied (bets[].mult) for double bets; refunded bets do not count.
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].rollingstringRolling (lost stakes; Super Six excluded). Niu Niu: the amount lost (a lost double bet loses stake × the banker hand's multiplier).
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].payoutstringTotal payout (stake included); for Niu Niu it also includes the returned hold.
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].winLossstringPlayer win/loss = payout − stake (positive means the player won); for Niu Niu payout − stake − hold. Always reconcile with this field.
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].deltastringWhat this revision changed on the player's balance: payout for the first settlement; the payout difference for a recalculation (may be negative); stake (plus the hold for Niu Niu) minus the earlier payout for a void.
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].resultResultCode
items[].result.codestringResult code (one hexadecimal character, see "Tables and round results"); an empty string for a void round without a result. For Texas Hold'em it is this player's outcome of the hand: player vs dealer player_wins, dealer_wins, tie, dealer_not_qualified (Casino Hold'em only), fold; player vs player win, split, lose, fold; void when the hand was voided. For Niu Niu it is 5 characters [outcome][banker][player 1][player 2][player 3]: the first is a bit mask of the winning player hands (player 1 = 1, player 2 = 2, player 3 = 4, added up: 0–7), followed by each hand's rank (0–9, A Niu Niu, B Five Face Bull, C Bomb, D Five Small Bull, - unknown), for example 5893A.
items[].result.cardInfostringCard string (12 characters for baccarat, 4 for dragon tiger, see "Tables and round results"); an empty string when there is no result. For Texas Hold'em it is board|this player's two hole cards|the dealer's two cards (space-separated card codes; the dealer part only at player-vs-dealer tables), for example AS KD 7H 7C 2S|AH 7D|QS 3C. For Niu Niu it is first card|banker|player 1|player 2|player 3 (each hand's 5 cards in slot order 1–5, space-separated), for example 7H|KS QD 10C 3S 5H|4C 6D JS 9C KH|2D 8S QC AH 2C|7D 3H KD 5C 5D.
items[].result.handsmap<string, integer>Niu Niu only: each hand's rank (B, P1, P2, P3 → 0–13), so you do not need to decode the result code. Absent on voided slips (status: void).
keys: B, P1, P2, P3
items[].result.winnersmap<string, string>Niu Niu only: the outcome of each player hand against the banker (P1, P2, P3 → P player wins, B banker wins). Absent on voided slips (status: void).
keys: P1, P2, P3
items[].rakestringTexas Hold'em only: the rake taken from this player in the hand (player-vs-player tables; 0 at player-vs-dealer tables).
Format: ^-?\d{1,15}(\.\d{1,4})?$
items[].onsitebooleanTexas Hold'em only: an on-site seat (a guest at the table-owner's studio, registered by the dealer on the tablet, outside the wallet; username is "現場 #seat").
items[].handobjectTexas Hold'em only: a summary of the hand (the full hand history is in Console "Texas Hold'em records").
items[].hand.handIdstringHand ID (same as roundId).
items[].hand.nointegerHand number at this table (same as round).
items[].hand.outcomestringThis player's outcome (same as result.code).
items[].hand.cardsstringBoard and the cards this player showed (same as result.cardInfo).
items[].placedAtstring (date-time)UTC time, ISO-8601 with milliseconds.
items[].settledAtstring (date-time)When this revision was settled (or recalculated, or voided).
nextCursorstringBet sync cursor (yyyymm.sequence). Treat it as opaque; store it and send it back unchanged.
Format: ^\d{6}\.\d+$
hasMorebooleantrue means there may be another page; read it right away.

Example response

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
  }
}

Texas Hold'em (player vs dealer, player vs player)

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
  }
}

Niu Niu (equal and double bets with a hold)

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
  }
}

Error codes

CodeHTTPMeaning
INVALID_CURSOR400cursor is malformed.
INVALID_PARAMETER400A required field is missing, or a field has the wrong format or value; message names the field.

Every endpoint can also return the common errors (UNAUTHORIZED, IP_NOT_ALLOWED, TENANT_SUSPENDED, RATE_LIMITED, INTERNAL_ERROR…).

Daily per-player summary ​

GET /api/tenant/v1/bets/summary

Per-player totals for one date (in your tenant's time zone). Only the latest version of each bet slip counts, and voided slips add nothing to stake. Useful for daily reconciliation.

  • Returns at most 1,000 players (ordered by win/loss).
  • Texas Hold'em on-site seats (slips with onsite: true) are not your members and are left out of the summary; list the bet slips to see them.
  • Niu Niu slips count towards the summary payout as stake + win/loss, without the returned hold (the same basis as every other game); a slip's own payout does include the returned hold.

Parameter

ParameterInTypeRequiredDescription
datequerystringyesDate YYYY-MM-DD (tenant time zone); it must be a real date.
Format: ^\d{4}-\d{2}-\d{2}$

Example request

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

Response data

FieldTypeDescription
datestringA date YYYY-MM-DD.
Format: ^\d{4}-\d{2}-\d{2}$
timezonestringTenant time zone (IANA, for example Asia/Taipei).
playersPlayerDaySummary[]
players[].usernamestringUsername.
players[].slipsintegerNumber of slips (voided ones included).
players[].stakestringTotal stake (voided slips excluded).
Format: ^-?\d{1,15}(\.\d{1,4})?$
players[].validStakestringA player amount as a decimal string with at most 4 decimals. Responses drop trailing zeros (for example "100", "0.95", "1000.5").
Format: ^-?\d{1,15}(\.\d{1,4})?$
players[].rollingstringA player amount as a decimal string with at most 4 decimals. Responses drop trailing zeros (for example "100", "0.95", "1000.5").
Format: ^-?\d{1,15}(\.\d{1,4})?$
players[].payoutstringTotal payout (stake included). Niu Niu slips count as stake + win/loss, without the returned hold (a slip's own payout includes the hold).
Format: ^-?\d{1,15}(\.\d{1,4})?$
players[].winLossstringA player amount as a decimal string with at most 4 decimals. Responses drop trailing zeros (for example "100", "0.95", "1000.5").
Format: ^-?\d{1,15}(\.\d{1,4})?$
players[].rakestringTotal rake from Texas Hold'em player-vs-player tables (0 for other games).
Format: ^-?\d{1,15}(\.\d{1,4})?$

Example response

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"
      }
    ]
  }
}

Error codes

CodeHTTPMeaning
INVALID_PARAMETER400A required field is missing, or a field has the wrong format or value; message names the field.

Every endpoint can also return the common errors (UNAUTHORIZED, IP_NOT_ALLOWED, TENANT_SUSPENDED, RATE_LIMITED, INTERNAL_ERROR…).

elite Tenant Integration API v1