Skip to content

Tables & round results ​

Table list ​

GET /tables lists the tables you can choose (platform tables, tables you built yourself, and tables other merchants share with you) and whether you have enabled each one:

json
{
  "ok": true,
  "data": {
    "tables": [
      {
        "tableId": "S01",
        "game": "baccarat",
        "variants": ["classic", "nocomm"],
        "name": { "CHT": "模擬百家樂 1", "CHS": "模拟百家乐 1", "ENG": "Sim Baccarat 1" },
        "status": "open",
        "betSeconds": 20,
        "enabled": true
      }
    ]
  }
}
FieldNotes
tableIdTable ID, used by launch's table and in bet records
gamebaccarat, dragontiger, holdem (Texas Hold'em) or niuniu (Niu Niu)
variantsVariants offered; baccarat has classic and nocomm (no commission), Niu Niu has standard
nameTable name per language, keyed by language code
statusopen or maintenance
betSecondsDefault betting time in seconds
enabledWhether you have enabled it; players only see tables you have enabled
providerOnly on tables another merchant shares with you: { "name": provider name }

Your sandbox tenant has all simulator tables enabled: S01, S02 (baccarat), S03 (dragon tiger) and N01 (Niu Niu).

Enabling and disabling ​

Use the Console (Table → Table management) or the API:

text
POST /api/tenant/v1/tables/enable     {"tableId": "S01"}
POST /api/tenant/v1/tables/disable    {"tableId": "S01"}
json
{ "ok": true, "data": { "tableId": "S01", "enabled": true, "used": 2, "quota": 2 } }
  • The free plan can enable up to its quota (2 tables by default; the platform can change it per tenant). Beyond that you get 409 QUOTA_EXCEEDED.
  • The paid plan has no quota (quota is null), and each enabled table costs USD 100 per month from the day it is enabled, charged daily and pro rata from your prepaid credit; see Billing.
  • A suspended account gets 409 ACCOUNT_LOCKED; an unknown table ID gets 404 NOT_FOUND.
  • Once disabled, players immediately lose access to the table; the day you disable it is still billed.
  • Enabling an already enabled table is not an error.

Tables shared by other merchants ​

Merchants can share the tables they built (their own studio, dealers and card readers) with other merchants. When the platform allows cross-merchant sharing, the provider's share has been approved by the platform, and it includes you (or all merchants), the table appears in your GET /tables with a provider:

json
{
  "tableId": "STUDIO-B1",
  "game": "baccarat",
  "variants": ["classic", "nocomm"],
  "name": { "CHT": "旗艦攝影棚 B1", "ENG": "Studio B1" },
  "status": "open",
  "betSeconds": 20,
  "enabled": false,
  "provider": { "name": "Flagship Gaming" }
}
  • Enable and disable it like a platform table (POST /tables/enable, /tables/disable, or Console Table management → Tables shared by other merchants); it counts towards your table count and table fees just like a platform table.
  • Money never crosses merchants: your players bet with your bet limits and you settle with them; their bets appear in your GET /bets as usual. The provider only supplies the table, the video and the results. In the Console you can also set a bet-limit cap for the table (lower than your own limits).
  • Only tables with a live card reader (RoadMapServer) or our Hold'em scanner can be shared, after a platform review. The platform checks every shared table against every user merchant each hour and may stop a table that looks abnormal.
  • Hold'em player-vs-player tables are the exception: your players sit and play against other merchants' players, so money moves between players of different merchants (platform player-vs-player tables work the same way). You can enable such a table only if it uses your currency and the same money pool (live merchants with live merchants; sandbox tenants and platform showcase accounts only on play-money tables). The platform records each merchant's net result per hand (player win/loss plus the rake attributed to you) and settles it daily against your prepaid credit — see billing.
  • When the provider stops sharing, removes you from the audience, or the platform stops the table, the table leaves your lobby after the current round: new bets are rejected, bets already placed settle normally, GET /tables no longer lists it, and it is disabled for you. If the platform pauses cross-merchant sharing the same happens immediately, and everything comes back when sharing reopens.
  • The video is pushed by the provider; viewing traffic is billed to you (like platform tables, by the viewer's merchant).
  • The provider may charge a usage fee (a fixed daily fee or a percentage of valid bets), collected by the platform from your prepaid credit each day; see Billing.

Round lifecycle ​

  1. Betting opens: the countdown comes from the data source (or the table's betSeconds when it has none).
  2. Betting closes: when the countdown ends, when the data source closes betting, or as soon as the first card is dealt.
  3. Result and settlement: the result is checked against the cards and drawing rules, then every bet is settled and paid out automatically. The bets appear in GET /bets and the round in GET /rounds/{roundId}.
  4. Void: for a misdeal, dealer error, device failure and so on, the data source voids the round and every stake is refunded in full (for Niu Niu together with the hold; bet status: void).
  5. Abnormal round: a round whose betting closed but which gets no result within 10 minutes is voided and refunded automatically.
  6. Correction: a correction that arrives within 30 minutes of settlement, with a complete result that passes the rules, is recalculated automatically (the bets appear with a new rev). Outside those guardrails the original result and amounts stand and the round is marked disputed (disputed).

When a data source goes down, its tables stop taking bets immediately and resume automatically when it recovers; tables the platform puts into maintenance show status: maintenance in GET /tables.

Round result ​

text
GET /api/tenant/v1/rounds/01K5Y0B8Z6R2M4N7P9Q3S5T8VW
json
{
  "ok": true,
  "data": {
    "roundId": "01K5Y0B8Z6R2M4N7P9Q3S5T8VW",
    "tableId": "S01",
    "shoe": "260924-03",
    "round": 12,
    "status": "settled",
    "code": "1",
    "cardInfo": "122334424000",
    "result": {
      "cards": { "P1": "2C", "B1": "4H", "P2": "3D", "B2": "2S", "P3": "10S" },
      "player": 5,
      "banker": 6,
      "winner": "B",
      "playerPair": false,
      "bankerPair": false
    },
    "complete": true,
    "rev": 1,
    "openedAt": "2026-09-24T03:00:30.012Z",
    "settledAt": "2026-09-24T03:01:20.480Z"
  }
}
  • roundId is a 26-character upper-case ULID; take it from a bet's roundId. A malformed ID returns 404 NOT_FOUND; a round that is not settled yet returns 404 ROUND_NOT_FOUND.
  • status: settled, void or disputed.
  • rev: result revision — 1 for the first result, plus 1 for each correction or void.
  • complete: true when all cards are known; false when the data source only gave the outcome and points (unknown cards appear as 00 in cardInfo; for Niu Niu, each hand's outcome, possibly with its rank).
  • Niu Niu uses a fresh deck every round, so there is no shoe: shoe is the session (a new one every 60 rounds by default) and round the round number within the session. See Niu Niu round result for an example.

Result code ​

code is one hexadecimal character built from bits:

BitsBaccaratDragon tiger
bits 0–1 (values 1–3)1 banker, 2 player, 3 tie1 dragon, 2 tiger, 3 tie
bit 2 (value 4)banker pairsuited tie
bit 3 (value 8)player pair—

All possible values:

codeBaccaratcodeBaccarat
1banker9banker, player pair
2playerAplayer, player pair
3tieBtie, player pair
5banker, banker pairDbanker, banker pair, player pair
6player, banker pairEplayer, banker pair, player pair
7tie, banker pairFtie, banker pair, player pair

Dragon tiger: 1 dragon, 2 tiger, 3 tie, 7 suited tie. For a void round with no result, the bet's result.code is an empty string.

Niu Niu result code ​

A Niu Niu code has 5 characters: [outcome][banker][player 1][player 2][player 3].

  • Outcome: the bits of the player hands that beat the banker, added up (player 1 = 1, player 2 = 2, player 3 = 4), in hexadecimal 0–7; 0 means the banker beat all three, 7 that the banker lost to all three.
  • Each hand's rank: 0 No Bull, 1–9 Bull 1–9, A Niu Niu, B Five Face Bull, C Bomb, D Five Small Bull (B–D only at tables with special hands turned on); - means the hand's rank is unknown (an incomplete result from the data source).
ExampleMeaning
5893A5 = 1 + 4: players 1 and 3 win. Banker Bull 8, player 1 Bull 9, player 2 Bull 3, player 3 Niu Niu
0A123Banker Niu Niu beats player 1 (Bull 1), player 2 (Bull 2) and player 3 (Bull 3)

A bet's result.hands and result.winners carry the same information already decoded; see Niu Niu bets.

Card string ​

cardInfo uses 2 characters per card: the suit (1 clubs ♣, 2 diamonds ♦, 3 hearts ♥, 4 spades ♠) and the rank (1 ace, 2–9, 0 for 10, J, Q, K); 00 means no card.

  • Baccarat: 12 characters, in the order player 1, player 2, banker 1, banker 2, player third card, banker third card.
  • Dragon tiger: 4 characters, dragon then tiger.
  • Niu Niu: written differently, see Niu Niu card string.
ExampleMeaning
122334424000Player 2♣ 3♦, banker 4♥ 2♠, player draws 10♠, banker stands → player 5, banker 6, banker wins
3K49Dragon K♥, tiger 9♠ → dragon wins

Niu Niu card string ​

A Niu Niu cardInfo has five parts separated by |: first card|banker|player 1|player 2|player 3. Each part lists that hand's cards 1–5 in order, written as in the structured result (AS, 10H, QD) and separated by spaces. Missing cards are left out (with an incomplete result from the data source a whole part can be empty).

ExampleMeaning
7H|KS QD 10C 3S 5H|4C 6D JS 9C KH|2D 8S QC AH 2C|7D 3H KD 5C 5DFirst card 7♥; banker K♠ Q♦ 10♣ 3♠ 5♥ = Bull 8; player 1 4♣ 6♦ J♠ 9♣ K♥ = Bull 9; player 2 2♦ 8♠ Q♣ A♥ 2♣ = Bull 3; player 3 7♦ 3♥ K♦ 5♣ 5♦ = Niu Niu

Structured result ​

The result of GET /rounds/{roundId} uses the same format as the GFI data-source interface. Cards are written <rank><suit>, for example AS, 10H, QD (suits S spades, H hearts, D diamonds, C clubs).

  • Baccarat: cards (positions P1 B1 P2 B2 P3 B3, undealt cards omitted), player, banker (points 0–9), winner (P, B, T), playerPair, bankerPair.
  • Dragon tiger: cards (D, T), winner (D dragon, T tiger, TIE). Dragon tiger ranks run A=1 … K=13 (ace lowest) and suits do not count, except that equal rank and equal suit is a suited tie.
  • Niu Niu: cards (positions F first card, B-1 to B-5 banker, P1-1 to P1-5 player 1, P2-1 to P2-5 player 2, P3-1 to P3-5 player 3; 21 cards in a complete result), hands (each hand's rank code 0–13) and winners (P1, P2, P3 each against the banker: P player wins, B banker wins). See Niu Niu round result for an example.

Bet zones and odds ​

The platform's default odds ("odds" is the net win multiple; the amount returned = stake × (1 + odds)):

ZoneCodeClassic classicNo commission nocomm
BankerB0.951 (0.5 when the banker wins with 6)
PlayerP11
TieT88
Banker pairBP1111
Player pairPP1111
Super SixS6—12 (banker wins with 6)
  • On a tie, banker and player stakes are returned.
  • Payouts are computed to 4 decimal places; anything smaller is truncated.

Dragon tiger (dragontiger):

ZoneCodeOdds
DragonD1 (half the stake returned on a tie)
TigerTG1 (half the stake returned on a tie)
TieT8
Suited tieST50
Dragon big, small, odd, evenDB, DS, DO, DE1
Tiger big, small, odd, evenTB, TS, TO, TE1
  • Big/small/odd/even is offered only on dragon tiger tables where you turn it on in Console "Table settings" (off by default); bets on those zones at other tables are rejected.
  • They look only at that side's card (A=1 … K=13): big 8–K, small A–6; odd A, 3, 5, 9, J, K, even 2, 4, 6, 8, 10, Q; a 7 loses all four. A dragon/tiger tie does not affect them.
  • Bet limits: each of these zones uses the main (dragon/tiger) minimum and maximum.
  • When a result has no cards (complete: false), these bets are refunded in full.

Texas Hold'em (holdem):

TableZoneCodeNotes
Player vs dealer casino (Casino Hold'em)AnteANTEPaid by the table's paytable (default: royal flush 100, straight flush 20, four of a kind 10, full house 3, flush 2, anything else 1); when the dealer does not qualify (no pair of fours or better) only the ante is paid
CallCALLMade after seeing the two hole cards and the flop, 2× the ante, pays 1:1; returned when the dealer does not qualify; absent when the player folds
AA bonusAABWins with a pair of aces or better from the two hole cards plus the flop (default: pair of aces, two pair, three of a kind, straight 7; flush 20; full house 30; four of a kind 40; straight flush 50; royal flush 100)
Player vs dealer thbp (Texas Hold'em Bonus Poker)AnteANTEPays 1 to 1 when the player wins with a straight or better (a flush or better on tables using the Atlantic City pay table), otherwise returned; the dealer does not need to qualify
Flop betFLOPMade after seeing the two hole cards (2× the ante); pays 1 to 1 when the player wins; absent if the player folds
Turn betTURNOptional after the flop (1× the ante) instead of checking; pays 1 to 1 when the player wins
River betRIVEROptional after the turn (1× the ante) instead of checking; pays 1 to 1 when the player wins
Bonus betBONUSUses only the player's first two cards (default: AA with dealer AA 1000, AA 30, AK suited 25, AQ/AJ suited 20, AK 15, KK/QQ/JJ 10, AQ/AJ 5, pairs 22–1010 3); pays even after a fold
Player vs player nlhe (no-limit)PotPOTEverything put into the pot in the hand; return is the uncalled part given back; winnings are after rake (the bet's rake)
  • Texas Hold'em Bonus Poker: all bets lose when the dealer wins and are returned on a tie.
  • The merchant that owns the table can change the paytable, seats and other settings; bet limits come from each merchant's own Hold'em bet-limit profiles (ante and side bet: AA bonus or bonus bet).
  • Voided hands: player-vs-dealer tables refund in full; player-vs-player tables return everything put in during the hand (blinds included).

Niu Niu (niuniu) zones, multipliers and the hold are covered in the next section, Niu Niu.

Niu Niu ​

The dealer's banker hand plays against three player hands, player 1, player 2 and player 3, with 5 cards each. Players bet that a given player hand beats the banker; each hand has an equal and a double zone, six zones in all, and a player may bet on several hands and zones in the same round.

Hands and ranking ​

  • Card values: A = 1, 2–9 at face value, 10, J, Q, K = 10.
  • If any three of the five cards add up to a multiple of 10 the hand has a bull, and the last digit of the other two cards' total is its value, Bull 1 to Bull 9 (a last digit of 0 is Niu Niu). With no such three cards the hand is No Bull.
  • Ranking: Niu Niu > Bull 9 > … > Bull 1 > No Bull. Equal ranks compare the highest single card of each hand (K > Q > J > 10 > … > A), then its suit (♠ > ♥ > ♣ > ♦). A deck never has two identical cards, so there are no ties.
  • Special hands: Five Face Bull (five J, Q, K), Bomb (four cards of the same rank) and Five Small Bull (five cards below 5 totalling 10 or less). They are off by default, and such hands then count as ordinary hands; at tables with special hands turned on they rank Five Small Bull > Bomb > Five Face Bull > Niu Niu.

Bet zones and odds ​

ZoneCodesPlayer hand beats the bankerPlayer hand loses
Player 1, 2, 3 equalP1E, P2E, P3EPays 0.95 to 1 (5% commission on the win)Loses the stake
Player 1, 2, 3 doubleP1D, P2D, P3DWins stake × the player hand's multiplier × 0.95Loses stake × the banker hand's multiplier

Double bets use the multiplier of the winning hand:

HandMultiplier
No Bull to Bull 6×1
Bull 7 to Bull 9×2
Niu Niu×3
Five Face Bull, Bomb, Five Small Bull (tables with special hands on)×4, ×4, ×5
  • These are the default rules (the platform's simulator table N01 uses them); individual tables can change the commission, the multipliers and special hands.
  • Payouts are computed to 4 decimal places; anything smaller is truncated.
  • With an incomplete result (complete: false, where the data source only gives each hand's outcome), equal bets settle as usual; a double bet needs the winning hand's rank, and without it the stake and hold are refunded.

The hold ​

A double bet can lose more than its stake, so when a player bets double the platform holds stake × (highest multiplier − 1) from the balance on top of the stake: stake × 2 by default (stake × 4 at tables with special hands on). After the result the bet is settled on the actual outcome, and the unused hold comes back together with the payout.

Double bet of 1,000 (plus a 2,000 hold)Returned at settlementPlayer win/loss
Player hand Niu Niu, wins1,000 + 2,000 + 1,000 × 3 × 0.95 = 5,850+2,850
Loses to a banker Bull 8 (×2)1,000 + 2,000 − 2,000 = 1,000−2,000
Loses to a banker Bull 3 (×1)1,000 + 2,000 − 1,000 = 2,000−1,000
  • A player without enough balance for stake + hold cannot place the bet; double bet limits apply to the stake, and the hold comes on top.
  • A bet's hold and bets[].hold are the hold, and payout and bets[].return include the returned hold, so take the win/loss from winLoss (= payout − stake − hold); see Niu Niu bets.
  • A voided round refunds the stake and the hold in full.

Dealing and revealing ​

  • Every round uses a fresh 52-card deck and 21 of its cards. A first card is turned up first (it belongs to no hand), and its value decides which hand is dealt first: A, 5, 9, K the banker; 2, 6, 10 player 1; 3, 7, J player 2; 4, 8, Q player 3. The deal then goes round banker → player 1 → player 2 → player 3, 5 cards each.
  • The hands are dealt face down and, after betting closes, revealed one by one: player 1 → player 2 → player 3 → banker.
  • With a fresh deck every round there is no shoe: shoe in bets and round results is the session (a new one every 60 rounds by default; roads are kept per session), and round is the round number within the session.

Niu Niu round result ​

json
{
  "ok": true,
  "data": {
    "roundId": "01K65N7Q2W4E6R8T0Y1V3J5K7P",
    "tableId": "N01",
    "shoe": "260928-01",
    "round": 7,
    "status": "settled",
    "code": "5893A",
    "cardInfo": "7H|KS QD 10C 3S 5H|4C 6D JS 9C KH|2D 8S QC AH 2C|7D 3H KD 5C 5D",
    "result": {
      "cards": {
        "F": "7H",
        "B-1": "KS", "B-2": "QD", "B-3": "10C", "B-4": "3S", "B-5": "5H",
        "P1-1": "4C", "P1-2": "6D", "P1-3": "JS", "P1-4": "9C", "P1-5": "KH",
        "P2-1": "2D", "P2-2": "8S", "P2-3": "QC", "P2-4": "AH", "P2-5": "2C",
        "P3-1": "7D", "P3-2": "3H", "P3-3": "KD", "P3-4": "5C", "P3-5": "5D"
      },
      "hands": { "B": 8, "P1": 9, "P2": 3, "P3": 10 },
      "winners": { "P1": "P", "P2": "B", "P3": "P" }
    },
    "complete": true,
    "rev": 1,
    "openedAt": "2026-09-28T06:30:05.010Z",
    "settledAt": "2026-09-28T06:30:51.640Z"
  }
}
  • The first card is 7♥, so player 2 was dealt first (player 2 → player 3 → banker → player 1 in turn). The banker had Bull 8, player 1 Bull 9, player 2 Bull 3 and player 3 Niu Niu: players 1 and 3 win, player 2 loses.
  • The formats of code and cardInfo are in Niu Niu result code and Niu Niu card string.
  • result is the result the data source sent, in the same format as the GFI data-source interface. The platform recomputes each hand's outcome from the cards; code and the bets always follow the recomputed result.

Valid stake and rolling ​

BaccaratDragon tiger
Valid stake validStakeBanker win: absolute difference between the banker net win and the player stake, plus tie, pair (and Super Six) stakes; player win: absolute difference between the player net win and the banker stake, plus the same; tie: only tie and pair (and Super Six) stakesDragon win: absolute difference between the dragon net win and the tiger stake, plus tie and suited-tie stakes; tiger win mirrors it; tie: tie + suited tie + the half of dragon/tiger stakes actually lost. Each big/small/odd/even pair (dragon big/small, dragon odd/even, tiger big/small, tiger odd/even) adds the absolute difference between the winning side's net win and the other side's stake, or both stakes when a 7 loses both
Rolling rollingTotal stake of lost bets (Super Six excluded)Total stake of lost bets, plus the half of dragon/tiger stakes lost on a tie

Niu Niu (niuniu): the valid stake is the equal-bet stakes plus each double-bet stake × the multiplier actually applied (bets[].mult; refunded bets do not count); rolling is the amount lost (the stake for an equal bet, stake × the banker hand's multiplier for a double bet).

Voided slips have a valid stake and rolling of 0.

elite Tenant Integration API v1