Docs/CS2 API/CS2 Maps and Rounds API

CS2 Maps and Rounds API

Map-level data: the active duty pool, the map catalog, and for each map played in a series its player stats, round history and events.

6 endpoints in this section. Authenticate with the x-api-key header; every response is { success, data, meta }. Other sections: Live, Odds, Matches, Rankings, Teams, Players, Events, Stats & leaderboards, Skins, Transfers, Search & reference.

Map player stats

GET/api/v1/cs2/games/{gameId}/stats
GET/api/v1/cs2/games/{gameId}/player-stats
GET/api/v1/cs2/maps/{mapId}/stats
GET/api/v1/cs2/maps/{mapId}/player-stats

Per-player stats for one map (game). These routes are equivalent; use whichever reads best.

Query parameters

ParameterTypeDescription
gameId (path)*stringGame (map) id from /cs2/matches/{matchId}/games.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/games/GAME_ID/stats" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "success": true,
  "data": [
    {
      "entityType": "cs2_player_stat",
      "id": "live-source-match-2399265-map-1-Gizmy",
      "mapId": "cs2-match-2399265-map-1",
      "matchId": "cs2-match-2399265",
      "playerId": "cs2-player-21816",
      "playerName": "Gizmy",
      "teamId": "cs2-team-8474",
      "teamName": "100 Thieves",
      "kills": 11,
      "deaths": 12,
      "assists": 4,
      "plusMinus": -1,
      "adr": 61.5,
      "kast": 0.762,
      "rating": 0.99,
      "ratingVersion": "cito_rating_1",
      "headshots": 6,
      "headshotPercent": 0.545,
      "firstKills": 2,
      "firstDeaths": 1,
      "lastSyncedAt": "2026-10-16T19:14:48.147Z",
      "player": {
        "id": "cs2-player-21816",
        "nickname": "Gizmy",
        "slug": "gizmy",
        "realName": "Jack von Spreckelsen",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/eba9e8db28a85e230e1f1f2e529829f5.webp",
        "countryName": "United Kingdom",
        "countryCode": "GB",
        "age": 22,
        "rating": 0.94,
        "mapsPlayed": 72,
        "careerStats": {
          "rating": 0.94,
          "lastKnownRating": 0.94
        },
        "currentTeamId": "cs2-team-11811",
        "status": "active",
        "primaryRole": "support",
        "roleConfidence": "medium",
        "statusUpdatedAt": "2026-10-16T18:56:27.673Z",
        "lastSyncedAt": "2026-10-16T19:18:23.962Z",
        "lastVerified": "2026-10-16T19:18:23.962Z"
      },
      "team": {
        "id": "cs2-team-8474",
        "name": "100 Thieves",
        "slug": "100-thieves",
        "teamTag": "1T",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/ac59058bd7afa346763eda6e57e98413.webp",
        "countryName": "Europe",
        "countryCode": null,
        "region": "Europe",
        "worldRanking": 37,
        "lastSyncedAt": "2026-10-16T19:39:29.017Z",
        "lastVerified": "2026-10-16T19:39:29.017Z",
        "confidence": "high",
        "alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/46d3bfa423b2598593ea7ce36ad3149e.webp",
        "darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/46d3bfa423b2598593ea7ce36ad3149e.webp"
      },
      "availableSubresources": [],
      "…": "6 more fields"
    },
    {
      "entityType": "cs2_player_stat",
      "id": "live-source-match-2399265-map-1-device",
      "mapId": "cs2-match-2399265-map-1",
      "matchId": "cs2-match-2399265",
      "playerId": "cs2-player-7592",
      "playerName": "device",
      "teamId": "cs2-team-8474",
      "teamName": "100 Thieves",
      "kills": 24,
      "deaths": 10,
      "assists": 3,
      "plusMinus": 14,
      "adr": 104.1,
      "kast": 0.857,
      "rating": 1.49,
      "ratingVersion": "cito_rating_1",
      "headshots": 8,
      "headshotPercent": 0.333,
      "firstKills": 4,
      "firstDeaths": 1,
      "lastSyncedAt": "2026-10-16T19:14:47.722Z",
      "player": {
        "id": "cs2-player-7592",
        "nickname": "device",
        "slug": "device",
        "realName": "Nicolai Reedtz",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/d3752c9aea619eb2a9eeb8b9f37d5960.webp",
        "countryName": "Denmark",
        "countryCode": "DK",
        "age": 30,
        "rating": 1.12,
        "mapsPlayed": 185,
        "careerStats": {
          "rating": 1.12,
          "lastKnownRating": 1.12
        },
        "currentTeamId": "cs2-team-8474",
        "
…

Map rounds

GET/api/v1/cs2/games/{gameId}/rounds
GET/api/v1/cs2/maps/{mapId}/rounds

Round-by-round results for one map: winner, side and how each round ended. These routes are equivalent; use whichever reads best.

Query parameters

ParameterTypeDescription
gameId (path)*stringGame (map) id from /cs2/matches/{matchId}/games.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/games/GAME_ID/rounds" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "success": true,
  "data": {
    "dataAvailable": false,
    "unavailableReason": "not_yet_indexed",
    "dataQuality": "unavailable",
    "message": "Round-level bomb event data is not available for this map yet."
  },
  "meta": {
    "count": 0,
    "dataAvailable": false,
    "limit": 0,
    "total": 0,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Map events

GET/api/v1/cs2/games/{gameId}/events

Kills, utility, bomb and round events for one map, where demo data exists.

Query parameters

ParameterTypeDescription
gameId (path)*stringGame (map) id from /cs2/matches/{matchId}/games.
limitintegerRows to return. Maximum 5000; larger values are reduced to 5000.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/games/GAME_ID/events" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "success": true,
  "data": [
    {
      "id": "live_evt_0",
      "type": "BombPlanted",
      "round": null,
      "source": "live",
      "eventId": "6559b44b62397d1904e02a0c2bf258e4",
      "payload": {
        "bombSite": "B",
        "tPlayers": 4,
        "ctPlayers": 2,
        "playerName": "puuha",
        "playerNick": "puuha"
      },
      "bombSite": "B",
      "tPlayers": 4,
      "ctPlayers": 2,
      "eventType": "BombPlanted",
      "observedAt": "2026-10-16T17:36:46.192Z",
      "playerName": "puuha",
      "playerNick": "puuha"
    },
    {
      "id": "live_evt_1",
      "type": "BombPlanted",
      "round": null,
      "source": "live",
      "eventId": "9a54a19324c6568c21b77a1865ecda31",
      "payload": {
        "bombSite": "B",
        "tPlayers": 3,
        "ctPlayers": 2,
        "playerName": "R4DYX",
        "playerNick": "R4DYX"
      },
      "bombSite": "B",
      "tPlayers": 3,
      "ctPlayers": 2,
      "eventType": "BombPlanted",
      "observedAt": "2026-10-16T17:41:29.137Z",
      "playerName": "R4DYX",
      "playerNick": "R4DYX"
    }
  ],
  "meta": {
    "count": 63,
    "dataAvailable": true,
    "source": "live_state",
    "dataScope": "live_live feed_events",
    "unavailableEventTypes": [],
    "limit": 63,
    "total": 63,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Game details

GET/api/v1/cs2/games/{gameId}

One map (game) of a match with score, halves and winner.

Query parameters

ParameterTypeDescription
gameId (path)*stringGame (map) id from /cs2/matches/{matchId}/games.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/games/GAME_ID" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "success": true,
  "data": {
    "id": "cs2-match-2399265-map-1",
    "entityType": "cs2_game",
    "matchId": "cs2-match-2399265",
    "mapNumber": 1,
    "map": "Nuke",
    "pickTeamId": null,
    "winnerTeamId": "cs2-team-8474",
    "score": {
      "team1": 13,
      "team2": 8
    },
    "halfScores": null,
    "team1Halves": null,
    "team2Halves": null,
    "overtime": null,
    "durationRounds": 21,
    "duration": {
      "rounds": 21,
      "source": "stored"
    },
    "status": "completed",
    "resultType": "played",
    "resultStatus": "completed",
    "isForfeit": false,
    "statsEligible": true,
    "unavailableReason": null,
    "playerStatsAvailable": true,
    "playerStats": [
      {
        "playerId": "cs2-player-21816",
        "playerName": "Gizmy",
        "teamId": "cs2-team-8474",
        "teamName": "100 Thieves",
        "kills": 11,
        "deaths": 12,
        "assists": 4,
        "plusMinus": -1,
        "adr": 61.5,
        "kast": 0.762,
        "rating": 0.99,
        "ratingVersion": "cito_rating_1",
        "headshots": 6,
        "headshotPercent": 0.545,
        "openingKills": 2,
        "openingDeaths": 1,
        "ratingProfile": {
          "rating": 0.99,
          "ratingVersion": "cito_rating_1",
          "components": {
            "killsPerMap": 11,
            "adr": 61.5,
            "kast": 0.762,
            "killsPlusAssistsPerDeath": 1.25
          },
          "openingDuels": {
            "openingKills": 2,
            "openingDeaths": 1,
            "successRate": 0.6667
          },
          "formula": "Cito Rating 1.0 per map: 0.30*KPR/0.683 + 0.25*(1-DPR)/0.305 + 0.25*ADR/74.1 + 0.15*KAST/0.716 + 0.05*APR/0.223 (per-…"
        },
        "lastSyncedAt": "2026-10-16T19:14:48.147Z"
      },
      {
        "playerId": "cs2-player-25253",
        "playerName": "Joey",
        "teamId": "cs2-team-10333",
        "teamName": "Sangal",
        "kills": 13,
        "deaths": 15,
        "assists": 0,
        "plusMinus": -2,
        "adr": 67.5,
        "kast": 0.524,
        "rating": 0.84,
        "ratingVersion": "cito_rating_1",
        "headshots": 8,
        "headshotPercent": 0.615,
        "openingKills": 1,
        "openingDeaths": 4,
        "ratingProfile": {
          "rating": 0.84,
          "ratingVersion": "cito_rating_1",
          "components": {
            "killsPerMap": 13,
            "adr": 67.5,
            "kast": 0.524,
            "killsPlusAssistsPerDeath": 0.8667
          },
          "openingDuels": {
            "openingKills": 1,
            "openingDeaths": 4,
            "successRate": 0.2
          },
          "formula": "Cito Rating 1.0 per map: 0.30*KPR/0.683 + 0.25*(1-DPR)/0.305 + 0.25*ADR/74.1 + 0.15*KAST/0.716 + 0.05*APR/0.223 (per-…"
        },
        "lastSyncedAt": "2026-10-16T19:14:48.329Z"
      }
    ],
    "roundsAvailable": false,
    "objectiveStats": {
      "dataAvailable": false,
      "unavailableReason": "not_yet_indexed",
      "confidence": {
        "plants": "high",
        "defuses": "high",
        "explosions": "high",
        "clutchDefuse": "medium"
      },
      "teamStats": [],
      "roundEvents": []
    },
    "…": "4 more fields"
  },
  "meta": {
    "dataAvailable": true,
    "source": "match_maps"
  }
}

Map catalog

GET/api/v1/cs2/maps

Every competitive map with its name and image.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/maps" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "success": true,
  "data": [
    {
      "id": "de_ancient",
      "slug": "ancient",
      "name": "Ancient",
      "mapNameCanonical": "Ancient",
      "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
      "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
      "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png"
    },
    {
      "id": "de_anubis",
      "slug": "anubis",
      "name": "Anubis",
      "mapNameCanonical": "Anubis",
      "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
      "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
      "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png"
    }
  ],
  "meta": {
    "count": 10,
    "source": "static_catalog",
    "limit": 10,
    "total": 10,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Active map pool

GET/api/v1/cs2/map-pool
GET/api/v1/cs2/maps/pool

The maps in the current competitive pool. These routes are equivalent; use whichever reads best.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/map-pool" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_active_duty_map_pool",
    "asOf": "2026-10-16",
    "poolName": "Active Duty",
    "inPoolCount": 7,
    "maps": [
      {
        "id": "de_ancient",
        "slug": "ancient",
        "name": "Ancient",
        "status": "in_pool",
        "inPoolSince": "2023-09-27",
        "removedAt": null,
        "mapNameCanonical": "Ancient",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
        "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
        "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
        "inPool": true,
        "pickTeamId": null,
        "objectiveStats": {
          "dataAvailable": false,
          "unavailableReason": "not_yet_indexed",
          "confidence": {
            "plants": "high",
            "defuses": "high",
            "explosions": "high",
            "clutchDefuse": "medium"
          },
          "teamStats": [],
          "roundEvents": []
        }
      },
      {
        "id": "de_anubis",
        "slug": "anubis",
        "name": "Anubis",
        "status": "in_pool",
        "inPoolSince": "2023-09-27",
        "removedAt": null,
        "mapNameCanonical": "Anubis",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
        "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
        "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
        "inPool": true,
        "pickTeamId": null,
        "objectiveStats": {
          "dataAvailable": false,
          "unavailableReason": "not_yet_indexed",
          "confidence": {
            "plants": "high",
            "defuses": "high",
            "explosions": "high",
            "clutchDefuse": "medium"
          },
          "teamStats": [],
          "roundEvents": []
        }
      }
    ],
    "inPool": [
      {
        "id": "de_ancient",
        "slug": "ancient",
        "name": "Ancient",
        "status": "in_pool",
        "inPoolSince": "2023-09-27",
        "removedAt": null,
        "mapNameCanonical": "Ancient",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
        "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
        "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
        "inPool": true
      },
      {
        "id": "de_anubis",
        "slug": "anubis",
        "name": "Anubis",
        "status": "in_pool",
        "inPoolSince": "2023-09-27",
        "removedAt": null,
        "mapNameCanonical": "Anubis",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
        "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
        "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
        "inPool": true
      }
    ],
    "removed": [
      {
        "id": "de_overpass",
        "slug": "overpass",
        "name": "Overpass",
        "status": "removed",
        "inPoolSince": "2025-07-01",
        "removedAt": "2026-07-06",
        "mapNameCanonical": "Overpass",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/overpass.png",
        "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/overpass.png",
        "c
…

Try the CS2 Maps and Rounds API

Run a real request with your key, then wire the same call into your app. The free plan includes 500 requests a month.

bash
curl "https://api.citoapi.com/api/v1/cs2/map-pool" \
  -H "x-api-key: YOUR_API_KEY"