Get a key

Matches & fixtures

Upcoming, live, and finished games. Fixtures is the full schedule board. Matches is the filtered list for one status.

Matches

GET/v6/esports/{sport}/matches
ParamTypeRequiredDescription
sportpathYescs2, valorant, lol, dota2, cod, r6, mlbb, deadlock
statusstring—upcoming (default), live, finished
start_datedate—YYYY-MM-DD
end_datedate—YYYY-MM-DD
limitint—Page size. Default 50.
offsetint—Skip N rows.
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/matches?status=upcoming&limit=1"
200 · live
{
  "source": "kashrock",
  "kr_match_id": "kr_cs2_imperial-vs-bestia-2026-08-15",
  "slug": "imperial-vs-bestia-2026-08-15",
  "sport": "esports_cs2",
  "status": "not_started",
  "event_time": "2026-08-15T20:00:00Z"
}

Team names

Every team name on matches, finished boxscores, player rows, live games, props, lines and gaps is the KashRock display name, so one team reads the same on every endpoint. When a source spells the team differently, that spelling is in team1_alias and team2_alias. Player rows use team_alias, and a team object carries alias. The alias is only present when it differs. Ids never depend on the spelling: a kr_tm_* id stays the same.

200 · team names
{
  "kr_match_id": "kr_cs2_banda-chuya-vs-morrow-esports-30-09-2026",
  "team1": "Morrow Esports",
  "team1_alias": "benched gods",
  "team1_id": "kr_tm_d6894574e666",
  "team2": "Banda Chuya",
  "team2_id": "kr_tm_8622b1bf77f8"
}

Fixtures

GET/v6/esports/{sport}/fixtures
ParamTypeRequiredDescription
sportpathYesSame sport slugs as matches.
statusstring—upcoming, live, ended (also accepts not_started / running / finished)
start_datedate—YYYY-MM-DD
end_datedate—YYYY-MM-DD
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/fixtures"
200 · live
{
  "fixture_id": "fix_1634179",
  "kr_match_id": "kr_cs2_wave-esports-vs-drama-esports-2026-08-14",
  "sport": "esports_cs2",
  "discipline": "cs2",
  "status": "finished",
  "slug": "wave-esports-vs-drama-esports-2026-08-14"
}

Match prep (CS2, R6, COD, Valorant & Apex)

Team stats, mode winrates, map pool/biases, form, key player matchups, and betting insights for CS2, R6, COD, Valorant, and Apex. Pass a KashRock -vs- slug or kr_match_id from match lists — never a provider numeric id.

GET/v6/esports/{sport}/matches/{match_slug}/prep
ParamTypeRequiredDescription
match_slugpathYesKR slug or kr_match_id (not provider ids)
team1string—Optional resolve override
team2string—Optional resolve override
datedate—Optional YYYY-MM-DD resolve override
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/matches/ence-vs-falcons-force-14-09-2026/prep"
200 · live (truncated)
{
  "source": "kashrock",
  "sport": "esports_cs2",
  "kr_match_id": "kr_cs2_ence-vs-falcons-force-14-09-2026",
  "match_slug": "ence-vs-falcons-force-14-09-2026",
  "team_stats": [
    {
      "team": "ENCE",
      "sample_size": 92,
      "map_winrate": 46.74
    }
  ],
  "map_pools": [
    {
      "team": "ENCE",
      "maps": [
        {
          "map": "Dust2",
          "pick_rate": 48.6,
          "ban_rate": 4,
          "win_rate": 49.8
        }
      ]
    }
  ],
  "form": [
    {
      "team": "ENCE",
      "results": [
        "WIN",
        "WIN",
        "WIN",
        "WIN",
        "WIN"
      ]
    }
  ]
}

CS2 player board + favourite weapons

GET/v6/esports/cs2/matches/{match_slug}/player-board
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/matches/ence-vs-falcons-force-14-09-2026/player-board"
200 · live (truncated)
{
  "source": "kashrock",
  "sport": "esports_cs2",
  "teams": [
    {
      "team": "Misa Esports",
      "players": [
        {
          "nickname": "EMSTAR",
          "kd": 0.9241,
          "adr": 83.7777,
          "favourite_weapons": [
            {
              "name": "M4A4",
              "kills": 0.4955
            },
            {
              "name": "AK-47",
              "kills": 0.4289
            },
            {
              "name": "Glock-18",
              "kills": 0.3333
            }
          ]
        }
      ]
    }
  ]
}

CS2 tournament maps

Map picks/bans and side winrates for the match's tournament. Same KashRock match ref as prep.

GET/v6/esports/cs2/matches/{match_slug}/tournament-maps
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/matches/ence-vs-falcons-force-14-09-2026/tournament-maps"

Finished boxscore

Vault per-map combat for a finished series. Pass a KashRock slug or kr_match_id. Lineup includes STARTER and SUB. Sport-native model fields (gold, GPM, DPM, hero, items) appear when the vault has them. Not live KDA — that is Live in-game. MCP: get_boxscore.

GET/v6/esports/{sport}/matches/{slug_or_kr_match_id}/boxscore
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/mlbb/matches/kr_mlbb_team-falcons-vs-aurora-gaming-13-09-2026/boxscore"
  • begin_atis the game's own start, never the match start or a midnight date. When the source has no game clock it is null, with begin_at_reason set to source_has_no_game_clock or unverified.
  • duration is in seconds, and end_at is begin_at plus duration. Either is null with a reason when the source lacks it.
  • Each map's winner carries result_source: source, or derived_from_series when a sweep (2-0 or 3-0) decides every game. Otherwise the winner is null with result.available: falseand a reason, and each player's map_won is null.
  • winner_score, loser_score and rounds_played are rounds, so they appear for CS2, Valorant and R6 only.
  • Every player's team_idequals the lineup's team id, and the series score matches the match list and the match by id.
  • A finished map never leaves the boxscore. During a series, and before the match history has a map, the map carries its final live player stats with provisional: true; the history's own rows replace them when they arrive.
  • Player rows carry only their own title's stats: no ADR or headshots on Dota 2, no rounds on LoL. A stat nobody measured is left out, never 0 or null. columnslists the title's stat columns in display order as key, label and format; build your table from it.
  • On the boxscore (get_boxscore and /v7 include=boxscore), the match and each map carry stats_coverage: full (every stat field populated), basic (player rows with the core scoreboard line only) or none (no player stats stored). It is derived from the stored rows, so it reflects exactly what the response contains.
  • streams lists the match's watch links: platform (twitch, kick or youtube), channel, url and embed_url, plus language, official, name and viewers when known. The match by id and the live games list carry the same streams.

GET /v6/esports/{sport}/boxscores lists recent finished series for every title, newest first, each with its per-map player stats. A series still being played is not listed as finished: a best of 3 at 1-1 stays current until a side wins.

Stats status on finished matches

Every finished match that comes from the vault carries stats_status, so you know whether player stats exist for every map. It is on matches lists, the match by id, completed lists and team schedules.

  • complete: every map has player stats.
  • partial: some maps have player stats and the rest are still being filled.
  • unavailable: no source publishes player stats for the remaining maps, so none will arrive.
  • null: no map has player stats yet, or the match has not been checked yet.

Treat unavailable as final: the match and its maps are listed with scores, but no data source publishes player stats for the missing maps.

Also: /{sport}/matches/live, /{sport}/upcoming/matches, /{sport}/completed/matches, /{sport}/schedule, /{sport}/streams, /{sport}/teams/h2h. Live in-game KDA: /docs/endpoints/live.