Get a key

Live in-game

Mid-map K/D/A, alive state, round clock. Redis-backed telemetry — not the finished-match boxscore path. Builder plan. MCP: get_live_boxscore.

List live games

GET/v6/esports/{sport}/live/games
ParamTypeRequiredDescription
sportpathYescs2, valorant, lol, dota2, cod, r6, …
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/live/games"
200 · live
{
  "sport": "cs2",
  "total": 1,
  "games": [
    {
      "game_id": "2397756",
      "match_id": "2397756",
      "blue_code": "Voca",
      "red_code": "Liquid"
    }
  ]
}

Live boxscore

GET/v6/esports/{sport}/live/{game_id}/boxscore
ParamTypeRequiredDescription
sportpathYesSame sport slugs as matches.
game_idpathYesFrom /live/games.
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/live/2397756/boxscore"
200 · live
{
  "sport": "cs2",
  "game_id": "2397756",
  "boxscore": {
    "map_name": "Anubis",
    "round": 16,
    "round_phase": "bomb",
    "round_clock": "0:07",
    "blue": {
      "map_score": 10,
      "kills": 69
    },
    "red": {
      "map_score": 5,
      "kills": 44
    },
    "players": [
      {
        "nickname": "Jorko",
        "side": "blue",
        "kills": 17,
        "deaths": 7,
        "assists": 2,
        "alive": true
      },
      {
        "nickname": "dare",
        "side": "red",
        "kills": 10,
        "deaths": 14,
        "assists": 2,
        "alive": true
      }
    ]
  }
}

Frame & events

Also: /{sport}/live/{game_id}/frames, /{sport}/live/{game_id}/events.

Finished series stats stay on /{sport}/matches/{slug}/boxscore (MCP get_boxscore).

WebSocket wire

Push updates under 2s after Redis write. Builder+. Auth via ?api_key= or Bearer on handshake.

GETWS /v6/esports/live/ws
{"op":"subscribe","sport":"cs2","game_id":"2397756"}
{"op":"subscribe","sport":"cs2","game_id":"*"}
{"op":"ping"}

Server sends snapshot, then update / event /games_list ticks.