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, 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-2398526-map-1-H0NeST",
      "mapId": "cs2-match-2398526-map-1",
      "matchId": "cs2-match-2398526",
      "playerId": "cs2-player-24045",
      "playerName": "H0NeST",
      "teamId": "cs2-team-13857",
      "teamName": "Iowa Stormboar",
      "kills": 16,
      "deaths": 9,
      "assists": 3,
      "plusMinus": 7,
      "adr": null,
      "kast": null,
      "rating": 1.41,
      "ratingVersion": "source_rating_3_0",
      "headshots": 11,
      "headshotPercent": null,
      "firstKills": 1,
      "firstDeaths": 1,
      "source": "live",
      "lastSyncedAt": "2026-09-23T02:57:57.779Z",
      "player": {
        "id": "cs2-player-24045",
        "nickname": "H0NeST",
        "slug": "h0nest",
        "realName": "Nazar Stefinko",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/f2972c1aaaea60879f3c33ed6058b227.webp",
        "countryName": "Ukraine",
        "countryCode": "UA",
        "age": 18,
        "rating": 1.26,
        "mapsPlayed": 44,
        "careerStats": {
          "rating": 1.31,
          "window": "past_3_months",
          "opening": null,
          "sniping": null,
          "trading": null,
          "utility": null,
          "entrying": null,
          "clutching": null,
          "firepower": null,
          "mapsPlayed": 50,
          "prizeMoney": 3100,
          "careerRating": 1.31,
          "windowRating": null,
          "missingFields": [
            "age"
          ],
          "profileStatus": "partial",
          "lastKnownRating": 1.31,
          "lastActiveTournament": "LiveFISSURE Playground 3",
          "profileImageStatus": "success",
          "profileImageClaimedAt": "2026-06-26T02:34:40.140807+02:00"
        },
        "currentTeamId": "cs2-team-13857",
        "status": "inactive",
        "primaryRole": "entry",
        "roleConfidence": "medium",
        "statusUpdatedAt": "2026-07-05T00:40:56.174Z",
        "lastSyncedAt": "2026-09-23T03:04:06.671Z",
        "lastVerified": "2026-09-23T03:04:06.671Z"
      },
      "team": {
        "id": "cs2-team-13857",
        "name": "Iowa Stormboar",
        "slug": "iowa-stormboar",
        "teamTag": "IS",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/c875a66adefc7e50e0b34ba4b97bed5c.webp",
        "countryName": "United States",
        "countryCode": "US",
        "region": "Americas",
        "worldRanking": 177,
        "lastSyncedAt": "2026-09-23T03:09:17.179Z",
        "lastVerified": "2026-09-23T03:09:17.179Z",
        "confidence": "high"
      },
      "…": "7 more fields"
    },
    {
      "entityType": "cs2_player_stat",
      "id": "live-source-match-2398526-map-1-Scorchyy",
      "mapId": "cs2-match-2398526-map-1",
      "matchId": "cs2-match-2398526",
      "playerId": "cs2-player-24528",
      "playerName": "Scorchyy",
      "teamId": "cs2-team-13857",
      "teamName": "Iowa Stormboar",
      "kills": 12,
      "deaths": 6,
      "assists": 1,
      "plusMinus": 6,
      "adr": null,
      "kast": null,
      "rating": 1.46,
      "ratingVersion": "source_rating_3_0",
      "headshots": 4,
      "headshotPercent": null,
      "firstKills": 3,
      "firstDeaths": 1,
      "source": "live",
      "lastSyncedAt": "2026-09-23T02:57:57.477Z",
      "player": {
        "id": "cs2-player-24528",
        "nickname": "Scorchyy",
        "slug": "scorchyy",
        "real
…

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": "3d6e19c0feb325ab753bc9cefe47430a",
      "payload": {
        "bombSite": "A",
        "tPlayers": 2,
        "ctPlayers": 1,
        "playerName": "TyRa",
        "playerNick": "TyRa"
      },
      "bombSite": "A",
      "tPlayers": 2,
      "ctPlayers": 1,
      "eventType": "BombPlanted",
      "observedAt": "2026-09-23T02:59:52.534Z",
      "playerName": "TyRa",
      "playerNick": "TyRa",
      "webhookEligible": true
    },
    {
      "id": "live_evt_1",
      "type": "BombPlanted",
      "round": null,
      "source": "live",
      "eventId": "d5e85dd74809ea07557b244c6ab64254",
      "payload": {
        "bombSite": "B",
        "tPlayers": 4,
        "ctPlayers": 3,
        "playerName": "Valter0k",
        "playerNick": "Valter0k"
      },
      "bombSite": "B",
      "tPlayers": 4,
      "ctPlayers": 3,
      "eventType": "BombPlanted",
      "observedAt": "2026-09-23T02:59:52.535Z",
      "playerName": "Valter0k",
      "playerNick": "Valter0k",
      "webhookEligible": true
    }
  ],
  "meta": {
    "count": 64,
    "dataAvailable": true,
    "source": "live_state",
    "dataScope": "live_live feed_events",
    "unavailableEventTypes": [],
    "limit": 64,
    "total": 64,
    "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-2398526-map-1",
    "entityType": "cs2_game",
    "matchId": "cs2-match-2398526",
    "mapNumber": 1,
    "map": "Dust2",
    "pickTeamId": null,
    "winnerTeamId": "cs2-team-13857",
    "score": {
      "team1": 13,
      "team2": 2
    },
    "halfScores": {
      "team1": [
        10,
        3
      ],
      "team2": [
        2,
        0
      ]
    },
    "team1Halves": [
      10,
      3
    ],
    "team2Halves": [
      2,
      0
    ],
    "overtime": null,
    "durationRounds": 15,
    "duration": {
      "rounds": 15,
      "source": "stored"
    },
    "status": "completed",
    "resultType": "played",
    "resultStatus": "completed",
    "isForfeit": false,
    "statsEligible": true,
    "unavailableReason": null,
    "playerStatsAvailable": true,
    "playerStats": [
      {
        "playerId": "cs2-player-24045",
        "playerName": "H0NeST",
        "teamId": "cs2-team-13857",
        "teamName": "Iowa Stormboar",
        "kills": 16,
        "deaths": 9,
        "assists": 3,
        "plusMinus": 7,
        "adr": null,
        "kast": null,
        "rating": 1.41,
        "ratingVersion": "source_rating_3_0",
        "headshots": 11,
        "headshotPercent": null,
        "openingKills": 1,
        "openingDeaths": 1,
        "rating3Profile": {
          "rating3": null,
          "rating3Available": false,
          "subratings": {
            "kills": 16,
            "damage": null,
            "survival": 2.1111,
            "kast": null,
            "multiKills": null,
            "roundSwing": null
          },
          "openingDuels": {
            "openingKills": 1,
            "openingDeaths": 1,
            "successRate": 0.5
          },
          "unavailableSubratings": [
            "multi_kills",
            "round_swing"
          ],
          "rating2": 1.41
        },
        "source": "live",
        "lastSyncedAt": "2026-09-23T02:57:57.779Z"
      },
      {
        "playerId": "cs2-player-24467",
        "playerName": "Johan",
        "teamId": "cs2-team-12971",
        "teamName": "Wanted Goons",
        "kills": 3,
        "deaths": 14,
        "assists": 2,
        "plusMinus": -11,
        "adr": null,
        "kast": null,
        "rating": 0.41,
        "ratingVersion": "source_rating_3_0",
        "headshots": 2,
        "headshotPercent": null,
        "openingKills": 1,
        "openingDeaths": 2,
        "rating3Profile": {
          "rating3": null,
          "rating3Available": false,
          "subratings": {
            "kills": 3,
            "damage": null,
            "survival": 0.3571,
            "kast": null,
            "multiKills": null,
            "roundSwing": null
          },
          "openingDuels": {
            "openingKills": 1,
            "openingDeaths": 2,
            "successRate": 0.3333
          },
          "unavailableSubratings": [
            "multi_kills",
            "round_swing"
          ],
          "rating2": 0.41
        },
        "source": "live",
        "lastSyncedAt": "2026-09-23T02:57:58.661Z"
      }
    ],
    "roundsAvailable": false,
    "objectiveStats": {
      "dataAvailable": false,
      "unavailableReason": "not_yet_indexed",
      "confidence": {
        "plants": "high",
        "defuses": "high",
        "explosions": "high",
        "clutchDefuse": "medium"
      },
      "teamStats": [],
      "roundEvents": []
    },
    "…": "4 more fields"
  },
  "meta": {
  
…

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-09-23",
    "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"