LOTTO) screens need. Live payout rates always come from Pay Table; the rates below are examples.| betType | Digits | EN | TH | Wins when | Example rate |
|---|---|---|---|---|---|
6-DIGIT | 6 | 6 digits | 6 หลัก | All 6 drawn digits, in order. | 1000000 |
5-DIGIT | 5 | 5 digits | 5 หลัก | The last 5 drawn digits, in order. | 50000 |
4-BOTTOM | 4 | 4 bottom | 4 ตัวล่าง | The last 4 drawn digits, in order. | 10000 |
4-TOAD | 4 | 4 toad | 4 ตัวโต๊ด | The last 4 drawn digits in any order (a repeated digit must repeat the same number of times). | 2500 |
3-BOTTOM | 3 | 3 bottom | 3 ตัวล่าง | The last 3 drawn digits, in order. | 500 |
3-TOAD | 3 | 3 toad | 3 ตัวโต๊ด | The last 3 drawn digits in any order (same digits, same counts). | 150 |
2-BOTTOM | 2 | 2 bottom | 2 ตัวล่าง | The last 2 drawn digits, in order. The only bet type the lucky number boosts. | 90 |
1-TOP | 1 | 1 top (วิ่งบน) | วิ่งบน | The digit appears anywhere in the last 3 drawn digits (pays once even if it appears more than once). | 3 |
1-BOTTOM | 1 | 1 bottom (วิ่งล่าง) | วิ่งล่าง | The digit appears in the first 2 drawn digits (pays once even if both match). | 4 |
number is a JSON string of ASCII digits 0-9, exactly as long as the bet type's digit count (6-DIGIT 6, 5-DIGIT 5, 4-BOTTOM 4, 4-TOAD 4, 3-BOTTOM 3, 3-TOAD 3, 2-BOTTOM 2, 1-TOP 1, 1-BOTTOM 1).betType is exact and case-sensitive: upper-case with a hyphen. Old spellings such as "6digit" or "2-bottom" are rejected.99930 (Game.InvalidBetArea).betType + number; the shared room endpoints use type + number, and their LOTTO winAreas use TYPE_NUMBER (e.g. 2-BOTTOM_17).{betType, number, amount}; amount is a JSON number (a numeric string is also accepted), > 0, decimals allowed.maxItemsPerTicket is always 20).betType + number pair in one ticket. The compare is on the exact strings, so permutations of a TOAD number are not duplicates.amount must be ≥ the room's minimum for the currency when one is set (pay-table limits.minPerItem).betType + number, the total over all players' tickets in the round plus this item must be ≤ the room's maximum when one is set (pay-table limits.maxPerNumber).betType must have a positive rate in the round's payout table.| Field | Digits | Used by |
|---|---|---|
drawnNumber | d0 d1 d2 d3 d4 d5 | 6-DIGIT |
bottom5 | d1 d2 d3 d4 d5 | 5-DIGIT |
bottom4 | d2 d3 d4 d5 | 4-BOTTOM (in order), 4-TOAD (any order) |
bottom3 | d3 d4 d5 | 3-BOTTOM (in order), 3-TOAD (any order) |
bottom2 | d4 d5 | 2-BOTTOM; also becomes the next round's lucky number |
front2 | d0 d1 | No bet type (informational only) |
runBot | [d3, d4, d5] | 1-TOP (วิ่งบน) |
runFront | [d0, d1] | 1-BOTTOM (วิ่งล่าง) |
{
"drawnNumber": "482917",
"bottom5": "82917",
"bottom4": "2917",
"bottom3": "917",
"bottom2": "17",
"front2": "48",
"runBot": [
"9",
"1",
"7"
],
"runFront": [
"4",
"8"
],
"winners": [
"6-DIGIT: 482917",
"5-DIGIT: 82917",
"4-BOTTOM: 2917",
"4-TOAD: any permutation of 2, 9, 1, 7 (e.g. 1279)",
"3-BOTTOM: 917",
"3-TOAD: any permutation of 9, 1, 7 (e.g. 179)",
"2-BOTTOM: 17",
"1-TOP: 9, 1 or 7",
"1-BOTTOM: 4 or 8"
]
}rate is a gross multiplier including the stake: winAmount = amount × rate, truncated to 2 decimals. A losing line pays 0.WON when at least one line won (its netWin can still be negative), else LOST.exampleRate above is the default rate only; always read live rates from GET …/pay-table.number; the split fields above come in gameResult of GET …/rooms/{roomId}/result and SSE round_settled.WAITING) recompute the lucky number from the latest settled round and the current settings; they match settlement while the round is open and the settings are unchanged.rooms[].lucky and round.lucky {number, multiplier, rate}; pay-table lucky {enabled, multiplier, appliesTo}; items[].isLucky; my-result items[].baseRate / luckyMultiplier / rate; results/inquiry luckyNumber (the value in effect for that round).| Mode | How the number is drawn | Client seed role |
|---|---|---|
MULTI | Commit-reveal. At round open the server draws 6 random digits and embeds them in the seed {brand}_{gameCode}_{roomID}_{unixNano}_{drawn6}_{nonce 64 hex} (brand is currently always default); serverSeedHash = SHA-256 hex of that seed is published at once. At settlement the seed is revealed as revealedServerSeed and number is its 5th _-separated part. | None; players cannot influence the result. |
MULTI_CSEED | At round open the server creates a round server seed (32 random bytes, 64 hex) and publishes serverSeedHash = SHA-256 hex of it. At settlement: msg = seed0-nonce0:seed1-nonce1:… over all slots in index order; h = HMAC-SHA256(key = round server seed, msg); digit i = h[i] % 10 for i = 0..5. The revealed seed is the round server seed, and round/provably-fair returns msg as combinedClientSeed. | The round has N client-seed slots (room setting, 3 when unset), pre-filled with default seeds hex(HMAC-SHA256(key = round server seed, msg = "default:{i}")), nonce 0, owner 0. Each successful ticket, after its debit, claims the first unclaimed slot with the player's client seed + nonce (the client seed is "default" until set with POST /gapi/v1/c/g/{gameCode}/provably-fair/client-seed; the nonce then increments). First come, first served; once all N are claimed further tickets contribute nothing, and one player can claim several slots with successive tickets. Each claim is broadcast as SSE seed_slot_updated; a failed claim never fails the ticket. |
roundDurationSec (0 means 900 s). Rounds are aligned to wall-clock boundaries (24-hour rooms align to 00:00 Asia/Bangkok).closeAt is when betting closes; drawAt always equals closeAt.betting → (closeAt passes and the server closes it) rolling → settled. On a settlement failure the round becomes cancelled: its tickets are refunded and stay WAITING in ticket history.round_started event: after SSE round_settled, or once closeAt passes, call POST …/round (or GET …/rooms) for the next round.| Value set | Values |
|---|---|
| roundStatus | betting, rolling, settled, cancelled |
| ticketStatus | WAITING, SETTLED |
| ticketOutcome | WON, LOST |
| ticketItemResult | WAITING, WON, LOST |
roundId / betID is not found from a demo session, and the other way round.