Progressive Jackpots
Every casino on Slotty Labs can run its own progressive jackpot — one pot per currency, funded by a small share of every real-money bet on the games you opt in. This guide covers how the jackpot works, how to control what players see, and how to display the pot in your own casino UI.
How It Works
- One pot per currency. Your USDT pot, USDC pot and BTC pot are separate — currencies are never mixed.
- Contribution. A configurable share (default 1%, range 0.05%–5%) of every real-money bet on a jackpot-enabled game moves into the pot. A bet feeds the pot only when its whole stake comes from the player's real (withdrawable) balance: a stake that would draw any bonus money, demo play and casino-assigned free spins / free chips never contribute — and can never win.
- Not in Germany. No jackpot runs for a player in Germany: when the session's jurisdiction is Germany (DE) or the player's own country is Germany, their rounds never feed or win the pot, play the paytable you configured, and the in-game ticker is hidden for them — whatever the Jackpot switches say.
- Must-hit-by trigger. At the start of each cycle the platform draws a hidden random threshold between the current pot and your configured ceiling (cryptographically random, server-side only). The bet whose contribution pushes the pot past that threshold wins the entire pot, instantly. Payout is therefore guaranteed at the latest when the pot reaches the ceiling, but the exact moment is unpredictable — the threshold is never exposed by any API, so it cannot be sniped.
- The winner is just playing normally. Any qualifying real-money bet on any participating game can be the winning one. Bigger bets contribute more, so they win proportionally more often.
- Win crediting. The pot is paid to the winner's withdrawable balance in the same ledger transaction that ends the cycle — also when the winner holds an unconverted bonus: a jackpot win is never locked to a bonus, because only real-money stakes feed and win the pot. The
round.jackpot_wonwebhook'slockedToBonusis alwaysfalse. - After a hit, the pot resets to your configured seed and a new cycle begins with a fresh hidden threshold.
Enabling the Jackpot
- In your dashboard, open Games → (game) → Config and switch on Jackpot Participation for each game that should feed the pot.
- Open the Jackpot page to tune each currency's pool: payout ceiling, seed, contribution rate, minimum qualifying bet, and pause/resume. Pools are created automatically on the first qualifying bet if you don't configure them first (1% rate, sensible per-currency ceilings).
The Jackpot page also shows the live pot, progress toward the ceiling, the statistically likely payout date, the latest-by date at the current pace, contribution pace, which games feed the pot, and the full payout history.
Jackpot and RTP
The contribution comes out of a game's RTP, never on top of it. The pot is paid back to players as jackpot wins, so a bet that feeds it returns its game's RTP plus the contribution. To keep the total at the RTP you configured, every round that feeds the pot is played on the highest of the game's published paytables that leaves room for the contribution:
| Configured RTP | Contribution | Paytable played | Game + jackpot = player RTP |
|---|---|---|---|
| 97% | 1% | 96% | 96% + 1% = 97% |
| 96% | 1% | 94% | 94% + 1% = 95% |
| 94% | 1% | 92% | 92% + 1% = 93% |
| 92% | 1% | — (no room) | the game does not feed the pot |
- Each game ships four paytables (92 / 94 / 96 / 97%). With the default 1% contribution the total is exact at 97% and one point below your setting at 96% and 94%; other rates can leave it up to 1.95 points below (0.05% at 96% plays the 94% paytable: 94% + 0.05% = 94.05%) — never above it.
- A game whose RTP leaves no room for its pool's rate cannot be switched into the jackpot (the dashboard explains why); if a later rate change takes the room away, that game simply stops feeding the pot and plays its own paytable.
- A round that does not feed the pot plays the paytable you configured — your full RTP, with no step down: play money, casino-assigned free spins / free chips, a stake that would draw any bonus money (the platform checks how the wallet would fund the stake before the round is priced), a player in Germany, a stake below the pool's minimum, a paused pool.
- The decision is made when a round starts and holds for the whole round: a rate raised mid-round never pushes that round above your RTP. In a multi-step game (Safe Smash, Bit Key Rush) a bonus credited during the round makes a later action contribute only its real-money part, so that round returns slightly less than your RTP — never more.
- The game info endpoint (
GET /api/v1/games/:gameId?currency=…) reports the player's totalrtp, thepaytableVariantactually played and, when the player's rounds feed the pot, anrtpBreakdownof{ game, jackpot, total }. The dashboard shows the same split per game and currency.
Showing the Pot to Players
You have two options — use either or both.
Option A: Built-in in-game ticker (zero integration)
By default, players see a live JACKPOT pot ticker at the top of every participating game, in their active currency, updating in real time as bets come in. Jackpot wins always show a celebration popup in the game, regardless of the ticker setting.
Control it on the Jackpot page → "Show the jackpot inside the games". Turn it off if you'd rather present the jackpot in your own casino UI — contributions and payouts are unaffected. While it is off, a bet on a participating game can still bring the ticker up for up to a minute, until the game's next check hides it again.
The ticker only appears when the specific game has Jackpot Participation enabled; non-participating games never show it, and neither do sandbox test-credit (PLAY) sessions or players in Germany. Demo (fun-play) sessions show the same ticker as real ones, although demo rounds never feed or win the pot. A player holding a bonus still sees the pot their real-money rounds feed.
Jackpot news inside the games
A jackpot win is credited before the round's answer reaches the game; the game then announces it once the round's own result is on screen. Slotty Slots, Overload, Ricochet, Strike, Shatter and 3D City: Neighborhoods reveal a result a moment after the server has settled the round (the landing reels, the surge, the shot, the strike, the falling glass, the construction), so they hold the JACKPOT! pop-up, the ticker's new value and your page's game:balanceUpdate / game:roundEnd messages until the result is shown — the player sees their round first, then the jackpot. If the game cannot show the result (a hidden tab, a stalled device), the news goes out anyway within 10 seconds of the answer (at most 30 when the reveal itself started late). Popworks holds them the same way through its spins and its Color Rush, renewing the hold as each free spin plays; a long Color Rush can outlast the 30-second limit, and then the news goes out while free spins are still playing (the balance in it is already the round's final balance). The multi-step and session games show it as the answer arrives.
While the pop-up is up, the game takes no new round: it covers the game, Enter, Space or Escape closes it. Slotty Slots' free spins (and Popworks' auto spin) wait until it is closed; Slotty Slots' auto spin stops when it opens (the player holds SPIN to start it again). See Game Embedding for the messages your page receives.
Option B: Render it in your own UI (API)
Fetch your pools with your operator API key and render the pot anywhere on your site (lobby header, game tiles, a jackpot page):
curl https://api.slottylabs.com/api/v1/wallet/jackpots \
-H "Authorization: Bearer sk_production_..."{
"success": true,
"data": {
"pools": [
{
"id": "00000000-0000-4000-8000-000000000001",
"name": "USDT Progressive Jackpot",
"currency": "USDT",
"current_amount": "125500000",
"max_amount": "1000000000",
"status": "active",
"last_hit_at": "2026-01-10T18:42:07.000Z",
"last_hit_amount": "48250000",
"total_hits": 3
}
]
}
}Amounts are strings of integer minor units (125500000 = 125.50 USDT). Filter to one currency with ?currency=USDT. Your tenant is resolved from the API key — no tenant parameter is needed or honored.
Or with the SDK (v1.8.0+):
import { SlottyClient } from '@slottylabs/sdk';
const client = new SlottyClient({ apiKey: process.env.SLOTTY_API_KEY });
const { pools } = await client.wallet.getJackpots('USDT');
// pools[0].currentAmount → "125500000" (minor units)
// pools[0].maxAmount → guaranteed-payout ceiling
// pools[0].totalHits, lastHitAt, lastHitAmount → history for displayPolling guidance: the pot changes with every real-money bet on a participating game. Polling every 30–60 seconds is plenty for a lobby ticker; the endpoint is cheap, but standard API rate limits apply.
Push instead of poll: the jackpot webhook
Subscribe to round.jackpot_won under Settings → Webhooks to be notified the moment a jackpot is won — ideal for a "🎉 {player} just won the jackpot!" banner, a winners feed, or triggering your own player communications. The payload includes the amount, currency, pool, cycle, game and your external player id (its lockedToBonus field is always false). See Webhooks for the exact shape, signing, and retry policy.
There is no WebSocket feed for jackpots today — REST polling for the ticking pot plus the webhook for wins covers both display and notification needs.
Fairness & Accounting Notes
- The hidden threshold is drawn with a CSPRNG, uniformly between the current pot and the ceiling, and is never exposed — not to players, not in the dashboard, not via any API.
- Contributions come only from real money: a round whose stake would draw any bonus money does not feed the pot at all (it plays your configured paytable). The only partial case is a multi-step round that was all real money when it started: if a bonus is credited during it, a later action contributes only its real-money part.
- Pool balances are player-reserved liabilities held by the platform, backed by dedicated ledger accounts. Contributions appear as a distinct line in your Finance reporting; the payout itself comes from the pot, not from your revenue.
- A minimum qualifying bet (optional, per pool) excludes dust bets from both contributing and winning.

