---
title: "Crypto casino API: bets, RTP & on-chain flows as JSON"
description: "The gambatracker public API: sampled bets, big wins, observed RTP with 95% bands, on-chain flows, reserves and monthly reports as JSON and a live socket. Free keys."
url: https://gambatracker.com/developers
rendered: 2026-11-11T12:33Z
---

[Home](https://gambatracker.com/) / [Developers](https://gambatracker.com/developers)

# Developers

Every figure on this site comes from the same public JSON API, with the same labels: observed, estimated or on-chain. Read it anonymously, or with a free key for higher limits. Players who opt out disappear from every answer, so build nothing that identifies them.

[Interactive docs](https://gambatracker.com/api/docs) [OpenAPI 3.1](https://gambatracker.com/api/openapi.json) [Key usage](https://gambatracker.com/developers/usage)

## Quick start · one header, one GET; every answer is JSON

shell

```
curl -H 'x-api-key: gt_live_…' \
  'https://gambatracker.com/api/bets?feed=big-wins&window=24h&limit=3'
```

answer, shortened

```
{
  "bets": [{
    "id": "stake:9418233",
    "casino": { "slug": "stake", "name": "Stake" },
    "ts": "2026-11-02T08:39:12.410Z",
    "player": { "casino": "stake", "name": "frostbyte", "hidden": false },
    "game": { "slug": "gates-of-olympus", "name": "Gates of Olympus",
              "provider": { "slug": "pragmatic-play", "name": "Pragmatic Play" }, "kind": "slots" },
    "amount_usd": 274, "payout_usd": 41160, "multiplier": 150.22,
    "edge": 0.0350, "expected_loss_usd": 9.59
  }],
  "next": "MTc5MzYwOTU1MjQxMDpzdGFrZTo5NDE4MjMz"
}
```

Base URL `https://gambatracker.com/api`. Send the key as `x-api-key` or `Authorization: Bearer`; without one you are an anonymous caller, limited per IP. Lists page with `cursor`; windows are `10m, 1h, 24h, 7d, 30d, all`. Errors come as `{ "error": { "code", "params" } }`.

## Live socket · the same frames the site shows

browser

```
const ws = new WebSocket('wss://gambatracker.com/api/ws');
ws.onopen = () => ws.send(JSON.stringify({ sub: ['bets:big', 'streamers'] }));
ws.onmessage = (e) => {
  const { topic, data } = JSON.parse(e.data);
  // topic: 'bets:big' → Bet, 'streamers' → StreamerStatus, 'subscribed' → string[]
};
```

Topics: `bets:big`, `bets:live`, `bets:live:{casino}`, `online`, `rtp:{scope}`, `records`, `whales`, `races`, `sports`, `rounds`, `jackpots`, `status`, `streamers`, `streamers:hits`. At most 50 topics; a slow client is dropped after 5 s.

## What is in it · the public routes, grouped; the docs list every parameter

| Group | Routes | Answers |
| --- | --- | --- |
| **Casinos** | `/casinos, /casinos/{slug}, /compare, /status` | online counts, 24 h wager and bets, 30-day flows, reserves, coverage and feed health per casino |
| **Bets** | `/bets?feed=live\|big-wins\|high-rollers\|lucky, /records, /leaderboards/{month}` | every sampled bet with stake, payout, multiplier, the game’s house edge and expected loss |
| **RTP** | `/rtp, /rtp/originals, /rtp/originals/{kind}, /games/{slug}, /providers/{slug}` | observed RTP with 95% intervals per slot, casino and provider; originals against the advertised figure |
| **Chain** | `/flows, /reserves` | on-chain deposits, withdrawals, net flow and hot-wallet reserves by casino and chain |
| **Streamers** | `/streamers, /streamers/{slug}, /streamers/{slug}/sessions/{id}, /leaderboards/streamers` | live sessions, recaps and on-stream wins of tracked casino streamers |
| **Reports** | `/reports, /reports/{yyyy-mm}` | the frozen monthly reports with per-casino coverage |
| **Live** | `wss://gambatracker.com/api/ws` | the public socket: bets, online counts, RTP ticks, records, whales, races, rounds, jackpots, streamers |

## Tiers and limits · a bucket of burst requests refilled at the per-minute rate, and a daily quota

| Tier | A minute | Burst | A UTC day | How |
| --- | --- | --- | --- | --- |
| Anonymous no key, per IP | 120 | 240 | 20,000 | Just call the API. |
| Free self-serve key | 300 | 300 | 50,000 | Request below; the key arrives by email link. |
| Paid made by us | 1,200 | 1,200 | 1,000,000 | Write to hello@gambatracker.com with the use case. |

A refusal is `429` with `Retry-After` and `rate.limited` (`limit: "minute" | "day"`). A presented key is never downgraded: an unknown one is `401 api_key.invalid`, a revoked one `401 api_key.revoked`.

## Rate-limit headers · on every metered answer

- **`RateLimit-Limit`**: the burst: how many requests the bucket holds
- **`RateLimit-Remaining`**: requests left in the bucket right now
- **`RateLimit-Reset`**: seconds until the bucket is full again
- **`RateLimit-Policy`**: \<per\_minute>;w=60;burst=\<burst>, \<daily>;w=86400
- **`X-Quota-Limit / -Remaining / -Reset`**: the UTC-day quota, what is left, seconds to 00:00 UTC
- **`X-Api-Tier`**: anonymous, free or paid: which limits applied

CORS is open for GET and HEAD from any origin, with these headers exposed, so a browser app can call the API directly. Cloudflare and nginx sit in front with their own 30 r/s per IP.

## Terms · also at the top of the interactive docs

1. **Attribution.** Show “Data: gambatracker.com” with a link wherever the data is displayed or published.
2. **No reselling raw data.** The answers may not be sold, sublicensed or redistributed as a dataset or feed of your own; products and analysis built on them are fine.
3. **Samples are samples.** Casinos publish only part of their bets, so counts and RTP are estimates with the intervals given; present them that way.
4. **No identifying or contacting players.** Keys that break the terms or the limits may be revoked. The API comes as is.

Questions, a paid tier or a key to revoke: [hello@gambatracker.com](mailto:hello@gambatracker.com). How each figure is measured: [methodology](https://gambatracker.com/methodology).

For language models and agents: [/llms.txt](https://gambatracker.com/llms.txt) sums up the site and links its main pages, and [/llms-full.txt](https://gambatracker.com/llms-full.txt) carries the methodology and the tracked sites as plain markdown. Every page is also markdown at its URL plus `.md`, or for a request that sends `Accept: text/markdown`. AI crawlers may read every public page at its canonical URL, and an assistant fetching for a person may also call this API ([robots.txt](https://gambatracker.com/robots.txt)).

How these figures are produced and labelled: https://gambatracker.com/llms.txt
