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.

KashRock publishes live kill/death/assist boards from in-game feeds into Redis, then serves them on REST and WebSocket. CS2, Valorant, LoL, Dota 2, Rainbow Six, Call of Duty, and Deadlock tournament games are wired. Mobile Legends live boards stay empty until a live feed exists. The product SLA is 2 seconds — under 2 seconds from update to your client when you are on Builder+.

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.

EndpointWhat it returnsKey param
GET /v6/esports/{sport}/live/gamesEvery game currently on the live boardsport
GET /v6/esports/{sport}/live/{game_id}/boxscorePer-player K/D/A plus map, round, and clockgame_id (kr_match_id)
GET /v6/esports/{sport}/live/{game_id}/frameRound phase, economy, and board stategame_id
GET /v6/esports/{sport}/live/{game_id}/eventsKILL, ROUND_WIN, BOMB_PLANT, BOMB_DEFUSE, ROUND_STARTgame_id
WS /v6/esports/live/wsPush updates under 2 seconds after Redis write — Builder and Pro onlysubscribe by sport or kr_match_id
GET /v6/esports/live/healthMeasured p50/p95 latency per live gamenone

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.

GET /v6/esports/cs2/live/kr_cs2_vitality-vs-magic-ru-17-09-2026/boxscore
{
  "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.

TitleLive statusWhat the board carries
CS2LiveKills, deaths, assists, headshots, ADR per map
ValorantLiveK/D/A per map on tournament games
League of LegendsLiveK/D/A per map on tournament games
Dota 2LiveK/D/A per map on tournament games
Rainbow SixLiveK/D/A per map on tournament games
Call of DutyLiveK/D/A per map on tournament games
DeadlockLiveK/D/A per map on tournament games
Mobile LegendsWaiting on feedLive 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.

PlanPriceLive speedMonthly requests
Sandbox$0Live scores, 30-60 second delay on REST500 requests / UTC day
Hobby$29Live scores, 5-second delay on REST2,160,000 requests / month
Builder$99Live player kills, deaths, and assists updated in under 2 seconds + WebSocket push4,320,000 requests / month
Pro$199Live player kills, deaths, and assists updated in under 2 seconds + WebSocket push10,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/games and copy the kr_match_id off 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.

Frequently asked questions

How fast are live player stats?

Live player kills, deaths, and assists updated in under 2 seconds on Builder and Pro. Sandbox REST is live scores, 30-60 second delay, and Hobby is live scores, 5-second delay.

REST or WebSocket?

Both. REST reads Redis. WebSocket: Push updates under 2 seconds after Redis write — Builder and Pro only.

Which sports have live K/D/A today?

CS2, Valorant, LoL, Dota 2, Rainbow Six, Call of Duty, and Deadlock tournament games publish live K/D/A. Mobile Legends live boards stay empty until a feed is connected. We do not invent stats.

What ID do the live endpoints take?

The KashRock match id — kr_match_id — returned by GET /v6/esports/{sport}/live/games or any match listing. You never pass a provider's numeric id.

Is the low-latency feed free?

The free Sandbox tier serves live REST scoreboards live scores, 30-60 second delay — real data, just delayed. Real-time under-2-second boards and WebSocket push start on Builder ($99/mo).

How do I verify the latency myself?

GET /v6/esports/live/health returns measured p50 and p95 latency for every live game — from the source frame time to KashRock's WebSocket publish. The same endpoint backs the status claims on this page.