Baccarat — Rules, Payouts & Odds
Baccarat on Ganbate is punto banco: two hands, Player and Banker, are dealt from a freshly shuffled single deck, and you bet on which one will finish closer to nine. You are not one of the hands — "Player" is just the name of a spot on the felt, and both hands are dealt by fixed rules that nobody, including you, can influence once the cards are committed. Cards are worth their face value, aces are 1, and tens and pictures are 0; only the last digit of the total counts, so 7 + 8 = 5, not 15. Whether a hand takes a third card is decided by a rulebook (the tableau), not by a decision — there is nothing to play after you have placed your chips. Player wins pay 2.00×, Banker wins 1.95× (a 5% commission is built into the price), Tie pays 9.00×, and there are six optional side bets. Every card comes from a provably fair seed pair, so you can recompute the whole deal yourself afterwards.
Coins on Ganbate are play money. They have no cash value and can never be withdrawn, cashed out, redeemed, transferred, or traded.
How to play
The table is at /baccarat. It is a live-table layout: an illustrated felt, the two hands dealt in the middle, and the bet spots along the bottom — six side bets on the top row, the three main spots (Player · Tie · Banker) below them.
| Control | What it does |
|---|---|
| Chips / Amount | Two ways to stake. Chips: pick a denomination and tap a spot to drop a chip on it. Amount: tap a spot to focus it, then type a decimal Coin amount for that spot. Switching modes clears the table. |
| Chip tray | The denominations you can place: 1, 5, 10, 20, 30, 50, 100 Coins. Tapping a spot again adds another chip of the current denomination. |
| Bet spots | Player, Tie, Banker, and the side bets P Bonus, P Pair, Perfect, Either, B Pair, B Bonus. Each spot shows its odds and, once staked, the chips on it and its running total. |
| Undo (chips mode) | Removes the last chip you placed. |
| Clear | Wipes every spot. |
| Deal | Deals the round. One deal settles every spot you have staked. |
| Total stake | The sum across all spots — that is what leaves your balance. |
You can stake several spots in one deal (a Tie plus a pair plus a bonus, for example): the API accepts up to 9 wagers per deal, one per bet type, no duplicates. The one combination the table refuses is Player and Banker at the same time — they are opposite outcomes, and the page clears one when you tap the other, so the most spots you can actually cover in a single deal is 8. Tie and the side bets stack freely alongside either.
After Deal, the cards fly out of the shoe one beat at a time in the real dealing order, each hand's points ticking up as its cards land face-up. Then the verdict rests: Player wins, Banker wins, Tie, or Tie — stakes returned. The overlay shows your net (total payout minus total stake), and on a win the effective multiplier across everything you staked — so if you staked 110.00 across two spots and got 200.00 back, it reads 1.82×, not 2.00×.
Under the felt is a bead plate — the roadmap, the same scoreboard a live table keeps. It records the winner of each settled deal and survives reloads (it lives in your browser's local storage). Read the honesty note in "House edge and RTP" before you try to read anything into it.
Bet limits (shared by every instant game):
- Minimum: 0.00 Coins at the API level — but the table will not deal with nothing on it, so in practice the smallest deal is one 1-Coin chip on one spot.
- Maximum: 100,000.00 Coins per spot.
Source: MIN_BET_CENTS = 0, MAX_BET_CENTS (main/shared/src/modules/core/casino/dice.ts), MAX_BACCARAT_BETS = 9 and the one-wager-per-type rule (main/shared/src/modules/core/casino/instant.schemas.ts), CHIP_DENOMINATIONS (main/apps/web/src/features/casino/components/ChipTray.tsx).
The rules
A fresh, complete 52-card deck is shuffled for every single deal. There is no shoe that runs down over many hands — six cards are drawn from a full deck, and the deck is rebuilt from scratch for the next deal. Nothing carries over.
Card values
| Card | Points |
|---|---|
| Ace | 1 |
| 2–9 | Face value |
| 10, J, Q, K | 0 |
A hand's total is the sum modulo 10 — only the last digit counts. 9 + 7 = 16 → 6.
The deal
Six cards are drawn. The first four are dealt alternately, Player first:
card 1 → Player card 2 → Banker card 3 → Player card 4 → Banker
card 5 → Player's third (if drawn) card 6 → Banker's third (if drawn)Natural. If either hand's first two cards total 8 or 9, both hands stand immediately and the round is over. No third cards.
Player's third card. Otherwise, Player draws a third card on a two-card total of 0–5 and stands on 6 or 7.
Banker's third card (the tableau — this is the whole rulebook, taken straight from the code):
| Banker's two-card total | Banker draws when… |
|---|---|
| 0, 1, 2 | Always |
| 3 | Player's third card is not an 8 |
| 4 | Player's third card is 2–7 |
| 5 | Player's third card is 4–7 |
| 6 | Player's third card is 6 or 7 |
| 7 | Never |
If Player stood (no third card), Banker simply draws on 0–5 and stands on 6 or 7.
Higher final total wins. Equal totals are a tie.
Source: baccaratDeal, bankerDraws, baccaratCardPoints (main/shared/src/modules/core/casino/baccarat.ts).
Main bets
Multipliers below are total return per Coin staked (stake included), which is how the code stores them. Payout is floor(stake × multiplier) in integer Coin cents.
| Bet | Result | Pays | Odds label on the felt |
|---|---|---|---|
| Player | Player wins | 2.00× | 1:1 |
| Banker | Banker wins | 1.95× | 0.95:1 (5% commission) |
| Tie | Totals equal | 9.00× | 8:1 |
| Player or Banker | Tie | 1.00× — stake returned (push) | — |
| Player or Banker | The other side wins | 0× | — |
Source: BACCARAT_PAYOUT_X100 = { player: 200, banker: 195, tie: 900 }, baccaratMultiplierX100.
Side bets
All six are settled from the same deal as your main wager, and all except the bonuses read only the four opening cards.
| Side bet | Wins when | Pays | Felt label |
|---|---|---|---|
| P Pair | Player's first two cards are the same rank | 16.83× | 15.83:1 |
| B Pair | Banker's first two cards are the same rank | 16.83× | 15.83:1 |
| Either | Either hand has such a pair | 8.67× | 7.67:1 |
| Perfect | Either hand's pair is also the same colour (both red or both black) | 25.50× | 24.50:1 |
One deliberate deviation from the eight-deck table game, stated plainly: because a single deck cannot contain two identical cards, "perfect" here means a same-colour pair, not a duplicate card. The price was set to that definition, not inherited from it.
P Bonus / B Bonus (Dragon-Bonus style). You pick a side; that side must win:
| Outcome for your chosen side | Pays |
|---|---|
| Wins with a natural (first two cards total 8 or 9) | 2.00× (1:1) |
| Wins by a margin of 9 | 31.00× (30:1) |
| Wins by 8 | 11.00× (10:1) |
| Wins by 7 | 7.00× (6:1) |
| Wins by 6 | 5.00× (4:1) |
| Wins by 5 | 3.00× (2:1) |
| Wins by 4 | 2.00× (1:1) |
| Wins by 1, 2 or 3 | 0× |
| Tie, both hands natural | 1.00× — stake returned |
| Anything else (your side loses, or a non-natural tie) | 0× |
The natural check comes first: a natural win pays 1:1 regardless of the margin. The "margin" is the difference between the two final totals.
Source: BACCARAT_SIDE_PAYOUT_X100, baccaratSideMultiplierX100, baccaratBonusMultiplierX100 (same file).
House edge and RTP
Baccarat is the game here where the spot you choose changes the number most — Keno and Plinko drift by a tenth of a point across their settings; this table spans 1% to 15.7%. So it is worth being precise. These are exact, from the code's own payouts and the single-deck tableau (every probability below is an enumeration over the deck, not a simulation):
| Bet | Probability of winning | Pays | RTP | House edge |
|---|---|---|---|---|
| Banker | 45.9624% | 1.95× | 98.9883% | 1.0117% |
| Player | 44.6760% | 2.00× | 98.7136% | 1.2864% |
| Tie | 9.3615% | 9.00× | 84.2539% | 15.7461% |
| P Pair / B Pair | 5.8824% | 16.83× | 99.0000% | 1.0000% |
| Perfect | 3.8816% | 25.50× | 98.9808% | 1.0192% |
| Either | 11.4142% | 8.67× | 98.9608% | 1.0392% |
| P Bonus | 30.7991% (any return) | margin table | 96.9694% | 3.0306% |
| B Bonus | 30.1092% (any return) | margin table | 90.2559% | 9.7441% |
(Player/Banker ties push, so their RTP includes the ~9.36% of deals that give the stake back. The bonus "probability of winning" column counts every deal that returns anything at all, including the 1.7536% natural-tie push, which returns the stake and no more.)
Four things fall out of that table, and I would rather you hear them from me:
- Every wager on this table has a negative expectation. Not one of them is a good bet; they are only more and less expensive ways to lose the same Coins over time. Nothing below is advice to bet one spot rather than another.
- Banker and Player differ by about a quarter of a percentage point, and Banker's is the smaller edge even after the 5% commission. A smaller edge is still an edge against you — a cheaper losing bet does not become a winning one.
- The Tie bet is the most expensive single wager in the casino. At 8:1 against a 9.3615% chance, it keeps about 15.7 Coins of every 100 wagered. It pays rarely and it pays well; those two facts are the same fact.
- The two bonus bets are not the same price. B Bonus is roughly three times as expensive as P Bonus (9.74% against 3.03%): Banker wins slightly more often, but wins by the wide margins the bonus actually pays for less often than Player does — the tableau lets Banker act on Player's third card, which turns losses into narrow wins rather than blowouts.
The pair prices (16.83× / 25.50× / 8.67×) look unusual next to the 11:1 and 25:1 you may know from an eight-deck table. They are unusual on purpose: on a single deck those events are much more likely than in an eight-deck shoe, so the eight-deck prices would have been badly wrong in both directions. They are priced to this deck, to the same ~1% edge as the rest of the site.
Source: BACCARAT_PAYOUT_X100, BACCARAT_SIDE_PAYOUT_X100, baccaratBonusMultiplierX100 and the tableau in main/shared/src/modules/core/casino/baccarat.ts. Pair probabilities are enumerated over all 6,497,400 ordered opening deals; the main-bet and bonus figures are enumerated over every reachable deal of the single deck, with the code's own draw rules. The full cross-game table is on the House Edge page.
No strategy overcomes this
Baccarat has no decisions in it. You cannot hit, stand, split, or fold; once the chips are down, the tableau plays both hands mechanically. So there is no skill component to improve, and every published "system" is a bet-sizing scheme, not a strategy:
- The roadmap predicts nothing. The bead plate is history, and history here is inert: the deck is rebuilt and reshuffled for every deal, and the cards come from a fresh HMAC block keyed to your next nonce. Six straight Banker wins do not make Player "due" — the next deal has never heard of them. The board is on the felt because a baccarat table has one, not because it forecasts anything.
- There is nothing to count. Card counting needs a depleting shoe. There isn't one.
- Bet progressions (Martingale, Paroli, 1-3-2-6) do not work. A negative-expectation bet stays negative-expectation at every size. Scaling your stakes rescales your swings, not your expectation.
The honest summary: over a long enough run, every wager on this table returns less than it costs — about 99 Coins per 100 on Banker, Player and the pairs; about 97 on P Bonus; about 90 on B Bonus; about 84 on Tie. This page is not a strategy guide and the game is not beatable. No spot, no combination of spots and no staking pattern makes the expected return positive, and Coins have no cash value in any case — there is nothing to win.
One thing that does change the number: Edge Rebate
If a deal's total stake is 1,000.00 Coins or less and you have not used your daily Zero Edge allowance (50,000.00 Coins of wagers per UTC day), the payout is scaled by 100/99 — the site's standard 1% edge is refunded. Baccarat qualifies: it is an instant, single-settlement bet. (Multi-step rounds, Crash and Poker do not.)
It refunds a flat 1% — not whatever edge your spot actually carries. Scaled by 100/99, Banker's RTP becomes about 99.99%, Player's 99.71%, P Pair / B Pair 100.00%, Either 99.96%, Perfect 100.02%, P Bonus 97.95%, B Bonus 91.17% and Tie 85.11%, all before the floor in zeroEdgePayoutCents rounds the last cent to the house. So the expensive spots stay expensive: a 1% refund does not touch Tie's other ~14.7%. (The Perfect line sitting a hundredth of a point over break-even is a pricing artefact of the single deck, disclosed on the House Edge page, not a way to win anything — Coins have no cash value, and the allowance is capped at 50,000.00 Coins of wagers a day.)
Source: ZERO_EDGE_BET_LIMIT_CENTS, ZERO_EDGE_DAILY_CAP_CENTS, zeroEdgePayoutCents (main/shared/src/modules/core/casino/zeroedge.schemas.ts).
How the cards are derived (provably fair)
Baccarat consumes six random numbers per deal — one per card, whether or not the third cards end up being used. All six are drawn before anything is decided.
Step 1 — the bytes. Your seed pair produces 32 bytes:
HMAC-SHA256(key = serverSeed, message = "clientSeed:nonce:cursor")The key is the 64-character hex server seed as a UTF-8 string, not the decoded bytes. For baccarat the cursor is always 0: six numbers fit inside one 32-byte block (which yields eight).
Step 2 — the floats. Each group of four bytes becomes a uniform float in [0, 1):
floatᵢ = b[4i]/256 + b[4i+1]/65536 + b[4i+2]/16777216 + b[4i+3]/4294967296Six floats, f0 … f5.
Step 3 — the cards. A partial Fisher–Yates shuffle over the 52-card deck. The deck starts as the array [0, 1, 2, … 51], and for each draw i (from 0):
index = floor(fᵢ × (52 − i))
card = deck[index] ← the card you were dealt
deck[index] = deck[51 − i] ← the last live card fills the holeThat swap-with-last step is what makes the draw without replacement: a card already dealt can never come out again. A card is an integer 0–51, decoded as:
rank = card mod 13 → 0 = 2, 1 = 3, … 8 = 10, 9 = J, 10 = Q, 11 = K, 12 = A
suit = floor(card / 13) → 0 = ♠, 1 = ♥, 2 = ♦, 3 = ♣Step 4 — the deal. The six cards go out in the order above (Player, Banker, Player, Banker, then the thirds), the tableau decides who draws, and the payouts follow from the tables above. Nothing else is random: given the six cards, the entire round — including every side bet — is forced.
Source: drawCards / drawShoe and the card encoding (main/shared/src/modules/core/casino/cards.ts), baccaratDeal (.../baccarat.ts), bytesToFloats (.../fairness.ts), and the settlement path placeBaccaratBet (main/server/core/src/casino/service.ts), which calls baccaratDeal(drawCards(fairnessFloats(seed, 6), 6)).
Your nonce increases by exactly 1 for every settled bet on the current seed pair, and the increment happens inside the same locked transaction that settles the bet — so nonce order is settlement order, and a deal consumes the nonce as it stood before the increment. One deal is one nonce, no matter how many spots you staked.
Verifying it yourself
- /fairness — the commitment scheme, the formula, and your seed panel: server seed hash (my commitment, published before you bet), client seed (yours, 1–64 characters, settable when you rotate), and nonce. Rotate seed pair reveals the old server seed, which makes every bet made under it checkable.
- /verify — pick baccarat, paste the revealed server seed, the client seed and the nonce. It redeals the hand and prints both hands, their points and the winner, and checks the revealed seed against the committed hash. Baccarat needs no extra parameter (unlike Wheel or Mines), so those three values are the whole input.
- /bets (sign-in required) — your own bet history. Baccarat is an instant bet, so every deal is listed with its client seed, committed hash and nonce — and, once you have rotated the seed pair it was played on, the revealed server seed and a one-click Verify link that opens the verifier pre-filled. Deals still riding your active seed show as sealed and get no link, because handing out a live server seed would let it be played against.
So you do not have to copy the revealed seed down: rotation retires the pair rather than deleting it, and every deal made under it carries the seed on /bets from that moment on.
A worked example
Suppose you put 100.00 Coins on Player and 10.00 Coins on P Bonus — a 110.00 Coin total stake — and these are your real values:
| Input | Value |
|---|---|
| Server seed (revealed after rotation) | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| Committed hash (shown before the bet) | ffe054fe7ae0cb6dc65c3af9b61d5209f439851db43d0ba5997337df154668eb |
| Client seed | ganbate |
| Nonce | 2 |
| Cursor | 0 |
1. Check the commitment. SHA-256("aaaa…aaaa") = ffe054fe…68eb, matching the hash published before the bet. The seed was not swapped after the fact.
2. Compute the bytes. HMAC-SHA256(key = "aaaa…aaaa", message = "ganbate:2:0") → 32 bytes.
3. Compute the six floats.
f0 = 0.32310497 f1 = 0.13452122 f2 = 0.75988300
f3 = 0.59460094 f4 = 0.13691554 f5 = 0.524077944. Draw six cards. Fisher–Yates, index = floor(fᵢ × (52 − i)), with the last live card filling each hole:
| i | index | card drawn | |
|---|---|---|---|
| 0 | floor(0.32310497 × 52) = 16 | 16 → 5♥ | Player |
| 1 | floor(0.13452122 × 51) = 6 | 6 → 8♠ | Banker |
| 2 | floor(0.75988300 × 50) = 37 | 37 → K♦ | Player |
| 3 | floor(0.59460094 × 49) = 29 | 29 → 5♦ | Banker |
| 4 | floor(0.13691554 × 48) = 6 | 50 → K♣ | Player's third (slot 6 now holds card 50 — the hole from draw 1 was filled by the last live card) |
| 5 | floor(0.52407794 × 47) = 24 | 24 → K♥ | Banker's third |
5. Play the tableau.
- Player: 5♥ + K♦ = 5 + 0 = 5. Banker: 8♠ + 5♦ = 8 + 5 = 13 → 3.
- Neither first-two total is 8 or 9, so no natural.
- Player is on 0–5 → draws: K♣ (0 points). Player stands on 5.
- Banker is on 3, and the Player's third card is a King (0 points, not an 8) → draws: K♥ (0 points). Banker stands on 3.
- 5 beats 3 — Player wins.
6. Settle both spots.
- Player, 100.00 Coins =
10,000cents →floor(10,000 × 200 / 100)=20,000cents = 200.00 Coins. - P Bonus, 10.00 Coins: Player won, but not with a natural, and the margin is 5 − 3 = 2 — under 4, so the bonus loses.
0cents. - Total returned: 200.00 Coins on a 110.00 stake → net +90.00 Coins, an effective 1.82× across the deal. (Had this deal qualified for Edge Rebate, the return would be
floor(20,000 × 100 / 99)=20,202cents = 202.02 Coins.)
Every line of that is reproducible on /verify, or in a dozen lines of any language with an HMAC library. If your numbers ever differ from what the table showed you, that is a bug or a lie, and I want to hear about it: [email protected].
Rules, odds and fairness: Odds & House Edge · Provably Fair · Verify a bet · Your bets · How Coins work · Responsible Play
Ganbate is a free-to-play social casino for adults 18+. Coins have no cash value. They cannot be withdrawn, cashed out, redeemed, transferred between players, gifted, sold, or traded. There are no prizes of monetary value. Free Coins are always available, so you never need to buy any.