Low-latency esports API.
Player scoreboards in under 2 seconds.
Quick answer: Yes — KashRock's live esports feed updates player scoreboards in under 2 seconds on Builder+, with a slower but free Sandbox tier to start.
What the live feed carries
The live board is a per-map scoreboard, not a post-match recap. Each game on GET /v6/esports/{sport}/live/games carries the series score, map name, round number, and round clock — and every player row carries kills, deaths, assists, headshots, ADR, and an alive flag.
- —Per-player K/D/A mid-map, keyed by canonical kr_pl_* player ids
- —Map and series state — map_name, round, phase, clock
- —Round-level events: KILL, ROUND_WIN, BOMB_PLANT, BOMB_DEFUSE
- —One schema across CS2, Valorant, LoL, Dota 2, R6, COD, and Deadlock
Live endpoints
One list call tells you what is live; the rest of the reads hang off the kr_match_id it returns. Push and pull hit the same Redis boards, so REST and WebSocket never disagree.
| Endpoint | What it returns | Key param |
|---|---|---|
| GET /v6/esports/{sport}/live/games | Every game currently on the live board | sport |
| GET /v6/esports/{sport}/live/{game_id}/boxscore | Per-player K/D/A plus map, round, and clock | game_id (kr_match_id) |
| GET /v6/esports/{sport}/live/{game_id}/frame | Round phase, economy, and board state | game_id |
| GET /v6/esports/{sport}/live/{game_id}/events | KILL, ROUND_WIN, BOMB_PLANT, BOMB_DEFUSE, ROUND_START | game_id |
| WS /v6/esports/live/ws | Push updates under 2 seconds after Redis write — Builder and Pro only | subscribe by sport or kr_match_id |
| GET /v6/esports/live/health | Measured p50/p95 latency per live game | none |
A real live boxscore
This is a production capture — Vitality vs magic, map 1 Mirage — exactly as /live/{game_id}/boxscore returns it mid-map. Ten player rows, side by side, with K/D/A updating every few seconds.
{
"sport": "cs2",
"game_id": "kr_cs2_vitality-vs-magic-ru-17-09-2026",
"boxscore": {
"map_name": "Mirage",
"map_number": 1,
"round": 19,
"blue": {
"kills": 82,
"map_score": 13,
"series_score": 1
},
"red": {
"kills": 52,
"map_score": 6,
"series_score": 0
},
"players": [
{
"player_id": "kr_pl_5ea13ced730e",
"nickname": "ropz",
"side": "blue",
"kills": 23,
"deaths": 10,
"assists": 3,
"headshots": 12,
"adr": 114.19999694824219
},
{
"player_id": "kr_pl_a9020751a3a8",
"nickname": "apEX",
"side": "blue",
"kills": 22,
"deaths": 11,
"assists": 7,
"headshots": 10,
"adr": 133.1999969482422
},
{
"player_id": "kr_pl_fd87dbd9d1c1",
"nickname": "flameZ",
"side": "blue",
"kills": 16,
"deaths": 13,
"assists": 8,
"headshots": 7,
"adr": 89.5
},
{
"player_id": "kr_pl_4764e4b8d73a",
"nickname": "ZywOo",
"side": "blue",
"kills": 11,
"deaths": 9,
"assists": 7,
"headshots": 3,
"adr": 57.400001525878906
},
{
"player_id": "kr_pl_36c966f11204",
"nickname": "mezii",
"side": "blue",
"kills": 10,
"deaths": 9,
"assists": 5,
"headshots": 8,
"adr": 54.5
},
{
"player_id": "kr_pl_2cc82eb14944",
"nickname": "MaSvAl",
"side": "red",
"kills": 17,
"deaths": 15,
"assists": 1,
"headshots": 13,
"adr": 87.9000015258789
},
{
"player_id": "kr_pl_5e5e69089419",
"nickname": "sFade8",
"side": "red",
"kills": 11,
"deaths": 17,
"assists": 4,
"headshots": 6,
"adr": 67.0999984741211
},
{
"player_id": "kr_pl_64ea67e35230",
"nickname": "eksiver",
"side": "red",
"kills": 10,
"deaths": 16,
"assists": 0,
"headshots": 2,
"adr": 45.20000076293945
},
{
"player_id": "kr_pl_218807e67435",
"nickname": "mo0n",
"side": "red",
"kills": 9,
"deaths": 15,
"assists": 6,
"headshots": 4,
"adr": 51.099998474121094
},
{
"player_id": "kr_pl_630e7229e428",
"nickname": "tENZY",
"side": "red",
"kills": 5,
"deaths": 19,
"assists": 7,
"headshots": 5,
"adr": 48.900001525878906
}
]
}
}Vitality vs magic, map 1 Mirage, 17 Sep 2026. Same KashRock ids and KDA fields as live REST.
Which sports publish live boards
Live K/D/A comes from in-game feeds on tournament matches. Where a title has no feed wired, the board stays empty — KashRock does not invent stats.
| Title | Live status | What the board carries |
|---|---|---|
| CS2 | Live | Kills, deaths, assists, headshots, ADR per map |
| Valorant | Live | K/D/A per map on tournament games |
| League of Legends | Live | K/D/A per map on tournament games |
| Dota 2 | Live | K/D/A per map on tournament games |
| Rainbow Six | Live | K/D/A per map on tournament games |
| Call of Duty | Live | K/D/A per map on tournament games |
| Deadlock | Live | K/D/A per map on tournament games |
| Mobile Legends | Waiting on feed | Live boards stay empty until a feed is wired |
How the latency SLA is enforced
In-game frames land from the feed, normalize into the canonical schema, and write to Redis. REST reads that board directly; the WebSocket fans the same write out to subscribers. GET /v6/esports/live/health reports the measured p50 and p95 per live game — from the source frame time to our publish — so the SLA is a number you can read, not a promise on a landing page.
Practical rule: If a live game drifts past the SLA, it shows up in /live/health before it shows up in your app.
Speed by plan
Live speed is a plan feature, not a different pipeline. Every tier reads the same Redis boards — cheaper plans are served a genuinely older snapshot instead of a relabeled real-time read.
| Plan | Price | Live speed | Monthly requests |
|---|---|---|---|
| Sandbox | $0 | Live scores, 30-60 second delay on REST | 500 requests / UTC day |
| Hobby | $29 | Live scores, 5-second delay on REST | 2,160,000 requests / month |
| Builder | $99 | Live player kills, deaths, and assists updated in under 2 seconds + WebSocket push | 4,320,000 requests / month |
| Pro | $199 | Live player kills, deaths, and assists updated in under 2 seconds + WebSocket push | 10,800,000 requests / month |
Start in minutes
- —Create a free Sandbox key on Pricing — $0, no card, 500 requests every UTC day
- —List what is live:
GET /v6/esports/{sport}/live/gamesand copy thekr_match_idoff a game - —Pull the board:
GET /v6/esports/{sport}/live/{game_id}/boxscore - —Upgrade to Builder when you need real-time (no delay) or WebSocket push — Sandbox and Hobby are rejected at the WS handshake
If you need a normalized feed instead of another UI wrapper, the Esports API exposes live boards, schedules, and history on one schema — with the IDs and outcome patterns that keep backtests and grading honest. Start free on Sandbox, or see published pricing.