Sample responses

Real responses from one completed match, from the match row down to single rounds, so you can see the data before you sign up.

Every block below is a real response from the live API, read on 13 October 2026, for one completed match: Vitality 3-0 MOUZ, a best-of-five in the ESL Pro League Season 24 playoffs on 11 October 2026. Lists show their first row and "..." stands for the rest; row ids and created_at/updated_at are trimmed from list rows. Each route below links to its reference page for the meaning of every field.

The id used throughout is 01a1279b-1147-72ee-b660-745c54b5cc35. To fetch everything below in one request, add ?include=maps,stats,vetoes,rounds,lineups to the match route (fetch a full match).

The match

GET /v1/cs2/matches/{id}. data_available says which of the routes below hold data for this match, so you can skip the empty ones.

{
  "data": {
    "id": "01a1279b-1147-72ee-b660-745c54b5cc35",
    "game_id": "019f23d1-fb5b-7d24-935d-e4d68f6f565a",
    "tournament_id": "019f23d2-5a32-72ef-a7c4-4c511c936fc0",
    "team_a_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",
    "team_b_id": "019f23d1-fb5c-738b-8ca9-2e78eaeb5b42",
    "format": "bo5",
    "status": "completed",
    "stage": "ESL Pro League Season 24 Playoffs",
    "scheduled_at": "2026-10-11T15:00:00Z",
    "started_at": "2026-10-11T15:02:10Z",
    "ended_at": "2026-10-11T18:11:52Z",
    "score_a": 3,
    "score_b": 0,
    "winner_team_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",
    "result_type": "played",
    "live_state": null,
    "changed_at": "2026-10-11T19:29:05.783154Z",
    "data_available": {
      "maps": true,
      "stats": true,
      "map_stats": true,
      "vetoes": true,
      "rounds": true,
      "depth": true,
      "lineups": true,
      "odds": true
    }
  }
}

Maps

GET /v1/cs2/matches/{id}/maps: one row per map, in the order they were played, with each half's score and the side team A started on. This match has three: Cache 13-8, Inferno 13-7, Dust II 16-12 (map results).

{
  "data": [
    {
      "match_id": "01a1279b-1147-72ee-b660-745c54b5cc35",
      "map_number": 1,
      "map_name": "de_cache",
      "score_a": 13,
      "score_b": 8,
      "first_half_a": 7,
      "first_half_b": 5,
      "second_half_a": 6,
      "second_half_b": 3,
      "overtime_a": null,
      "overtime_b": null,
      "first_half_side_a": "t",
      "status": "played",
      "rounds_played": 21,
      "started_at": "2026-10-11T15:02:10Z"
    },
    "..."
  ]
}

Vetoes

GET /v1/cs2/matches/{id}/vetoes: the whole ban and pick sequence, in order. In a best-of-five each side bans one map and picks two, and the last map is the decider (vetoes).

{
  "data": [
    {
      "order": 1,
      "team_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",
      "choice_type": "ban",
      "map_name": "de_ancient"
    },
    {
      "order": 2,
      "team_id": "019f23d1-fb5c-738b-8ca9-2e78eaeb5b42",
      "choice_type": "ban",
      "map_name": "de_anubis"
    },
    {
      "order": 3,
      "team_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",
      "choice_type": "pick",
      "map_name": "de_cache"
    },
    {
      "order": 4,
      "team_id": "019f23d1-fb5c-738b-8ca9-2e78eaeb5b42",
      "choice_type": "pick",
      "map_name": "de_inferno"
    },
    {
      "order": 5,
      "team_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",
      "choice_type": "pick",
      "map_name": "de_dust2"
    },
    {
      "order": 6,
      "team_id": "019f23d1-fb5c-738b-8ca9-2e78eaeb5b42",
      "choice_type": "pick",
      "map_name": "de_mirage"
    },
    {
      "order": 7,
      "team_id": null,
      "choice_type": "decider",
      "map_name": "de_nuke"
    }
  ]
}

Player stats

