Free JSON slot data plus a provably fair RNG for casino-style game logic — free with a dofollow link to slot.report (24h key-free trial to start).
The slot.report API provides structured access to one of the largest independent online slot databases available. Every data point — from RTP values and volatility ratings to max win caps, bonus mechanics and grid layouts — is sourced from official provider specifications and cross-verified against multiple industry databases.
The dataset powers slot.report, our independent slot review platform covering 500+ in-depth reviews for the German market. The API itself contains 6,000+ slots from 80+ providers and is updated daily — new releases are discovered and cross-validated automatically. Whether you're building a comparison tool, running data analysis, or training a model — the data is free and ready to use.
/api/v1/new.json endpoint (30 newest releases), alias slugs (e.g. book-of-dead, thunderstruck-ii) and provider slug aliases (playn-go, pragmatic). All existing endpoints unchanged, no breaking changes.| Field | Type | Example | Coverage |
|---|---|---|---|
| name | string | "Gates of Olympus" | 100% |
| slug | string | "gates-of-olympus" | 100% |
| provider | string | "Pragmatic Play" | 100% |
| provider_slug | string | "pragmatic-play" | 100% |
| rtp | float | 96.5 | 99% |
| volatility | string|null | "high" | 97% |
| volatility_score | int|null | 3 | 97% |
| max_win | int|null | 5000 | 94% |
| max_win_category | string|null | "high" | 94% |
| features | array|null | ["free-spins", "multiplier", "wilds", "tumble"] | 96% |
| mechanic | string|null | "cluster-pays" | 87% |
| theme | string|null | "mythology" | 95% |
| grid | string|null | "5x3" | 82% |
| paylines | int|null | 243 | partial |
| has_bonus_buy | bool|null | true | 36% |
| has_jackpot | bool|null | true | partial |
| release_date | string|null | "2021-02-25" | 84% |
| year | int|null | 2021 | 84% |
| hit_frequency | float|null | 23.5 | 27% |
| min_bet | float|null | 0.1 | 79% |
| max_bet | float|null | 100 | 79% |
| Field | Type | Description | Coverage |
|---|---|---|---|
| rtp_tiers | array|null | All RTP configurations, e.g. [96.21, 94.24, 91.25] | partial |
| summary | string|null | Short description of the slot (German) | ~10% |
| score | float|null | Editorial rating 1-10 | ~10% |
| bonus_buy_prices | array|null | Bonus buy options with name and price multiplier | ~9% |
| bonus_trigger_rates | array|null | Average spins to trigger each bonus | ~5% |
| series | string|null | Slot series name, e.g. "Le Series" | rare |
low (1) → medium (2) → high (3) → very-high (4) → extreme (5). The volatility_score field provides the numeric equivalent for sorting.
const res = await fetch('https://slot.report/api/v1/slots.json');
const data = await res.json();
// All high-volatility slots with 10,000x+ max win
const highVol = data.results.filter(s =>
s.volatility === 'extreme' && s.max_win >= 10000
);
console.log(`${highVol.length} extreme slots found`);
import requests
data = requests.get('https://slot.report/api/v1/slots.json').json()
# Average RTP by provider
from collections import defaultdict
rtps = defaultdict(list)
for s in data['results']:
if s['rtp']:
rtps[s['provider']].append(s['rtp'])
for provider, values in sorted(rtps.items()):
print(f"{provider}: {sum(values)/len(values):.2f}% avg RTP")
# All slots
curl -s https://slot.report/api/v1/slots.json | jq '.count'
# Single slot
curl -s https://slot.report/api/v1/slots/starburst.json | jq '{name, rtp, volatility, max_win}'
# All Hacksaw Gaming slots
curl -s https://slot.report/api/v1/providers/hacksaw-gaming.json | jq '.results[].name'
Use slot data directly in WordPress — no coding required. The official plugin provides shortcodes and a Gutenberg block to display slot cards, data tables, inline RTP values and slot counts.
[slot_card slug="gates-of-olympus"] [slot_table provider="hacksaw-gaming" limit="10" sort="max_win"]
Available on WordPress.org — search for "SlotReport" in your WordPress plugin directory.
Free, ready-to-paste widgets that render our live data on your site. Each requires a dofollow link to slot.report on the page — this is verified server-side, so the widget only displays while the link stays live — it is re-checked periodically, so if you remove the link later the widget stops showing. The widget auto-detects your page language (<html lang>) and links to the matching version: /en/, /es/, or / as fallback. Script and data are cached and tiny, so embedding adds negligible load.
<div class="sr-widget" data-widget="top-rtp"></div> <a href="https://slot.report/">slot.report — online slots & reviews</a> <script src="https://slot.report/embed.js" async></script>
<div class="sr-widget" data-widget="new"></div> <a href="https://slot.report/">slot.report — online slots & reviews</a> <script src="https://slot.report/embed.js" async></script>
<div class="sr-widget" data-widget="slot" data-slug="big-bass-bonanza"></div> <a href="https://slot.report/">slot.report — online slots & reviews</a> <script src="https://slot.report/embed.js" async></script>
<div class="sr-widget" data-widget="max-win"></div> <a href="https://slot.report/">slot.report — online slots & reviews</a> <script src="https://slot.report/embed.js" async></script>
<div class="sr-widget" data-widget="stats"></div> <a href="https://slot.report/">slot.report — online slots & reviews</a> <script src="https://slot.report/embed.js" async></script>
More types (same snippet, different data-widget): bonus-buy (top bonus-buy slots) and provider with data-slug→data-provider="pragmatic-play" (a single provider's top slots, by score).
Make clicks yours: add data-link="https://your-site.com/offer" to send every click on a slot row (or the card) to your own page — your casino, offer or review. That traffic is yours; the only thing we ask in return is the dofollow link in the footer. Without data-link the rows are not clickable and just display the data. Optional data-theme="dark" / "light" (default: auto, follows the visitor's system theme). No dofollow link → no widget.
The API is designed for reasonable use. There are no hard limits for normal usage, but automated bulk scraping may be throttled. Search engine bots and AI crawlers are not rate-limited.
If you need higher throughput for a specific project, download the full dataset from /api/v1/slots.json once and cache it locally.
Slot data is collected from official provider websites and game sheets, then verified against multiple independent secondary sources before publication. The database covers 58 providers including Pragmatic Play, Play'n GO, NetEnt, Red Tiger, Hacksaw Gaming, Nolimit City, BGaming, ELK Studios, Big Time Gaming, Quickspin, Relax Gaming, Blueprint Gaming, iSoftBet, Endorphina, Habanero, Booming Games, GameArt, Games Global, Betsoft, Thunderkick and more.
RTP values represent the highest available tier. Many providers offer casinos multiple RTP configurations — the actual RTP at a specific casino may be lower.
Volatility ratings are normalized to a 5-point scale across all providers, as each studio uses different native scales.
The API covers slots from 58 game studios. Use the /api/v1/providers/{slug}.json endpoint to filter by provider.
| Provider | Slots | Avg RTP | Endpoint |
|---|---|---|---|
| Pragmatic Play | 817 | 96.39% | pragmatic-play |
| Play'n GO | 445 | 96.24% | playn-go |
| Red Tiger | 339 | 95.82% | red-tiger |
| BGaming | 293 | 96.51% | bgaming |
| NetEnt | 244 | 96.36% | netent |
| iSoftBet | 226 | 96.03% | isoftbet |
| Endorphina | 218 | 95.96% | endorphina |
| Gamomat | 196 | 96.11% | gamomat |
| Hacksaw Gaming | 165 | 96.32% | hacksaw-gaming |
| Blueprint Gaming | 165 | 95.87% | blueprint-gaming |
| Nolimit City | 147 | 96.10% | nolimit-city |
| ELK Studios | 151 | 94.83% | elk-studios |
| Booming Games | 146 | 95.80% | booming-games |
| Quickspin | 141 | 96.33% | quickspin |
| Habanero | 140 | 96.80% | habanero |
| Relax Gaming | 132 | 95.96% | relax-gaming |
| Thunderkick | 117 | 95.76% | thunderkick |
| GameArt | 118 | 96.11% | gameart |
| Games Global | 117 | 95.70% | games-global |
| Betsoft | 109 | 95.66% | betsoft |
| Big Time Gaming | 92 | 96.34% | big-time-gaming |
| Push Gaming | 83 | 96.38% | push-gaming |
| Yggdrasil Gaming | 77 | 95.77% | yggdrasil-gaming |
| Popiplay | 77 | 96.56% | popiplay |
| Just For The Win | 76 | 95.36% | just-for-the-win |
Plus 33 additional studios. See /api/v1/providers.json for the complete list with all 58 providers.
The database is updated daily. A multi-source discovery pipeline finds new releases on launch day and cross-validates RTP and max win against independent sources before they are added. The last_updated field in /api/v1/status.json shows when the data was last refreshed; /api/v1/new.json lists the newest releases.
This is an independent, non-commercial project. Updates may occasionally be delayed by a few days, but the goal is to keep the data as current as possible.
Using the API requires an active dofollow link to slot.report (see Access at the top). This is exactly the kind of link that satisfies it — copy one of these:
<a href="https://slot.report/" target="_blank" rel="noopener">Slot data by slot.report</a>
[Slot data by slot.report](https://slot.report/)
[](https://slot.report/)
This is a request, not a requirement. Use the data freely. Every JSON response carries a _credit field as a reminder.
This API is built and maintained by slot.report — an independent German slot review site. We analyze online slots with real data, not marketing copy.
The API exists because no free, open slot data source existed before. If you find it useful, tell others about it.
Verifiable random outcomes for casino-style game logic — crash multipliers, weighted slot reels, dice and draws — derived from a deterministic HMAC-SHA256 seed chain. Every result is reproducible from its server_seed, client_seed and nonce, so anyone can recompute it and confirm it was not altered after the fact.
Cashing out at 1.00× only returns your stake — no profit. Waiting for a higher multiplier is the gamble, and a built-in house edge (~1% instant crash) means no strategy wins long-term. Provably fair doesn’t mean you can beat it — it means you can verify every result was honest.
Before the round the server publishes SHA-256(server_seed) as a commitment. You provide a client_seed. The outcome is derived as:
outcome = HMAC_SHA256(key = server_seed, msg = "client_seed:nonce") x = first 13 hex chars of outcome // 52-bit integer crash = floor( (100 · 2^52 - x) / (2^52 - x) ) / 100
After the round the server_seed is revealed. You confirm its SHA-256 still equals the published commitment, then recompute the outcome yourself. The Verifier does exactly that — entirely in your browser, nothing is uploaded.
Every game endpoint takes the same optional JSON body: client_seed, nonce, and either your own server_seed (deterministic mode) or a seed_id from /commit (fair mode). You set the maths with rtp (target return %, default 96) and max_win (payout cap ×bet, default 5000 — e.g. 10000 for a high-volatility slot). Every response includes a fair block to reproduce it; check any model with /sim/montecarlo.
house_edge (default 0.01). P(≥m) = (1−edge)/m.ladder (e.g. 2×…100×).picks prizes from a weighted prizes table.target_rtp.3d6, 2d20+5, 4d6kh3 (keep highest), 5d10! (explode).items array.weights object, e.g. {"mini":50,"major":8,"grand":1}.gaussian, exponential, poisson.commitment + seed_id before playing, reveal the server_seed after, recompute any game’s outcome to confirm it.rtp.game, spins, rtp, max_win) → RTP, hit frequency, max win. High-variance games (book, hold-and-win) need many spins to converge.server_seed — a pure function, identical inputs always give identical output (ideal for simulations). Fair: call /commit first and pass the returned seed_id — the server holds the seed until you /reveal it (the classic provably fair trust flow).curl -s -X POST https://slot.report/api/rng/v1/crash \
-H 'Content-Type: application/json' \
-d '{"client_seed":"my-seed","nonce":0}'import requests
r = requests.post("https://slot.report/api/rng/v1/crash",
json={"client_seed": "my-seed", "nonce": 0})
print(r.json()["crash_point"]) # e.g. 2.47const r = await fetch("https://slot.report/api/rng/v1/crash", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ client_seed: "my-seed", nonce: 0 })
});
console.log((await r.json()).crash_point);Free to use for any purpose. If your project is public, the one thing we ask in return is a single dofollow link back to slot.report — that is the whole price. Every response carries an attribution field as a reminder.
<a href="https://slot.report/" rel="noopener">Provably fair RNG by slot.report</a>
Recompute a crash round from its seeds and confirm it matches the published commitment. This runs entirely in your browser — nothing is sent to any server. Paste values from a revealed round, or use the demo’s “Verify this round” button.