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.

Quick startone 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 socketthe 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 itthe public routes, grouped; the docs list every parameter

GroupRoutesAnswers
Casinos/casinos, /casinos/{slug}, /compare, /statusonline 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, /reserveson-chain deposits, withdrawals, net flow and hot-wallet reserves by casino and chain
Streamers/streamers, /streamers/{slug}, /streamers/{slug}/sessions/{id}, /leaderboards/streamerslive sessions, recaps and on-stream wins of tracked casino streamers
Reports/reports, /reports/{yyyy-mm}the frozen monthly reports with per-casino coverage
Livewss://gambatracker.com/api/wsthe public socket: bets, online counts, RTP ticks, records, whales, races, rounds, jackpots, streamers

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

TierA minuteBurstA UTC dayHow
Anonymousno key, per IP12024020,000Just call the API.
Freeself-serve key30030050,000Request below; the key arrives by email link.
Paidmade by us1,2001,2001,000,000Write to [email protected] 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 headerson 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.

Request a free keyno account needed; a link by email creates it

By requesting a key you accept the terms on the right.

Termsalso 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: [email protected]. How each figure is measured: methodology.

For language models and agents: /llms.txt sums up the site and links its main pages, and /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).