GET /v1/cs2/matches/{id}/stats: per player, one whole-match row (map_number: null) plus one row per map, so this match returns 40 rows for its 10 players. Here is ZywOo's whole-match row. kast is a 0 to 1 fraction on this route (match stats).

{
  "data": [
    {
      "match_id": "01a1279b-1147-72ee-b660-745c54b5cc35",
      "player_id": "019f23d2-5a33-7c16-8db2-c71322597ec0",
      "map_number": null,
      "team_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",
      "kills": 64,
      "assists": 15,
      "deaths": 33,
      "adr": 90.58,
      "rating": 2.17,
      "kast": 0.8317460317460318,
      "headshots": 28,
      "first_kills": 9,
      "first_deaths": 2,
      "trade_kills": 16,
      "trade_deaths": 7,
      "clutches": 1,
      "multikills_2k": 9,
      "multikills_3k": 6,
      "multikills_4k": 0,
      "multikills_5k": 0,
      "damage": 6250,
      "utility_value": 9400
    },
    "..."
  ]
}

Rounds

GET /v1/cs2/matches/{id}/rounds: one row per team per round, so the 69 rounds of this match return 138 rows. Each carries the side, the result, the economy and the round's own kills and damage (round stats).

{
  "data": [
    {
      "match_id": "01a1279b-1147-72ee-b660-745c54b5cc35",
      "map_number": 1,
      "round_number": 1,
      "team_id": "019f23d1-fb5c-738b-8ca9-2e78eaeb5b42",
      "team_side": "ct",
      "won": true,
      "economy_level": -1,
      "equipment_value": 4500,
      "enemy_equipment_value": 4750,
      "money_spent": 1450,
      "kills": 5,
      "deaths": 3,
      "assists": 3,
      "damage": 500,
      "headshots": 4,
      "first_kills": 0,
      "first_deaths": 1,
      "trade_kills": 1,
      "trade_deaths": 1,
      "clutches": 0,
      "clutch_attempts": 0,
      "bomb_plants": 0,
      "bomb_defuses": 0,
      "flash_assists": 0,
      "utility_value": 300,
      "kast": 5,
      "pistol_round": true,
      "end_reason": "CTWin",
      "round_duration_ms": 60874
    },
    "..."
  ]
}

Lineups

GET /v1/cs2/matches/{id}/lineups: the players each team named for the match, which can include a sixth player (lineups).

{
  "data": [
    {
      "match_id": "01a1279b-1147-72ee-b660-745c54b5cc35",
      "team_id": "019f23d1-fb5c-738b-8ca9-2e78eaeb5b42",
      "player_ids": [
        "019f23d2-5a33-7143-938d-55ec3b77cb81",
        "019f23d2-5a33-73a9-9f17-b5f6e6cfc0f7",
        "019f23d2-5a33-7c06-a216-7a8f6f400254",
        "019f23d2-5a33-7e49-81a6-8ac5c905d7ad",
        "019f23d2-5a33-7e64-9eaa-52fabedd29c8",
        "019f9663-b47a-7f27-a35b-cb4ac3602386"
      ],
      "captured_at": "2026-10-10T20:57:16.402065Z"
    },
    "..."
  ]
}

The team

GET /v1/cs2/teams/vitality. Every team and player route takes the slug in place of the id (resolve by slug).

{
  "data": {
    "id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",
    "game_id": "019f23d1-fb5b-7d24-935d-e4d68f6f565a",
    "slug": "vitality",
    "name": "Vitality",
    "short_name": "VIT",
    "region": "Europe",
    "country_code": "FR",
    "logo_url": "",
    "own_rank": null,
    "external_rank": 3
  }
}

What this page leaves out

  • The market line. Its shape and how it is built are on market line.
  • Player figures over 12 months. Percentiles, per-map splits and weapons are on player stats.
  • Depth. Weapon, grenade and duel detail per player is on player depth.

To read these routes yourself, start with the quickstart. The sandbox key is free and reads a fixed sample of past matches.

On this page