Esports Schedule API.
Every fixture on one stable id.

Upcoming, live and finished matches for CS2, Valorant, LoL, Dota 2, COD, R6, MLBB, Deadlock and Apex — one kr_match_id per series that joins props, lines, boxscores and results without a mapping layer.

GET /v7/cs2/matches?status=upcoming

A real fixture from the board — CCT Europe Group A, with the canonical id your props, lines and results will all join on.

One match id carries the whole lifecycle: provisional when books post the fixture before the schedule does, redirected with X-Match-Redirected-From if the record is ever corrected, and permanent after it finishes.

GET /v7/cs2/matches?status=upcoming
{
  "available": true,
  "sport": "cs2",
  "total": 160,
  "matches": [
    {
      "kr_match_id": "kr_cs2_banda-chuya-vs-morrow-esports-07-10-2026",
      "slug": "banda-chuya-vs-morrow-esports-07-10-2026",
      "status": "not_started",
      "event_time": "2026-10-07T08:00:00Z",
      "team1": "Morrow Esports",
      "team2": "Banda Chuya",
      "team1_id": "kr_tm_7b8290ae28dd",
      "team2_id": "kr_tm_8622b1bf77f8",
      "competition": "CCT Europe",
      "stage_name": "Group A",
      "lan": false,
      "boxscore_available": true
    }
  ]
}

What a match id carries

Frequently asked questions

What does the esports schedule API return?

Every fixture, live series and finished match across nine titles on stable kr_match_ids. Filter by status (live, upcoming, finished), date (YYYY-MM-DD), team name, free-text q, or a list of ids. A finished match keeps its id permanently — it never becomes a 404.

Can one call return the whole match?

Yes — include= takes boxscore, prep, veto, maps, player_board, lines, streams and h2h, so a fixture view or a model feature pull is one request instead of a crawl.

How do live scores work?

GET /v7/{sport}/live returns matches in progress — sport=all covers every title in one call — and /v7/live/ws streams scores over websocket on Builder and up.

What happens when a match isn't on the schedule yet?

If two or more books list a fixture before the schedule does, it gets a provisional kr_match_id that stays valid on every route. When the schedule confirms it, the id serves the official match — ids never silently die.

Which plan do I need?

Matches and live are on the free Sandbox tier — 500 requests every UTC day. Line history and the websocket are on paid plans from $29/mo.