Reference
Game actions
The launcher-side endpoints for every game: Mines, Magic Ball, Spin da’ Bottle, Under Over 7, Dice, Lucky Wheel, Twin Wheels, Prize Drum, Gem Rush, Chilli Sevens, Big Top Coins, Prism Sevens, Nova Drop and Goal Jet.
These endpoints are called by the game launcher in the player's browser, with the short-lived token from the launch URL — not by your server. They are documented because you will see the resulting rounds and transactions, and because some operators build their own front end.
·You usually do not call these
/v1/game/*.Session state
/v1/game/stategame-launcherEverything a client needs to render: the session, the player's balance as your wallet last reported it, the stake limits, and the current fairness commitment.
The generic action endpoint
/v1/game/play/{action}game-launcherEvery single-player game is driven through one endpoint. Adding a game does not add an endpoint — the action name and body are defined by the game's own contract, which is why our catalogue can grow without your client changing.
Mines
Start a round
/v1/game/play/startgame-launcherBody
stakedecimal stringrequired | The stake. Debited before the grid is generated. |
minesintegerrequired | How many mines on the 5×5 grid. More mines, higher multipliers. |
{
"round_id": "rnd_7c31ea",
"state": "ACTIVE",
"revealed": [],
"multiplier": "1.00",
"balance": "489.50"
}Pick a tile
/v1/game/play/pickgame-launcherBody
tileintegerrequired | 1–25. Picking a tile that is already open is refused. |
A safe tile raises the multiplier. A mine ends the round at zero and reveals the whole grid, so the player can verify the layout against the seed.
Cash out
/v1/game/play/cashoutgame-launcherSettles at the current multiplier and credits the win through your wallet. Cashing out with nothing revealed is refused.
Magic Ball
/v1/game/play/playgame-launcherBody
stakesdecimal string[3]required | One stake per cup, in order. "0" means no chip on that cup — the player is not picking one cup, they are placing chips, and may cover more than one. |
client_seedstringoptional | Optional. Folded into the fairness commitment for this round. |
At least one cup must carry a chip, and no more than maxSpots of them (two by default) — covering all three would be a stake that cannot lose, which is not a game.
Spin da’ Bottle
/v1/game/play/spingame-launcherBody
stakedecimal stringrequired | The stake. |
pickstringrequired | "up" or "down". Settled on the spin. |
client_seedstringoptional | Optional. Folded into the fairness commitment for this round. |
Under Over 7
/v1/game/play/rollgame-launcherBody
stakedecimal stringrequired | The stake. |
pickstringrequired | "under" (2–6), "seven" (exactly 7) or "over" (8–12). |
Two dice, settled immediately. The response carries both dice, their total, the outcome that total fell into, and the multiplier the chosen call pays.
iEvery call returns the same, so the seven is not a worse bet
{
"round_id": "rnd_8q2v…",
"dice": [3, 4],
"total": 7,
"outcome": "seven",
"pick": "seven",
"multiplier": "5.82",
"status": "won",
"stake": "1.00",
"payout": "5.82"
}Dice
/v1/game/play/rollgame-launcherBody
stakedecimal stringrequired | The stake. |
targetintegerrequired | Win under this. Bounded by the release’s minTarget and maxTarget, 2–98 by default. |
A number in 0.00–99.99 is drawn and you win if it comes in strictly under your target, settled immediately. The response carries the roll, the target, the multiplier that target pays and its win_chance.
iEvery target returns the same, so a long shot is not a worse bet
{
"round_id": "rnd_3k9m…",
"roll": "42.17",
"target": 50,
"multiplier": "1.94",
"win_chance": "50%",
"status": "won",
"stake": "1.00",
"payout": "1.94"
}Lucky Wheel
/v1/game/play/spingame-launcherBody
stakedecimal stringrequired | The stake. Every prize is a multiple of it. |
Sixteen faces, one draw, settled immediately. The response carries the segment that came up, its multiplier, and the angle the rim stopped at — the last only so a client can animate to the answer the server already gave.
!The faces are equal and the chances are not
GET /v1/game/state as config.segments, and are what a player re-derives when verifying a round. A client drawing its own ladder would eventually draw one the engine had stopped using — read them from the session.{
"round_id": "rnd_ipskzzin6dxe2f5vmr6k",
"segment": 7,
"multiplier": "0.6",
"angle": "168.7500",
"status": "won",
"stake": "2.00",
"payout": "1.20",
"server_seed_hash": "2040c88d…",
"nonce": "1"
}Twin Wheels
/v1/game/play/spingame-launcherBody
betsobjectrequired | Multiplier to stake, as decimal strings — any of "2", "4", "6", "15", "24", "54". Cover as many as you like; the round's stake is their total. Each must be at least the table minimum. |
free_bet_grant_idstringoptional | Fund the round from a free bet. The bets must then total exactly the grant’s stake, or the round is refused and the free bet is kept. |
Two wheels of twenty-five faces each stop on one face apiece, and the pair settles to one multiplier: a match pays itself, a Wild becomes the other wheel's multiplier, two different multipliers pay x2, and two Wilds re-spin free with every bet still riding. The stake on the multiplier that lands is paid at that multiplier; the others are lost.
spins lists every spin the round took — more than one only when Wilds re-spun — as face indexes on each rim, so a client can animate each in turn. outcome is the multiplier that settled.
iThe faces are the odds
GET /v1/game/state as config.rimA and config.rimB. Of 625 pairs, 25 re-spin and the other 600 settle: x2 286, x4 144, x6 96, x15 39, x24 24, x54 11. Every bet returns between 95.33% and 99.0%, and the game publishes the lowest. Its return is not an operator setting, because the payouts are printed on the faces and the odds are the faces.{
"round_id": "rnd_4w8cqk2j0hz1n7yd5ex3",
"spins": [
{ "a": 0, "b": 0, "face_a": "W", "face_b": "W" },
{ "a": 3, "b": 0, "face_a": "15", "face_b": "W" }
],
"free_spins": 1,
"outcome": "15",
"multiplier": "15",
"status": "won",
"stake": "2.00",
"payout": "15.00",
"server_seed_hash": "9d1f30a2…",
"nonce": "4"
}Prize Drum
/v1/game/play/spingame-launcherBody
betsobjectrequired | Colour multiple to stake, as decimal strings — any of "40", "20", "10", "5", "4", "2". Back any or all; the round's stake is their total. |
free_bet_grant_idstringoptional | Fund the round from a free bet. The bets must then total exactly the grant’s stake. |
A drum of fifty equal sectors. A colour sector pays the stake on that colour at its multiple; a free-spin sector grants four spins, two, or one (a respin), played straight away with the same bets at no cost — and they can grant more. spins lists every spin of the round in order, each with the sector it landed on, its face ("40"…"2", "F4", "F2" or "R") and what it payout; the round's payout is their sum.
iEvery colour returns exactly 40/41
GET /v1/game/state as config.sectors. The return is not an operator setting: the multiples are printed on the colours and the odds are the sectors. A round is capped at 100 spins, which no round will reach in practice.{
"round_id": "rnd_t0m8a3zq6c1v4h7n2wxe",
"spins": [
{ "sector": 34, "face": "F2", "payout": "0" },
{ "sector": 8, "face": "10", "payout": "10" },
{ "sector": 4, "face": "40", "payout": "40" }
],
"free_spins": 2,
"status": "won",
"stake": "2.00",
"payout": "50.00",
"server_seed_hash": "4e2b77c0…",
"nonce": "9"
}Gem Rush
Three actions on one round, the way Mines has them. dig opens it and takes the stake. A dig that pays nothing settles there; one that pays keeps the round open with the win on the table, until collect pays it or gamble doubles or loses it. Your wallet sees one debit and, at most, one credit — the gamble is not a chain of rounds.
Dig
/v1/game/play/diggame-launcherBody
betsobjectrequired | Gem to stake, as decimal strings — any of diamond, amber, rose, sapphire, quartz, ruby, topaz, emerald. Back any or all; the round's stake is their total. |
free_bet_grant_idstringoptional | Fund the round from a free bet. The bets must then total exactly the grant’s stake. |
The rock gives up one gem — or, one dig in twenty, TNT (tnt: true) gives three, four or five, each drawn independently. finds lists them in order, each with its gem, the multiplier drawn from that gem's own list, and its payout: the stake on that gem times the multiplier. win is their sum. status is "lost" (settled, nothing found that was backed), "won" (open, the win is on the table) or "collected" (settled at once, because the release has the gamble off or the win cannot be doubled under the maximum win). can_gamble says whether a call is allowed.
{
"round_id": "rnd_g3m5r8u2s4h6x1k9q7wz",
"tnt": true,
"finds": [
{ "gem": "ruby", "multiplier": 10, "payout": "10.00" },
{ "gem": "emerald", "multiplier": 3, "payout": "3.00" },
{ "gem": "amber", "multiplier": 3, "payout": "0.00" }
],
"win": "13.00",
"steps": 0,
"can_gamble": true,
"status": "won",
"stake": "2.00",
"settled": false,
"server_seed_hash": "b71e09d4…",
"nonce": "12"
}Gamble
/v1/game/play/gamblegame-launcherBody
callstringrequired | "small" (1–7) or "big" (8–14). |
A number from 1 to 14 is drawn. Right doubles win and the round stays open; wrong settles it at nothing. The response carries the number, whether the call was correct, and the new win, steps and can_gamble. A win may be doubled up to gambleSteps times (five by default) and never past the maximum win; past either, a call is refused and the win must be collected.
Collect
/v1/game/play/collectgame-launcherSettles the round at win and credits it through your wallet. A win left on the table is not lost: the round stays open, GET /v1/game/state returns it under round.state, and the launcher offers the same choice when the player comes back.
iEvery gem returns at least 97.51%, and the gamble changes nothing
gamble: false where a double-or-nothing feature is not allowed.Prism Sevens
/v1/game/play/spingame-launcherBody
stakedecimal stringrequired | The stake for the spin: it covers five lines. 0.20–20.00 by default. |
free_bet_grant_idstringoptional | Fund the spin from a free bet, at exactly the grant’s stake. |
Three reels, three rows, five lines — the rows and the two diagonals. A line pays for three sevens of one colour; a window full of gold, red or green sevens also pays the Grand (1000×), Major (100×) or Mini (25×) jackpot as jackpot. scatters counts the scatters in view: three start ten free spins, which come back played, in order, as free_spins — each with its own grid, lines, jackpot and win. Three scatters during them add ten more, up to a hundred. payout is the spin and every free spin together.
iThe reel strips are the odds, and the return is counted
GET /v1/game/state as config.reels. Lines are a product of the three reels' counts; gold, red and green each stand in one stack of three, so a full window is exactly 1 in 27,000; three scatters are 1 in 125 and a feature expects 10 / (1 − 10/125) free spins. Altogether 96.0548%, published as 96.054.Big Top Coins
A five-line slot with a hold-and-win coin bonus, and two ways to play beyond a plain spin. Both actions settle at once: the whole bonus is played out by the engine and returned for the client to show.
Spin
/v1/game/play/spingame-launcherBody
stakedecimal stringrequired | The stake. Wins are paid on it. 0.20–5.00 by default. |
antebooleanoptional | The ante bet: the spin costs 1.5 stakes and the centre reel carries a second Clown, doubling the bonus's chance. |
free_bet_grant_idstringoptional | Fund the spin from a free bet, at exactly the grant’s stake and without the ante. |
grid shows the five reels, lines what paid (in stakes), and coins the coins in view with their values. With the Clown and two or more coins in view, bonus carries the bonus: the start coins by place (0–11 across reels 1, 2, 4 and 5), every respin with what landed, which cash coins a Lucky Clown multiplied and by how much, and how many respins were left; then the total in stakes and the win. The round's stake is what the spin cost.
Buy the bonus
/v1/game/play/buygame-launcherBody
stakedecimal stringrequired | The stake. The bonus costs 70 times it, and pays on it. |
Starts the bonus at once, with two, three or four coins in the proportions a natural trigger has (486 : 36 : 1). Free bets cannot buy it.
iThree returns, each counted exactly, and the lowest published
GET /v1/game/state as config.reels and config.anteCentre. The return is not an operator setting.Chilli Sevens
/v1/game/play/spingame-launcherBody
stakedecimal stringrequired | The stake for the whole spin. It covers all twenty lines; each line is staked a twentieth of it. 0.20–5.00 by default. |
free_bet_grant_idstringoptional | Fund the spin from a free bet. The stake must then be exactly the grant’s. |
A five-reel, twenty-line fruit machine, settled immediately. stops is where each reel stopped (the index of the symbol in its top row) and grid the five columns of three symbols that shows. lines lists every paying line — its number, the symbol, how many in a row, and what it pays in line stakes. stars counts scatters anywhere. chillies are the three chilli reels (0 blank, otherwise how many chillies); three of the same make multiplier 3, 6 or 9, applied to the line and star wins in spin_win.
One spin in 500 carries jackpot: its kind (mini, minor, major, mega or grand), what it pays as a multiple of the stake, the win, and crystals — the order the crystal board reveals, ending on the third of the winning kind. The jackpot is decided when the spin is played; a client reveals the sequence, and never lets a pick choose it. payout is spin_win plus the jackpot.
iThe reel strips are the odds, and the return is counted, not simulated
GET /v1/game/state as config.reels. A line reads one row from each reel, so its return is a sum over every combination of symbols: 73.914% from lines, 2.12% from stars, times the chilli multiplier's mean of 1.176, plus 6.78% from the crystal board — 96.196% in all, published floored as 96.195. The return is not an operator setting. At the default limits a Grand jackpot is exactly the 50000 maximum win, so the figure holds at every stake.{
"round_id": "rnd_c7h1l2s3e4v5n6r7t8y9",
"stops": [12, 4, 27, 9, 18],
"grid": [["cherry", "plum", "seven"], ["cherry", "orange", "lemon"], ["cherry", "grape", "melon"],
["star", "melon", "plum"], ["lemon", "orange", "grape"]],
"lines": [{ "line": 2, "symbol": "cherry", "count": 3, "pays": 6 }],
"stars": 1,
"chillies": [2, 2, 2],
"multiplier": 6,
"spin_win": "1.80",
"jackpot": null,
"status": "won",
"stake": "1.00",
"payout": "1.80",
"server_seed_hash": "e0a4c91b…",
"nonce": "31"
}Nova Drop
/v1/game/play/dropgame-launcherBody
stakedecimal stringrequired | The stake. Every prize is a multiple of it. |
rowsintegeroptional | Rows of pegs, 8–16. Defaults to 8. |
riskstringoptional | "low", "medium" or "high". Defaults to "medium". |
ballsintegeroptional | Balls in this drop, 1–10. The stake is charged per ball. Defaults to 1. |
A ball falls through a triangle of pegs into the slots below it, settled immediately. The response carries the slot it landed in, that slot’s multiplier, the rows and risk the round was played at, and — unlike every other game here — the whole path.
iThe seed reproduces the route, not just the result
path is a string of L and R, one character per row, and the slot is simply the number of Rs — a player can verify the bounce as well as the payout, and a board that dropped a ball down a path its seed does not generate would be caught by anyone who looked.!Risk changes the payouts and never the odds
!A flight is one round, and the stake is per ball
balls: 10 is ten bets in one round: the round is charged ten times the stake, and it returns what all ten balls made. Do not make ten calls — a player may hold one open round per game, so concurrent drops are refused with ROUND_IN_PROGRESS. One round also means one wallet debit and one credit rather than ten of each.Show the TOTAL in your UI. Ten balls at a stake is ten times the risk of one, and a panel displaying only the per-ball figure is telling a player they are risking a tenth of what they are. Each ball still draws from its own indices — ball
b, row i uses b × rows + i — so every ball in a flight stays independently verifiable, and balls[] carries each one’s path, slot, multiplier and payout. The first ball is repeated at the top level so an integration written before flights existed keeps working unchanged.·Offer only the boards your release certifies
rows:risk, and comes back on GET /v1/game/state as config.boards. A request for a combination the release does not carry is refused rather than settled against a ladder nobody signed off. Read the keys from the session rather than assuming the full 8–16 range.{
"round_id": "rnd_e5jfco5u72zkwkosvpmn",
"path": "RRRRLRLR",
"slot": 6,
"rows": 8,
"risk": "medium",
"multiplier": "1.01",
"balls": [
{ "path": "RRRRLRLR", "slot": 6, "multiplier": "1.01", "payout": "1.01" },
{ "path": "LRRLRRRL", "slot": 5, "multiplier": "0.503", "payout": "0.50" },
{ "path": "RRLRRRRR", "slot": 7, "multiplier": "3.52", "payout": "3.52" }
],
"status": "won",
"stake": "3.00",
"payout": "5.03",
"server_seed_hash": "863b48d8…",
"nonce": "1"
}Goal Jet — a shared round
Crash games work differently: one flight is shared by everyone playing at your casino, so the round is not owned by a single player. Stakes go on before it starts; each player cashes out on their own.
·Your flight is yours
/v1/game/crash/stategame-launcher/v1/game/crash/betgame-launcher/v1/game/crash/cashoutgame-launcher- A player may hold more than one stake on the same flight.
- Cash-out moves through
ACTIVE → SETTLING → WON. If your wallet times out mid-settlement, the retry resumes at the same multiplier — a player can never be shown a win we then fail to pay. - The flight's crash point is committed before betting opens and verifiable afterwards, exactly as in Provably fair.
A flight sleeps when nobody is playing
It stops after about two minutes without a player and wakes on the next sign of life — which now includes POST /v1/sessions, so by the time your player's launcher connects the round is already open. Flying empty tables for every operator every quarter second is waste, and this is how it is avoided.
While it is asleep the last round stays in the table exactly as it ended, so /crash/state tells you which you are looking at:
flight_status: "running"field | The round below is the live one. |
flight_status: "starting"field | Nothing was flying. Reading the state has woken it — poll again and there will be a round. Do not offer a stake against the round in this response: it has already settled and the bet will be refused with ROUND_ALREADY_SETTLED. |
flight_idle_secondsfield | How long it had been asleep. Null when running. |
!This was missing until 14 September 2026
To check without starting anything — and without minting a session you may not use — use GET /v1/catalogue/{gameId}/flight on the operator API. Reading it does not wake the flight. See running it from your own servers.
Round history
/v1/game/historygame-launcherThis player's recent rounds in this game, with the fairness record attached to each so the client can offer a verify button without another round trip.