TrackerSino Data API — reference
JSON over HTTPS. API-key auth. Same response shape across every game. cURL / JavaScript / Python examples for every endpoint.
Getting started
Every request goes to https://api.trackersino.com. Authentication is a single HTTP header (Authorization: Bearer <your-key>). Responses are application/json. All timestamps are UTC ISO 8601. Decimal numerics (multipliers, payouts) are returned as JSON strings to preserve precision.
curl -H "Authorization: Bearer YOUR_KEY" \ https://api.trackersino.com/v1-beta/games
First call usually returns the catalog of every game we track, with last-observed-at and rounds-total counters. From there, fetch /v1-beta/games/{slug}/rounds to pull history or subscribe to /v1-beta/stream for live push.
Games & slugs
The {slug} in every path is a game identifier — it is the `id` field returned by /v1-beta/games and never changes. Wherever you see {slug} below, substitute one of the values from the first column.
For the WebSocket stream you select several games at once with a comma-separated list: ?games=stake-crash,crazytime,lightningstorm. The `games` query variable accepts any slug from this table.
| slug (id) | game | provider | kind |
|---|---|---|---|
| stake-crash | Crash | Stake | crash |
| duel-crash | Crash | Duel | crash |
| shuffle-crash | Crash | Shuffle | crash |
| crash | Crash | Roobet | crash |
| stake-slide | Slide | Stake | crash |
| slide | Slide | Roobet | wheel |
| crazytime | Crazy Time | Evolution | wheel-show |
| crazytimea | Crazy Time A | Evolution | wheel-show |
| monopolylive | Monopoly Live | Evolution | wheel-show |
| monopolybigballer | MONOPOLY Big Baller | Evolution | wheel-show |
| dreamcatcher | Dream Catcher | Evolution | wheel-show |
| lightningstorm | Lightning Storm | Evolution | wheel-show |
| icefishing | Ice Fishing | Evolution | wheel-show |
| lightningdice | Lightning Dice | Evolution | dice-show |
| lightningroulette | Lightning Roulette | Evolution | roulette-show |
The `kind` field tells you which extra data to expect in each round's raw payload: crash / wheel (Slide) → multiplier only; wheel-show (Crazy Time, Monopoly Live, Lightning Storm, Dream Catcher, Ice Fishing, Big Baller) → segment + sector + bonus details; dice-show (Lightning Dice) → dice faces + lightning multipliers; roulette-show (Lightning Roulette) → winning number + lucky-number multipliers.
This table is a snapshot — call GET /v1-beta/games any time for the authoritative, always-current list with live rounds_total and last_finalized_multiplier counters.
Authentication
Each customer gets one or more API keys when onboarded over Telegram. Keys are scoped per environment (sandbox / production) and rotatable on request. Lost a key? Telegram us — we revoke and issue a replacement.
Wrong / missing key → 401. Valid key but wrong tier for the endpoint → 403. Exceeded rate limit → 429 with Retry-After.
GET /v1-beta/games HTTP/1.1 Host: api.trackersino.com Authorization: Bearer ts_live_abcd1234efgh5678 Accept: application/json
REST endpoints
All endpoints return JSON. Where pagination is supported, use ?limit and ?since (ISO timestamp) — there is no opaque cursor; you can resume on `finalized_at`.
/v1-beta/gamesCatalog. Returns every tracked game: id, name, provider, kind (crash / slide / wheel-show / dice-show / roulette-show), enabled flag, rounds_total, last_observed_at, last_finalized_index, last_finalized_multiplier.
/v1-beta/games/{slug}/rounds?limit=N&window=5m&since=ISO&only_finalized=trueRound history, latest first. Filter by finalised-only, by absolute timestamp (since=ISO) or by a relative window — window=5m|15m|30m|1h|3h|6h|12h|24h|72h|7d|30d, or since_minutes=N for an exact minute count. Each row carries round_index, round_id, multiplier, random_number, state, finalized_at and a full raw payload.
/v1-beta/games/{slug}/rounds/latestThe single most recent round. only_finalized=true (default) returns the last settled round; only_finalized=false returns the absolute newest row, which may still be mid-spin. Same shape as a /rounds row including the full raw payload.
/v1-beta/games/{slug}/summaryOne-shot overview — everything the trackersino game header shows in a single call: identity (name/provider/kind), rounds_total, the latest round in full, rolling counts (last_5m / last_15m / last_1h / last_24h), 24h multiplier shape (mean / median / p95 / max) and the headline delay table (rounds since last ≥2x / 10x / 50x / 100x).
/v1-beta/games/{slug}/spins?limit=N&window=24hWheel-show convenience endpoint — every row carries segment, sector and multiplier_text decoded from raw. Use this for Crazy Time / Lightning Storm / Monopoly Live UIs without parsing raw yourself.
/v1-beta/games/{slug}/round/{round_id}Single round detail. Same shape as rows from /rounds but with the full bonus payload (Cash Hunt grid, Pachinko drop, Crazy Time arms, Lightning Storm batteries / reels / offers).
/v1-beta/games/{slug}/stats/biggest-wins?window=24h&limit=10Top payouts in a window. Sorted by total_amount × multiplier when available, otherwise by multiplier alone. Returns round_id, multiplier, finalized_at, segment, total_amount, total_winners.
/v1-beta/games/{slug}/stats/multiplier-distribution?window=1hHistogram of multipliers (crash games) or segment hit-rate (wheel shows) over the requested window. Use for fairness plots / RTP convergence panels.
/v1-beta/games/{slug}/stats/delaysRounds-since-last-≥X for every headline threshold (1.5x … 1000x). Same metric the public temperature panel shows, plus lifetime_hits and lifetime_rounds. Refresh-friendly: numbers tick down each round.
/v1-beta/games/{slug}/stats/frequency?window=24hObserved vs theoretical hit-rate per threshold, with the delta in percentage points against a fair-game baseline (configurable house edge). The fairness table behind the public stats page.
/v1-beta/games/{slug}/stats/streaks?window=24hCurrent and longest consecutive runs below each threshold (2x … 100x) — current_under_count, longest_under_in_window and where the longest run started.
/v1-beta/games/{slug}/stats/hourly?window=24hPer-hour buckets: count, mean, max, p95 plus hit counts for 2x / 10x / 50x. Use for heatmaps and time-of-day analysis.
/v1-beta/games/{slug}/stats/multiplier-distribution?window=1hHistogram of multipliers (crash games) plus mean / median / p95 / p99 / max over the window. Use for fairness plots / RTP convergence panels.
/v1-beta/games/{slug}/stats/rtp-empirical?window=24hDirectional empirical RTP from observed bet snapshots (volume, payout, ratio). Snapshot-biased — see the note field in the response.
/v1-beta/games/{slug}/stats/rtp-detailed?window=24hSame RTP estimate broken down per target-multiplier: bets_count, volume, payout, win_rate and rtp for each cash-out target.
/v1-beta/games/{slug}/stats/currency-volume?window=24hBet volume and payout grouped by balance type (currency), plus the totals across all currencies.
/v1-beta/games/{slug}/stats/recent-bets?limit=NLatest observed bets with their resolved round outcome — bet_amount, balance_type, target_multiplier, round_multiplier and a won flag.
/v1-beta/games/{slug}/crazytime/segments?window=24hWheel-show segment breakdown (Crazy Time / Monopoly Live / Lightning Storm / Dream Catcher): per-segment hits, observed vs theoretical %, spins_since, avg multiplier and last hit.
Response shapes (real examples)
Every example below is a real, unedited response captured from the live API. Numerics that need precision (multiplier, payouts) come back as JSON strings.
[
{
"id": "stake-crash",
"name": "Crash",
"provider": "Stake",
"kind": "crash",
"enabled": true,
"rounds_total": 108457,
"last_observed_at": "2026-06-01T12:20:48.669425Z",
"last_finalized_index": 7393228772258146753,
"last_finalized_multiplier": "4.7100"
},
{
"id": "crazytime",
"name": "Crazy Time",
"provider": "Evolution",
"kind": "wheel-show",
"enabled": true,
"rounds_total": 53413,
"last_observed_at": "2026-06-01T12:19:00.573935Z",
"last_finalized_index": 46639897866258233,
"last_finalized_multiplier": "1.0000"
}
][
{
"round_index": 7393228772258146753,
"round_id": "cc0706c3f891d301fcec3855",
"multiplier": "4.7100",
"random_number": null,
"state": "finalized",
"time_spin_stop": "2026-06-01T12:20:27Z",
"finalized_at": "2026-06-01T12:20:27Z",
"observed_at": "2026-06-01T12:20:28.580645Z",
"raw": {
"result": { "rtp": 196.23, "maxMultiplier": 4.71, "roundDuration": 25825.0 },
"source": "casino.org",
"round_id": "cc0706c3f891d301fcec3855",
"settledAt": "2026-06-01T12:20:27Z",
"startedAt": "2026-06-01T12:20:01Z",
"totalAmount": 13609.24,
"bettorsCount": 320,
"totalWinners": 270,
"totalBetAmount": 6935.21
}
}
][
{
"round_index": 68099814944532018,
"round_id": "cdHphY2_tby8",
"multiplier": "4.0000",
"random_number": 2,
"state": "finalized",
"time_spin_stop": "2026-06-01T12:19:36Z",
"finalized_at": "2026-06-01T12:19:36Z",
"observed_at": "2026-06-01T12:20:23.015118Z",
"raw": {
"result": 2,
"source": "tracksino",
"segment": "n2",
"slot_result": 2,
"slot_multiplier": 2,
"total_payout": 19461,
"total_winners": 3381,
"is_top_slot_matched": true,
"bonus_data": null
}
}
]{
"round_index": 6823731385927563902,
"round_id": "18b4f444d3876dca4aeac5ff",
"multiplier": "1.0000",
"state": "finalized",
"finalized_at": "2026-06-01T12:19:52.013Z",
"observed_at": "2026-06-01T12:19:57.175784Z",
"raw": {
"outcome": "EvoLeaf",
"segment": "leaf",
"source": "casino.org",
"multiplier_text": "1x",
"multiplier_low": "1.00",
"multiplier_high": "1.00",
"wheel_result": { "wheelSector": { "type": "EvoLeaf" }, "maxMultiplier": 1 },
"totalWinners": 451,
"bettorsCount": 2275
}
}{
"game_id": "stake-crash",
"name": "Crash",
"provider": "Stake",
"kind": "crash",
"rounds_total": 108457,
"last_round": { "...": "full round object, same shape as /rounds" },
"last_finalized_index": 7393228772258146753,
"last_finalized_multiplier": "4.7100",
"last_finalized_at": "2026-06-01T12:20:42Z",
"last_observed_at": "2026-06-01T12:20:28.580645Z",
"counts": { "last_5m": 13, "last_15m": 39, "last_1h": 175, "last_24h": 3964 },
"multiplier_24h": {
"window": "24h",
"mean": "9.3272619828456105",
"median": "2.1597",
"p95": "22.52",
"max": "3986.5790"
},
"delays": [
{ "threshold": "2", "rounds_since": 1, "last_multiplier": "4.7100", "last_finalized_at": "2026-06-01T12:20:27Z" },
{ "threshold": "10", "rounds_since": 3, "last_multiplier": "33.2000", "last_finalized_at": "2026-06-01T12:19:36Z" },
{ "threshold": "50", "rounds_since": 116, "last_multiplier": "368.6026", "last_finalized_at": "2026-06-01T11:38:57Z" },
{ "threshold": "100", "rounds_since": 116, "last_multiplier": "368.6026", "last_finalized_at": "2026-06-01T11:38:57Z" }
],
"generated_at": "2026-06-01T12:20:57.684532Z"
}[
{
"threshold": "1.5",
"rounds_since": 1,
"last_round_index": 7393228772258146753,
"last_multiplier": "4.7100",
"last_finalized_at": "2026-06-01T12:20:27Z",
"lifetime_hits": 73847,
"lifetime_rounds": 108458
},
{
"threshold": "2",
"rounds_since": 1,
"last_multiplier": "4.7100",
"lifetime_hits": 55412,
"lifetime_rounds": 108458
}
]WebSocket stream
Pro and Enterprise tiers can subscribe to a push channel: every finalised round is emitted as a JSON frame as soon as our scraper writes it to storage. Same row shape as /rounds. Subscribe to all games or filter by slug at connection time.
const ws = new WebSocket(
'wss://api.trackersino.com/v1-beta/stream?games=stake-crash,roobet-crash',
['Authorization', 'Bearer YOUR_KEY']
);
ws.onmessage = (ev) => {
const round = JSON.parse(ev.data);
console.log(round.game_id, round.multiplier, round.finalized_at);
};Reconnect on close. We send a heartbeat ping every 25s; if you miss two consecutive pings, drop and reconnect — your last observed `finalized_at` is the resume point for a /rounds backfill.
Code examples
# Last 5 minutes of Stake Crash — relative window, no timestamp math
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.trackersino.com/v1-beta/games/stake-crash/rounds?window=5m"
# Same call for a different game — just swap the {slug}
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.trackersino.com/v1-beta/games/crazytime/rounds?window=5m"
# Exact minute count instead of a preset window
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.trackersino.com/v1-beta/games/lightningstorm/rounds?since_minutes=30&limit=500"
# The single most recent settled round
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.trackersino.com/v1-beta/games/duel-crash/rounds/latest"
# Everything at a glance (last round + counts + 24h shape + delays)
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.trackersino.com/v1-beta/games/stake-crash/summary"const KEY = 'Bearer YOUR_KEY';
const BASE = 'https://api.trackersino.com/v1-beta';
// The 'games' you care about — any slug from the Games & slugs table.
const games = ['stake-crash', 'crazytime', 'lightningstorm'];
// Fetch the last 5 minutes of history for each, in parallel.
const histories = await Promise.all(
games.map(async (slug) => {
const res = await fetch(
`${BASE}/games/${slug}/rounds?window=5m&limit=1000`,
{ headers: { Authorization: KEY } },
);
return { slug, rounds: await res.json() };
}),
);
for (const { slug, rounds } of histories) {
console.log(slug, '→', rounds.length, 'rounds');
console.log(' newest:', rounds[0]?.multiplier, 'at', rounds[0]?.finalized_at);
}import requests
BASE = "https://api.trackersino.com/v1-beta"
HEADERS = {"Authorization": "Bearer YOUR_KEY"}
def fetch_window(slug: str, minutes: int = 5):
"""Last N minutes of rounds for a game."""
r = requests.get(
f"{BASE}/games/{slug}/rounds",
params={"since_minutes": minutes, "limit": 1000},
headers=HEADERS, timeout=10,
)
r.raise_for_status()
return r.json()
def backfill(slug: str, pages: int = 5, page_size: int = 1000):
"""Walk older history with before_index (keyset pagination)."""
out, cursor = [], None
for _ in range(pages):
params = {"limit": page_size, "only_finalized": "true"}
if cursor is not None:
params["before_index"] = cursor
rows = requests.get(f"{BASE}/games/{slug}/rounds",
params=params, headers=HEADERS, timeout=10).json()
if not rows:
break
out += rows
cursor = rows[-1]["round_index"] # resume point for the next page
return out
for slug in ("stake-crash", "crazytime", "lightningstorm"):
last5 = fetch_window(slug, 5)
print(slug, "→", len(last5), "rounds in last 5m,",
"newest:", last5[0]["multiplier"] if last5 else None)Rate limits
Per-key request budget. Starter is REST-only at 5 req/s, burst 10. Pro is 50 req/s + unlimited WebSocket frames. Enterprise is custom (default 200 req/s + dedicated WS).
On 429 we send Retry-After (seconds). Back off and retry. We don't auto-throttle silently — you always know when you hit the cap.
Error responses
{
"error": "rate_limited",
"message": "Exceeded 50 req/s on tier=pro",
"retry_after_s": 3
}Always JSON, always carries `error` (machine-readable code) and `message` (human). Standard HTTP semantics — 400 client error, 401/403 auth, 404 game/round not found, 429 rate limit, 5xx upstream issue (very rare, we run failover internally).
Changelog & versioning
URL-versioned (/v1-beta is the current public surface). Breaking changes go to /v1 once stable, with at least 90 days of overlap before /v1-beta is retired. Non-breaking additions (new fields, new endpoints) ship within /v1-beta without bumping.
Subscribe to the @TrackerSinoStatus Telegram channel to get notified about upcoming changes and incidents.
Need help integrating?
Ping us on Telegram with the language you're building in — we'll send a minimal working sample tailored to your stack.
Open Telegram →