Skip to content

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. Bonus-funded bets and demo play never contribute — and can never win.
  • 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 before 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. If the winner has an unconverted bonus, the win is credited to their bonus balance instead (the same rule as every other win) — the round.jackpot_won webhook and the in-game popup both say so honestly.
  • After a hit, the pot resets to your configured seed and a new cycle begins with a fresh hidden threshold.

Enabling the Jackpot

  1. In your dashboard, open Games → (game) → Config and switch on Jackpot Participation for each game that should feed the pot.
  2. 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 guaranteed-by date, contribution pace, which games feed the pot, and the full payout history.

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 🏆 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.

The ticker only appears when the specific game has Jackpot Participation enabled; non-participating games never show it.

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):

bash
curl https://api.slottylabs.com/api/v1/wallet/jackpots \
  -H "Authorization: Bearer sk_live_..."
json
{
  "success": true,
  "data": {
    "pools": [
      {
        "id": "019f7ab9-ad38-767a-a425-d8cd16cd6606",
        "name": "USDT Progressive Jackpot",
        "currency": "USDT",
        "current_amount": "125500000",
        "max_amount": "1000000000",
        "status": "active",
        "last_hit_at": "2026-07-19T14:13:56.570Z",
        "last_hit_amount": "20000",
        "total_hits": 2
      }
    ]
  }
}

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+):

typescript
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 display

Polling 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, your external player id, and whether the win was locked to a bonus. 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 the real-money portion of stakes: a bet funded partly by bonus balance contributes only its real-money share.
  • 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.