Docs/CS2 API/CS2 Player Stats API

CS2 Player Stats API

Player profiles by id or slug ("donk", "zywoo"): headline stats, career and seasons, map and weapon splits, clutches and flash assists, form and team history.

17 endpoints in this section. Authenticate with the x-api-key header; every response is { success, data, meta }. Other sections: Live, Player props, Odds, Positions & heatmaps, Watch live (embeds), Pro skins & 3D, Matches, Maps & rounds, Rankings, Teams, Events, Stats & leaderboards, Skins, Transfers, Search & reference.

Search players

GET/api/v1/cs2/players/search

Find players by nickname or real name. Requires `q`. Player photos: `imageUrl` on a player (`playerImageUrl` on roster and transfer rows) is always an image URL. A player with no photo gets a neutral silhouette placeholder (400x417 transparent WebP, the same size as the photos) and `imageIsPlaceholder: true` (`playerImageIsPlaceholder` on roster and transfer rows); a real photo has `false`. Check the flag, not the URL.

Query parameters

ParameterTypeDescription
q*stringSearch text.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "entityType": "cs2_player",
      "id": "cs2-player-11893",
      "nickname": "ZywOo",
      "slug": "zywoo",
      "realName": "Mathieu Herbaut",
      "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp",
      "countryName": "France",
      "countryCode": "FR",
      "age": 25,
      "rating": 1.24,
      "mapsPlayed": 167,
      "careerStats": {
        "rating": 1.24,
        "lastKnownRating": 1.24
      },
      "currentTeamId": "cs2-team-9565",
      "status": "active",
      "primaryRole": "AWPer",
      "roleConfidence": "high",
      "statusUpdatedAt": "2026-11-11T12:51:13.764Z",
      "lastSyncedAt": "2026-11-11T12:51:12.962Z",
      "lastVerified": "2026-11-11T12:51:12.962Z",
      "availableSubresources": [
        "stats",
        "matches"
      ],
      "unavailableSubresources": [
        "teams",
        "weapons"
      ],
      "unavailableFields": {},
      "dataQuality": "complete",
      "confidence": "high",
      "…": "2 more fields"
    }
  ],
  "meta": {
    "query": "zywoo",
    "count": 1,
    "dataAvailable": true,
    "unavailableReason": null,
    "limit": 1,
    "total": 1,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Player career

GET/api/v1/cs2/players/{playerIdOrSlug}/career

A player's career totals and team history (`byTeam[]`), each with `firstMapAt` / `lastMapAt`, `consistencyScore` and `volatilityScore`; `computedAt` is the rollup refresh time. Totals come from one rollup shared by `/stats`, `/career`, `/seasons`, `/periods` and `/cs2/stats/players`, refreshed every 15 minutes, so they agree. Fields not every match records (assists, opening kills / deaths) are given only when at least 90% of the player's maps record them, else null; the sum over the maps that do is always in `assistsRecorded`, `openingKillsRecorded`, `openingDeathsRecorded`, with `assistsCoverage` / `openingDuelCoverage`. `headshotPercent` is total headshots / kills on the maps that record headshots (0-1, 4 decimals).

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
includestringFilter by include.
includeDemostringFilter by includeDemo.
include_demostringFilter by include_demo.
limitintegerRows to return. Maximum 100; larger values are reduced to 100.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_career_stats",
    "playerId": "cs2-player-11893",
    "playerNickname": "ZywOo",
    "dataAvailable": true,
    "totals": {
      "matches": 282,
      "maps": 654,
      "kills": 12331,
      "deaths": 8477,
      "assists": 3130,
      "kdRatio": 1.4546,
      "adr": 87.77,
      "kast": 0.7793,
      "rating": 1.2393,
      "openingKills": 2019,
      "openingDeaths": 1172,
      "assistsCoverage": 0.939,
      "openingDuelCoverage": 0.998,
      "assistsRecorded": 3130,
      "openingKillsRecorded": 2019,
      "openingDeathsRecorded": 1172,
      "openingDuelMaps": 653,
      "headshotPercent": 0.4272,
      "computedAt": "2026-11-11T12:52:00.600Z",
      "clutchAttempts": null,
      "clutchWins": null,
      "clutchWinPercent": null,
      "flashAssists": null,
      "utilityDamage": null
    },
    "clutches": null,
    "flashAssists": null,
    "utilityDamage": null,
    "byTeam": [
      {
        "statKey": "team:cs2-player-11893:cs2-team-9565",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "periodType": "career",
        "periodStart": "2018-11-18T23:10:00.000Z",
        "periodEnd": "2026-11-11T04:15:00.000Z",
        "eventId": null,
        "eventName": null,
        "matches": 281,
        "maps": 653,
        "kills": 12314,
        "deaths": 8458,
        "assists": 3124,
        "kdRatio": 1.4559,
        "adr": 87.77,
        "kast": 0.7794,
        "rating": 1.2397,
        "openingKills": 2018,
        "openingDeaths": 1171,
        "consistencyScore": 0.7446,
        "volatilityScore": 0.2554,
        "opponentDifficulty": null,
        "…": "10 more fields"
      },
      {
        "statKey": "team:cs2-player-11893:cs2-team-4608",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-4608",
        "teamName": "Natus Vincere",
        "periodType": "career",
        "periodStart": "2023-07-08T17:20:00.000Z",
        "periodEnd": "2023-07-08T17:20:00.000Z",
        "eventId": null,
        "eventName": null,
        "matches": 1,
        "maps": 1,
        "kills": 17,
        "deaths": 19,
        "assists": 6,
        "kdRatio": 0.8947,
        "adr": 84.2,
        "kast": 0.708,
        "rating": 0.97,
        "openingKills": 1,
        "openingDeaths": 1,
        "consistencyScore": null,
        "volatilityScore": null,
        "opponentDifficulty": null,
        "…": "10 more fields"
      }
    ]
  },
  "meta": {
    "count": 2,
    "total": 2,
    "limit": 2,
    "page": 1,
    "dataAvailable": true,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Player seasons

GET/api/v1/cs2/players/{playerIdOrSlug}/seasons

A player's stats by year. Totals come from one rollup shared by `/stats`, `/career`, `/seasons`, `/periods` and `/cs2/stats/players`, refreshed every 15 minutes, so they agree. Fields not every match records (assists, opening kills / deaths) are given only when at least 90% of the player's maps record them, else null; the sum over the maps that do is always in `assistsRecorded`, `openingKillsRecorded`, `openingDeathsRecorded`, with `assistsCoverage` / `openingDuelCoverage`. `headshotPercent` is total headshots / kills on the maps that record headshots (0-1, 4 decimals).

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
limitintegerRows to return. Maximum 200; larger values are reduced to 200.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_season_stats",
    "playerId": "cs2-player-11893",
    "playerNickname": "ZywOo",
    "dataAvailable": true,
    "seasons": [
      {
        "statKey": "year:cs2-player-11893:2026",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "seasonYear": 2026,
        "periodStart": "2026-01-14T19:15:00.000Z",
        "periodEnd": "2026-11-11T04:15:00.000Z",
        "matches": 68,
        "maps": 165,
        "kills": 2980,
        "deaths": 1939,
        "assists": 833,
        "kdRatio": 1.5369,
        "adr": 89.85,
        "kast": 0.7822,
        "rating": 1.2713,
        "openingKills": 477,
        "openingDeaths": 260,
        "consistencyScore": 0.7287,
        "volatilityScore": 0.2713,
        "computedAt": "2026-11-11T12:52:00.600Z",
        "assistsRecorded": 833,
        "assistsCoverage": 1,
        "…": "5 more fields"
      },
      {
        "statKey": "year:cs2-player-11893:2025",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "seasonYear": 2025,
        "periodStart": "2025-01-15T18:40:00.000Z",
        "periodEnd": "2025-12-14T17:00:00.000Z",
        "matches": 82,
        "maps": 200,
        "kills": 3593,
        "deaths": 2535,
        "assists": 1075,
        "kdRatio": 1.4174,
        "adr": 88,
        "kast": 0.7812,
        "rating": 1.2338,
        "openingKills": 587,
        "openingDeaths": 337,
        "consistencyScore": 0.7372,
        "volatilityScore": 0.2628,
        "computedAt": "2026-11-11T12:52:00.600Z",
        "assistsRecorded": 1075,
        "assistsCoverage": 0.98,
        "…": "5 more fields"
      }
    ]
  },
  "meta": {
    "count": 2,
    "total": 8,
    "limit": 2,
    "page": 1,
    "dataAvailable": true,
    "totalPages": 4,
    "hasNext": true,
    "hasPrev": false
  }
}

Player periods

GET/api/v1/cs2/players/{playerIdOrSlug}/periods

A player's stats per team and over rolling periods (e.g. last 3 months). Career rows equal `/career` `byTeam[]` and come first (most maps first), then every other period newest first; `meta.total` counts all rows. Totals come from one rollup shared by `/stats`, `/career`, `/seasons`, `/periods` and `/cs2/stats/players`, refreshed every 15 minutes, so they agree. Fields not every match records (assists, opening kills / deaths) are given only when at least 90% of the player's maps record them, else null; the sum over the maps that do is always in `assistsRecorded`, `openingKillsRecorded`, `openingDeathsRecorded`, with `assistsCoverage` / `openingDuelCoverage`. `headshotPercent` is total headshots / kills on the maps that record headshots (0-1, 4 decimals).

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
limitintegerRows to return. Maximum 200; larger values are reduced to 200.
period_typestringFilter by period_type.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_period_stats",
    "playerId": "cs2-player-11893",
    "playerNickname": "ZywOo",
    "periodTypeFilter": null,
    "periods": [
      {
        "statKey": "career:source-player-11893:source-team-9565:vitality",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "periodType": "career",
        "periodStart": "2018-11-18T23:10:00.000Z",
        "periodEnd": "2026-11-11T04:15:00.000Z",
        "eventId": null,
        "eventName": null,
        "matches": 281,
        "maps": 653,
        "kills": 12314,
        "deaths": 8458,
        "assists": 3124,
        "kdRatio": 1.4559,
        "adr": 87.77,
        "kast": 0.7794,
        "rating": 1.2397,
        "openingKills": 2018,
        "openingDeaths": 1171,
        "consistencyScore": 0.7446,
        "volatilityScore": 0.2554,
        "opponentDifficulty": null,
        "…": "10 more fields"
      },
      {
        "statKey": "career:source-player-11893:source-team-4608:natus_vincere",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-4608",
        "teamName": "Natus Vincere",
        "periodType": "career",
        "periodStart": "2023-07-08T17:20:00.000Z",
        "periodEnd": "2023-07-08T17:20:00.000Z",
        "eventId": null,
        "eventName": null,
        "matches": 1,
        "maps": 1,
        "kills": 17,
        "deaths": 19,
        "assists": 6,
        "kdRatio": 0.8947,
        "adr": 84.2,
        "kast": 0.708,
        "rating": 0.97,
        "openingKills": 1,
        "openingDeaths": 1,
        "consistencyScore": null,
        "volatilityScore": null,
        "opponentDifficulty": null,
        "…": "10 more fields"
      }
    ],
    "dataAvailable": true
  },
  "meta": {
    "count": 2,
    "total": 84,
    "limit": 2,
    "page": 1,
    "dataAvailable": true,
    "totalPages": 42,
    "hasNext": true,
    "hasPrev": false
  }
}

Player tournaments

GET/api/v1/cs2/players/{playerIdOrSlug}/tournaments
GET/api/v1/cs2/players/{playerIdOrSlug}/events

Events a player has played, with placement and stats. These routes are equivalent; use whichever reads best.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
limitintegerRows to return. Maximum 200; larger values are reduced to 200.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_tournaments",
    "playerId": "cs2-player-11893",
    "playerNickname": "ZywOo",
    "tournaments": [
      {
        "eventId": "cs2-event-8251",
        "eventName": "BLAST Rivals 2026 Season 2",
        "eventSlug": "blast-rivals-2026-season-2",
        "eventTier": "A",
        "startsAt": "2026-11-11T00:00:00.000Z",
        "endsAt": "2026-11-15T23:59:59.000Z",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/ffad5ce2b72e370f6ed5c30a6ddf41cc.webp",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "matches": 1,
        "maps": 2,
        "kills": 36,
        "deaths": 27,
        "assists": 8,
        "kdRatio": 1.333,
        "adr": 75.7,
        "kast": 0.76,
        "rating": 1.135,
        "openingKills": 8,
        "openingDeaths": 3,
        "logoIsPlaceholder": false
      },
      {
        "eventId": "cs2-event-8050",
        "eventName": "PGL Masters Bucharest 2026",
        "eventSlug": "pgl-masters-bucharest-2026",
        "eventTier": "A",
        "startsAt": "2026-10-24T00:00:00.000Z",
        "endsAt": "2026-10-31T23:59:59.000Z",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/3d243df9e55b3252320526320ebfa51e.webp",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "matches": 7,
        "maps": 16,
        "kills": 257,
        "deaths": 209,
        "assists": 100,
        "kdRatio": 1.23,
        "adr": 86.18,
        "kast": 0.73,
        "rating": 1.159,
        "openingKills": 61,
        "openingDeaths": 24,
        "logoIsPlaceholder": false
      }
    ],
    "dataAvailable": true
  },
  "meta": {
    "count": 2,
    "dataAvailable": true,
    "limit": 2,
    "total": 2,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Player trends

GET/api/v1/cs2/players/{playerIdOrSlug}/trends

A player's rating and form over time.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
mapsstringFilter by maps.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_performance_trends",
    "playerId": "cs2-player-11893",
    "playerNickname": "ZywOo",
    "dataAvailable": true,
    "trends": [
      {
        "trendKey": "last_30_days:source-player-11893",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "windowType": "last_30_days",
        "periodStart": "2026-10-12T12:57:28.218Z",
        "periodEnd": "2026-11-11T12:57:28.218Z",
        "matches": 8,
        "maps": 18,
        "kills": 293,
        "deaths": 236,
        "assists": 108,
        "kdRatio": 1.2415,
        "adr": 85.02,
        "kast": 0.7365,
        "rating": 1.1567,
        "consistencyScore": 0.7437,
        "volatilityScore": 0.2563,
        "computedAt": "2026-11-11T12:57:28.239Z"
      },
      {
        "trendKey": "last_90_days:source-player-11893",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "windowType": "last_90_days",
        "periodStart": "2026-08-13T12:57:28.218Z",
        "periodEnd": "2026-11-11T12:57:28.218Z",
        "matches": 26,
        "maps": 63,
        "kills": 1067,
        "deaths": 740,
        "assists": 346,
        "kdRatio": 1.4419,
        "adr": 88.47,
        "kast": 0.7713,
        "rating": 1.2438,
        "consistencyScore": 0.7197,
        "volatilityScore": 0.2803,
        "computedAt": "2026-11-11T12:57:28.239Z"
      }
    ],
    "recentMaps": [
      {
        "matchId": "cs2-match-2399852",
        "mapId": "cs2-match-2399852-map-1",
        "mapName": "Anubis",
        "startsAt": "2026-11-11T04:15:00.000Z",
        "eventName": "BLAST Rivals 2026 Season 2",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "opponentName": "Falcons",
        "kills": 16,
        "deaths": 17,
        "assists": 2,
        "adr": 61.7,
        "kast": 0.739,
        "rating": 0.9
      },
      {
        "matchId": "cs2-match-2399852",
        "mapId": "cs2-match-2399852-map-2",
        "mapName": "Dust2",
        "startsAt": "2026-11-11T04:15:00.000Z",
        "eventName": "BLAST Rivals 2026 Season 2",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "opponentName": "Falcons",
        "kills": 20,
        "deaths": 10,
        "assists": 6,
        "adr": 89.7,
        "kast": 0.783,
        "rating": 1.37
      }
    ]
  },
  "meta": {
    "periods": 4,
    "recentMaps": 20,
    "dataAvailable": true
  }
}

Player transfers

GET/api/v1/cs2/players/{playerIdOrSlug}/transfers

A player's moves between teams. Player photos: `imageUrl` on a player (`playerImageUrl` on roster and transfer rows) is always an image URL. A player with no photo gets a neutral silhouette placeholder (400x417 transparent WebP, the same size as the photos) and `imageIsPlaceholder: true` (`playerImageIsPlaceholder` on roster and transfer rows); a real photo has `false`. Check the flag, not the URL.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
limitintegerRows to return. Maximum 200; larger values are reduced to 200.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_transfers",
    "playerId": "cs2-player-11893",
    "playerNickname": "ZywOo",
    "dataAvailable": true,
    "currentTeamId": "cs2-team-9565",
    "currentTeamName": "Vitality",
    "status": "active",
    "transferHistory": [
      {
        "transferKey": "profile-history:2018-10-01:source-player-11893:source-team-5639:source-team-9565:joined",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "playerImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp",
        "fromTeamId": "cs2-team-5639",
        "fromTeamName": "aAa",
        "fromTeamLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/686cbe0c559e95cae6a091ffc4a7f524.svg",
        "fromTeamAlternateLogoUrl": null,
        "fromTeamDarkUiLogoUrl": null,
        "fromTeamIsNoTeam": false,
        "toTeamId": "cs2-team-9565",
        "toTeamName": "Vitality",
        "toTeamLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp",
        "toTeamAlternateLogoUrl": null,
        "toTeamDarkUiLogoUrl": null,
        "toTeamIsNoTeam": false,
        "status": "joined",
        "role": null,
        "transferDate": "2018-10-01T12:00:00.000Z",
        "joinDate": "2018-10-01T12:00:00.000Z",
        "leaveDate": null,
        "detectedAt": "2026-07-10T00:53:55.880Z",
        "playerImageIsPlaceholder": false,
        "fromTeamLogoIsPlaceholder": false,
        "…": "1 more fields"
      },
      {
        "transferKey": "profile-history:2017-09-01:source-player-11893:source-team-7649:source-team-5639:joined",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "playerImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp",
        "fromTeamId": "cs2-team-7649",
        "fromTeamName": "WySix",
        "fromTeamLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/9a3798b5b0651fe2e6df965cb7b1279c.webp",
        "fromTeamAlternateLogoUrl": null,
        "fromTeamDarkUiLogoUrl": null,
        "fromTeamIsNoTeam": false,
        "toTeamId": "cs2-team-5639",
        "toTeamName": "aAa",
        "toTeamLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/686cbe0c559e95cae6a091ffc4a7f524.svg",
        "toTeamAlternateLogoUrl": null,
        "toTeamDarkUiLogoUrl": null,
        "toTeamIsNoTeam": false,
        "status": "joined",
        "role": null,
        "transferDate": "2017-09-01T12:00:00.000Z",
        "joinDate": "2017-09-01T12:00:00.000Z",
        "leaveDate": null,
        "detectedAt": "2026-07-10T00:53:55.731Z",
        "playerImageIsPlaceholder": false,
        "fromTeamLogoIsPlaceholder": false,
        "…": "1 more fields"
      }
    ],
    "rosterChanges": [
      {
        "changeId": "aa7153d5-3696-4ef8-b651-c72472888bd1",
        "changeType": "join",
        "teamId": "cs2-team-9565",
        "fromTeamId": null,
        "toTeamId": "cs2-team-9565",
        "teamName": "Vitality",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "roleBefore": null,
        "roleAfter": null,
        "effectiveAt": "2018-10-01T12:00:00.000Z",
        "detectedAt": "2018-10-01T12:00:00.000Z",
        "confidence": "medium"
      },
      {
        "changeId": "62fcb4e5-94b9-4d76-8396-a11b804d88e6",
        "changeType": "leave",
        "teamId": "cs2-team-5639"
…

Player stats

GET/api/v1/cs2/players/{playerIdOrSlug}/stats

A player's aggregate stats (`totals`: rating, ADR, KAST, K/D and more, over the whole career, see `totalsScope`) plus one page of map lines (`rows`, newest first: `startsAt` desc, `mapNumber` desc). Page with `page` or `offset` + `limit` (default and max 100); `meta` has `total`, `totalPages`, `hasNext`, `hasPrev`, `rowsScope` describes the page and `pageTotals` sums its rows. `totals.headshotPercent` is total headshots / kills (the old mean of per-map shares is `headshotPercentMapAverage`); `totals.matches`, `openingKills` / `openingDeaths` (90% rule) and the `*Recorded` sums are included. Totals come from one rollup shared by `/stats`, `/career`, `/seasons`, `/periods` and `/cs2/stats/players`, refreshed every 15 minutes, so they agree. Fields not every match records (assists, opening kills / deaths) are given only when at least 90% of the player's maps record them, else null; the sum over the maps that do is always in `assistsRecorded`, `openingKillsRecorded`, `openingDeathsRecorded`, with `assistsCoverage` / `openingDuelCoverage`. `headshotPercent` is total headshots / kills on the maps that record headshots (0-1, 4 decimals).

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
limitintegerMap lines per page (default 100, max 100). Maximum 100; larger values are reduced to 100.
offsetintegerMap lines to skip.
pageintegerPage of map lines, starting at 1.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_stats",
    "playerId": "cs2-player-11893",
    "maps": 654,
    "totals": {
      "kills": 12331,
      "deaths": 8477,
      "assists": 3130,
      "headshots": 5265,
      "headshotsCoverage": 0.998,
      "assistsCoverage": 0.939,
      "headshotPercent": 0.4272,
      "matches": 282,
      "assistsRecorded": 3130,
      "headshotsRecorded": 5265,
      "headshotPercentMapAverage": 0.4317,
      "openingKills": 2019,
      "openingDeaths": 1172,
      "openingKillsRecorded": 2019,
      "openingDeathsRecorded": 1172,
      "openingDuelCoverage": 0.998
    },
    "totalsScope": {
      "window": "career",
      "description": "Every canonical map line of this player: all teams, all time. The same totals as /career and /stats/players.",
      "maps": 654,
      "matches": 282,
      "firstMapAt": "2018-11-18T23:10:00.000Z",
      "lastMapAt": "2026-11-11T04:15:00.000Z",
      "asOf": "2026-11-11T12:52:00.600Z"
    },
    "rowsScope": {
      "window": "page",
      "description": "One page of the lines the totals sum, newest first. Walk page=1..n (or offset) to reach every line; the pages add up …",
      "order": "newest_first",
      "sort": [
        "starts_at desc",
        "map_number desc"
      ],
      "offset": 0,
      "limit": 2,
      "returned": 2,
      "total": 654,
      "hasMore": true
    },
    "pageTotals": {
      "maps": 2,
      "kills": 36,
      "deaths": 27,
      "assists": 8,
      "headshots": 13
    },
    "clutches": {
      "dataAvailable": true,
      "attempts": 245,
      "wins": 48,
      "winPercent": 19.6,
      "byType": {
        "1v1": {
          "attempts": 34,
          "wins": 25,
          "winPercent": 73.5
        },
        "1v2": {
          "attempts": 48,
          "wins": 14,
          "winPercent": 29.2
        },
        "1v3": {
          "attempts": 65,
          "wins": 7,
          "winPercent": 10.8
        },
        "1v4": {
          "attempts": 57,
          "wins": 2,
          "winPercent": 3.5
        },
        "1v5": {
          "attempts": 41,
          "wins": 0,
          "winPercent": 0
        }
      }
    },
    "flashAssists": {
      "flashAssists": 110
    },
    "rows": [
      {
        "id": "cs2-match-2399852-map-2-cs2-player-11893",
        "mapId": "cs2-match-2399852-map-2",
        "matchId": "cs2-match-2399852",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "kills": 20,
        "deaths": 10,
        "assists": 6,
        "plusMinus": 10,
        "adr": 89.7,
        "kast": 0.783,
        "rating": 1.37,
        "ratingVersion": "cito_rating_1",
        "headshots": 6,
        "headshotPercent": 0.3,
        "firstKills": 5,
        "firstDeaths": 0,
        "lastSyncedAt": "2026-11-11T12:00:26.616Z",
        "startsAt": "2026-11-11T04:15:00.000Z",
        "mapNumber": 2,
        "mapName": "Dust2"
      },
      {
        "id": "cs2-match-2399852-map-1-cs2-player-11893",
        "mapId": "cs2-match-2399852-map-1",
        "matchId": "cs2-match-2399852",
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "kills": 16,
        "deaths": 17,
        "assists": 2,
        "plusMinus": -1,
        "adr": 61.7,
        "kast": 0.739,
        "rating": 0.9,
        "ratingVersion": "cito_rating_1",
   
…

Player clutches

GET/api/v1/cs2/players/{playerIdOrSlug}/clutches

A player's clutch situations (1vX). Currently being recomputed: returns `data_available: false` with `unavailable_reason: being_recomputed`.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
limitintegerRows to return. Maximum 200; larger values are reduced to 200.
player_idstringPlayer id or slug.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_clutches",
    "playerId": "cs2-player-11893",
    "playerNickname": "ZywOo",
    "dataAvailable": true,
    "attempts": 245,
    "wins": 48,
    "winPercent": 19.6,
    "byType": {
      "1v1": {
        "attempts": 34,
        "wins": 25,
        "winPercent": 73.5
      },
      "1v2": {
        "attempts": 48,
        "wins": 14,
        "winPercent": 29.2
      },
      "1v3": {
        "attempts": 65,
        "wins": 7,
        "winPercent": 10.8
      },
      "1v4": {
        "attempts": 57,
        "wins": 2,
        "winPercent": 3.5
      },
      "1v5": {
        "attempts": 41,
        "wins": 0,
        "winPercent": 0
      }
    },
    "recent": [
      {
        "matchId": "cs2-match-2399852",
        "mapId": "cs2-match-2399852-map-1",
        "mapName": "Anubis",
        "eventName": "BLAST Rivals 2026 Season 2",
        "date": "2026-11-11T04:15:00.000Z",
        "round": 17,
        "type": "1v4",
        "side": "T",
        "won": false
      },
      {
        "matchId": "cs2-match-2399852",
        "mapId": "cs2-match-2399852-map-2",
        "mapName": "Dust2",
        "eventName": "BLAST Rivals 2026 Season 2",
        "date": "2026-11-11T04:15:00.000Z",
        "round": 9,
        "type": "1v3",
        "side": "T",
        "won": false
      }
    ]
  },
  "meta": {
    "count": 2,
    "dataAvailable": true,
    "limit": 2,
    "total": 2,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Player flash assists

GET/api/v1/cs2/players/{playerIdOrSlug}/flash-assists

Kills a player set up with flashbangs.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/players/donk/flash-assists" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_flash_assists",
    "playerId": "cs2-player-11893",
    "playerNickname": "ZywOo",
    "dataAvailable": true,
    "flashAssists": [
      {
        "playerId": "cs2-player-11893",
        "playerName": "ZywOo",
        "teamId": "cs2-team-9565",
        "teamName": "Vitality",
        "flashAssists": 110,
        "maps": 70,
        "flashAssistsPerMap": 1.5714
      }
    ]
  },
  "meta": {
    "count": 1,
    "dataAvailable": true,
    "limit": 1,
    "total": 1,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Player matches

GET/api/v1/cs2/players/{playerIdOrSlug}/matches

A player's stat lines, one row per map played, newest first. A row's `id` is the stat-line id `<mapId>-<playerId>`; use `matchId` and `mapId` for the match and map.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
bestOfstringOnly matches of this series length: 1, 3 or 5, or a comma list (3,5). bestOf=3 returns BO3 matches only; paging and totals count the filtered rows. Any other value is 400 INVALID_BEST_OF.
limitintegerRows to return. Maximum 100; larger values are reduced to 100.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "entityType": "cs2_player_stat",
      "id": "cs2-match-2399852-map-2-cs2-player-11893",
      "mapId": "cs2-match-2399852-map-2",
      "matchId": "cs2-match-2399852",
      "playerId": "cs2-player-11893",
      "playerName": "ZywOo",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "kills": 20,
      "deaths": 10,
      "assists": 6,
      "plusMinus": 10,
      "adr": 89.7,
      "kast": 0.783,
      "rating": 1.37,
      "ratingVersion": "cito_rating_1",
      "headshots": 6,
      "headshotPercent": 0.3,
      "firstKills": 5,
      "firstDeaths": 0,
      "lastSyncedAt": "2026-11-11T12:00:26.616Z",
      "map": {
        "id": "cs2-match-2399852-map-2",
        "matchId": "cs2-match-2399852",
        "mapNumber": 2,
        "mapName": "Dust2",
        "status": "completed",
        "team1Score": 13,
        "team2Score": 10,
        "team1Halves": [
          5,
          8
        ],
        "team2Halves": [
          7,
          3
        ],
        "winnerTeamId": "cs2-team-9565",
        "durationRounds": 23,
        "lastSyncedAt": "2026-11-11T12:30:27.016Z",
        "match": {
          "id": "cs2-match-2399852",
          "eventId": "cs2-event-8251",
          "eventName": "BLAST Rivals 2026 Season 2",
          "eventSlug": "blast-rivals-2026-season-2",
          "stageName": null,
          "startsAt": "2026-11-11T04:15:00.000Z",
          "endsAt": "2026-11-11T06:18:51.447Z",
          "bestOf": 3,
          "status": "completed",
          "team1Id": "cs2-team-9565",
          "team2Id": "cs2-team-11283",
          "team1Name": "Vitality",
          "team2Name": "Falcons",
          "team1Score": 2,
          "team2Score": 0,
          "winnerTeamId": "cs2-team-9565",
          "vetoOrder": [
            {
              "…": "…"
            },
            {
              "…": "…"
            }
          ],
          "streamLinks": [],
          "vodLinks": [],
          "lastSyncedAt": "2026-11-11T12:46:10.483Z",
          "lastVerified": "2026-11-11T12:46:10.483Z",
          "confidence": "high",
          "resultType": "played",
          "resultStatus": "completed",
          "…": "6 more fields"
        },
        "mapNameCanonical": "Dust2",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "resultType": "played",
        "resultStatus": "completed",
        "isForfeit": false,
        "forfeitStage": null,
        "roundsPlayed": null,
        "statsEligible": true,
        "unavailableReason": null,
        "…": "1 more fields"
      },
      "availableSubresources": [],
      "unavailableSubresources": [],
      "…": "5 more fields"
    },
    {
      "entityType": "cs2_player_stat",
      "id": "cs2-match-2399852-map-1-cs2-player-11893",
      "mapId": "cs2-match-2399852-map-1",
      "matchId": "cs2-match-2399852",
      "playerId": "cs2-player-11893",
      "playerName": "ZywOo",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "kills": 16,
      "deaths": 17,
      "assists": 2,
      "plusMinus": -1,
      "adr": 61.7,
      "kast": 0.739,
      "rating": 0.9,
      "ratingVersion": "cito_rating_1",
      "headshots": 7,
      "headshotPercent": 0.4375,
      "firstKills": 3,
      "firstDeaths": 3,

…

Player maps

GET/api/v1/cs2/players/{playerIdOrSlug}/maps

A player's stat lines per map, newest first (`startsAt` desc, `mapNumber` desc), his own lines only. Each row has `inPool` (in the current Active Duty pool), `poolStatus` (`in_pool`, `removed`, `never_in_pool`) and `inPoolWhenPlayed`; `aggregate=true` rows (one per map name) have `inPool`, `poolStatus` and `removedAt`.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
aggregatestringFilter by aggregate.
daysintegerLook-back window in days.
limitintegerRows to return. Maximum 100; larger values are reduced to 100.
summarybooleantrue returns a summary instead of full rows.
windowDaysintegerLook-back window in days.
window_daysintegerLook-back window in days.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "entityType": "cs2_player_stat",
      "id": "cs2-match-2399852-map-2-cs2-player-11893",
      "mapId": "cs2-match-2399852-map-2",
      "matchId": "cs2-match-2399852",
      "playerId": "cs2-player-11893",
      "playerName": "ZywOo",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "kills": 20,
      "deaths": 10,
      "assists": 6,
      "plusMinus": 10,
      "adr": 89.7,
      "kast": 0.783,
      "rating": 1.37,
      "ratingVersion": "cito_rating_1",
      "headshots": 6,
      "headshotPercent": 0.3,
      "firstKills": 5,
      "firstDeaths": 0,
      "lastSyncedAt": "2026-11-11T12:00:26.616Z",
      "map": {
        "id": "cs2-match-2399852-map-2",
        "matchId": "cs2-match-2399852",
        "mapNumber": 2,
        "mapName": "Dust2",
        "status": "completed",
        "team1Score": 13,
        "team2Score": 10,
        "team1Halves": [
          5,
          8
        ],
        "team2Halves": [
          7,
          3
        ],
        "winnerTeamId": "cs2-team-9565",
        "durationRounds": 23,
        "lastSyncedAt": "2026-11-11T12:30:27.016Z",
        "match": {
          "id": "cs2-match-2399852",
          "status": "completed",
          "startsAt": "2026-11-11T04:15:00.000Z",
          "team1Id": "cs2-team-9565",
          "team2Id": "cs2-team-11283",
          "team1Name": "Vitality",
          "team2Name": "Falcons",
          "team1Score": 2,
          "team2Score": 0,
          "winnerTeamId": "cs2-team-9565",
          "resultType": "played",
          "resultStatus": "completed",
          "isForfeit": false,
          "forfeitedMaps": 0,
          "statsEligible": true,
          "unavailableReason": null,
          "dataAvailability": {
            "playerStats": {
              "…": "…"
            }
          }
        },
        "mapNameCanonical": "Dust2",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "resultType": "played",
        "resultStatus": "completed",
        "isForfeit": false,
        "forfeitStage": null,
        "roundsPlayed": null,
        "statsEligible": true,
        "unavailableReason": null,
        "…": "1 more fields"
      },
      "inPool": true,
      "inPoolWhenPlayed": true,
      "…": "8 more fields"
    },
    {
      "entityType": "cs2_player_stat",
      "id": "cs2-match-2399852-map-1-cs2-player-11893",
      "mapId": "cs2-match-2399852-map-1",
      "matchId": "cs2-match-2399852",
      "playerId": "cs2-player-11893",
      "playerName": "ZywOo",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "kills": 16,
      "deaths": 17,
      "assists": 2,
      "plusMinus": -1,
      "adr": 61.7,
      "kast": 0.739,
      "rating": 0.9,
      "ratingVersion": "cito_rating_1",
      "headshots": 7,
      "headshotPercent": 0.4375,
      "firstKills": 3,
      "firstDeaths": 3,
      "lastSyncedAt": "2026-11-11T12:00:25.790Z",
      "map": {
        "id": "cs2-match-2399852-map-1",
        "matchId": "cs2-match-2399852",
        "mapNumber": 1,
        "mapName": "Anubis",
        "status": "completed",
        "team1Score": 13,
        "team2Score": 10,
        "team1Halves": [
          7,
          6
        ],
        "team2Halves": [
          5,
         
…

Player teams

GET/api/v1/cs2/players/{playerIdOrSlug}/teams
GET/api/v1/cs2/players/{playerIdOrSlug}/teams/history

Teams a player has played for, with dates. Roster entries have `tenureType: "roster"`; runs of maps played for a team that no roster entry covers are added as `tenureType: "match_participation"` (id `match-participation:<teamId>:<n>`, `fromAt` / `toAt` = first / last map, `matchesPlayed`, `mapsPlayed`, `isActive: false`). These routes are equivalent; use whichever reads best.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "8f40140c-772e-4d4e-8510-1c8360c754ba",
      "teamId": "cs2-team-9565",
      "playerId": "cs2-player-11893",
      "role": "AWPer",
      "fromAt": "2018-10-01T12:00:00.000Z",
      "toAt": null,
      "isActive": true,
      "lastSyncedAt": "2026-11-11T12:51:13.764Z",
      "team": {
        "id": "cs2-team-9565",
        "name": "Vitality",
        "slug": "vitality",
        "teamTag": "VITALITY",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp",
        "countryName": "Europe",
        "countryCode": null,
        "region": "Europe",
        "worldRanking": 3,
        "lastSyncedAt": "2026-11-11T12:51:12.392Z",
        "lastVerified": "2026-11-11T12:51:12.392Z",
        "confidence": "high",
        "worldRankingStatus": "ranked",
        "vrsRanking": 2,
        "vrsRankingStatus": "ranked",
        "vrsRegion": "Europe",
        "alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp",
        "darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp",
        "logoIsPlaceholder": false
      },
      "tenureType": "roster"
    },
    {
      "id": "match-participation:cs2-team-4608:1",
      "teamId": "cs2-team-4608",
      "playerId": "cs2-player-11893",
      "role": null,
      "fromAt": "2023-07-08T17:20:00.000Z",
      "toAt": "2023-07-08T17:20:00.000Z",
      "isActive": false,
      "lastSyncedAt": "2026-11-11T12:52:00.600Z",
      "team": {
        "id": "cs2-team-4608",
        "name": "Natus Vincere",
        "slug": "natus-vincere",
        "teamTag": "NV",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/33aea6490b84e8284318ac8d52d9b8f3.svg",
        "countryName": "Europe",
        "countryCode": null,
        "region": "Europe",
        "worldRanking": 8,
        "lastSyncedAt": "2026-11-11T12:51:34.895Z",
        "lastVerified": "2026-11-11T12:51:34.895Z",
        "confidence": "high",
        "worldRankingStatus": "ranked",
        "vrsRanking": 7,
        "vrsRankingStatus": "ranked",
        "vrsRegion": "Europe",
        "logoIsPlaceholder": false
      },
      "tenureType": "match_participation",
      "matchesPlayed": 1,
      "mapsPlayed": 1,
      "firstMapAt": "2023-07-08T17:20:00.000Z",
      "lastMapAt": "2023-07-08T17:20:00.000Z"
    }
  ],
  "meta": {
    "count": 6,
    "dataAvailable": true,
    "unavailableReason": null,
    "limit": 6,
    "total": 6,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Player form

GET/api/v1/cs2/players/{playerIdOrSlug}/form

A player's most recent maps with kills, deaths, ADR, KAST and rating.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "entityType": "cs2_player_stat",
      "id": "cs2-match-2399852-map-2-cs2-player-11893",
      "mapId": "cs2-match-2399852-map-2",
      "matchId": "cs2-match-2399852",
      "playerId": "cs2-player-11893",
      "playerName": "ZywOo",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "kills": 20,
      "deaths": 10,
      "assists": 6,
      "plusMinus": 10,
      "adr": 89.7,
      "kast": 0.783,
      "rating": 1.37,
      "ratingVersion": "cito_rating_1",
      "headshots": 6,
      "headshotPercent": 0.3,
      "firstKills": 5,
      "firstDeaths": 0,
      "lastSyncedAt": "2026-11-11T12:00:26.616Z",
      "map": {
        "id": "cs2-match-2399852-map-2",
        "matchId": "cs2-match-2399852",
        "mapNumber": 2,
        "mapName": "Dust2",
        "status": "completed",
        "team1Score": 13,
        "team2Score": 10,
        "team1Halves": [
          5,
          8
        ],
        "team2Halves": [
          7,
          3
        ],
        "winnerTeamId": "cs2-team-9565",
        "durationRounds": 23,
        "lastSyncedAt": "2026-11-11T12:30:27.016Z",
        "match": {
          "id": "cs2-match-2399852",
          "eventId": "cs2-event-8251",
          "eventName": "BLAST Rivals 2026 Season 2",
          "eventSlug": "blast-rivals-2026-season-2",
          "stageName": null,
          "startsAt": "2026-11-11T04:15:00.000Z",
          "endsAt": "2026-11-11T06:18:51.447Z",
          "bestOf": 3,
          "status": "completed",
          "team1Id": "cs2-team-9565",
          "team2Id": "cs2-team-11283",
          "team1Name": "Vitality",
          "team2Name": "Falcons",
          "team1Score": 2,
          "team2Score": 0,
          "winnerTeamId": "cs2-team-9565",
          "vetoOrder": [
            {
              "…": "…"
            },
            {
              "…": "…"
            }
          ],
          "streamLinks": [],
          "vodLinks": [],
          "lastSyncedAt": "2026-11-11T12:46:10.483Z",
          "lastVerified": "2026-11-11T12:46:10.483Z",
          "confidence": "high",
          "resultType": "played",
          "resultStatus": "completed",
          "…": "6 more fields"
        },
        "mapNameCanonical": "Dust2",
        "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png",
        "resultType": "played",
        "resultStatus": "completed",
        "isForfeit": false,
        "forfeitStage": null,
        "roundsPlayed": null,
        "statsEligible": true,
        "unavailableReason": null,
        "…": "1 more fields"
      },
      "availableSubresources": [],
      "unavailableSubresources": [],
      "…": "5 more fields"
    },
    {
      "entityType": "cs2_player_stat",
      "id": "cs2-match-2399852-map-1-cs2-player-11893",
      "mapId": "cs2-match-2399852-map-1",
      "matchId": "cs2-match-2399852",
      "playerId": "cs2-player-11893",
      "playerName": "ZywOo",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "kills": 16,
      "deaths": 17,
      "assists": 2,
      "plusMinus": -1,
      "adr": 61.7,
      "kast": 0.739,
      "rating": 0.9,
      "ratingVersion": "cito_rating_1",
      "headshots": 7,
      "headshotPercent": 0.4375,
      "firstKills": 3,
      "firstDeaths": 3,

…

Player weapons

GET/api/v1/cs2/players/{playerIdOrSlug}/weapons

A player's kills by weapon. `weapons[].headshotShare` is the headshot share on the 0-1 scale (4 decimals), the scale every other CS2 headshot field uses; use it in new code. `weapons[].headshotPercent` on this endpoint is the same share on a 0-100 scale (one decimal), kept for existing clients.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).
limitintegerRows to return. Maximum 200; larger values are reduced to 200.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player_weapon_stats",
    "playerId": "cs2-player-11893",
    "playerName": "ZywOo",
    "dataAvailable": true,
    "dataScope": "player_attributed_kill_events",
    "weapons": [
      {
        "weapon": "AWP",
        "kills": 693,
        "headshots": 79,
        "headshotPercent": 11.4,
        "headshotShare": 0.114,
        "maps": 106,
        "matches": 48,
        "lastSyncedAt": "2026-11-11T06:32:09.147Z"
      },
      {
        "weapon": "AK-47",
        "kills": 468,
        "headshots": 296,
        "headshotPercent": 63.2,
        "headshotShare": 0.6325,
        "maps": 95,
        "matches": 48,
        "lastSyncedAt": "2026-11-11T06:32:09.147Z"
      }
    ]
  },
  "meta": {
    "count": 2,
    "dataAvailable": true,
    "dataScope": "player_attributed_kill_events",
    "limit": 2,
    "total": 2,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Player details

GET/api/v1/cs2/players/{playerIdOrSlug}

One player: nickname, real name, photo, country, team, role and headline stats. Player photos: `imageUrl` on a player (`playerImageUrl` on roster and transfer rows) is always an image URL. A player with no photo gets a neutral silhouette placeholder (400x417 transparent WebP, the same size as the photos) and `imageIsPlaceholder: true` (`playerImageIsPlaceholder` on roster and transfer rows); a real photo has `false`. Check the flag, not the URL.

Query parameters

ParameterTypeDescription
playerIdOrSlug (path)*stringPlayer id (cs2-player-11893) or slug (zywoo).

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_player",
    "id": "cs2-player-11893",
    "nickname": "ZywOo",
    "slug": "zywoo",
    "realName": "Mathieu Herbaut",
    "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp",
    "countryName": "France",
    "countryCode": "FR",
    "age": 25,
    "rating": 1.24,
    "mapsPlayed": 654,
    "careerStats": {
      "rating": 1.24,
      "lastKnownRating": 1.24
    },
    "currentTeamId": "cs2-team-9565",
    "status": "active",
    "primaryRole": "AWPer",
    "roleConfidence": "high",
    "statusUpdatedAt": "2026-11-11T12:51:13.764Z",
    "lastSyncedAt": "2026-11-11T12:51:12.962Z",
    "lastVerified": "2026-11-11T12:51:12.962Z",
    "roster": [
      {
        "id": "cs2-player-8f40140c-772e-4d4e-8510-1c8360c754ba",
        "teamId": "cs2-team-9565",
        "playerId": "cs2-player-11893",
        "role": "AWPer",
        "fromAt": "2018-10-01T12:00:00.000Z",
        "toAt": null,
        "isActive": true,
        "lastSyncedAt": "2026-11-11T12:51:13.764Z",
        "team": {
          "id": "cs2-team-9565",
          "name": "Vitality",
          "slug": "vitality",
          "teamTag": "VITALITY",
          "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp",
          "countryName": "Europe",
          "countryCode": null,
          "region": "Europe",
          "worldRanking": 3,
          "lastSyncedAt": "2026-11-11T12:51:12.392Z",
          "lastVerified": "2026-11-11T12:51:12.392Z",
          "confidence": "high",
          "worldRankingStatus": "ranked",
          "vrsRanking": 2,
          "vrsRankingStatus": "ranked",
          "vrsRegion": "Europe",
          "alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp",
          "darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp",
          "logoIsPlaceholder": false
        }
      },
      {
        "id": "cs2-player-c89f70dc-3630-4fa3-8143-8967904b6b93",
        "teamId": "cs2-team-5639",
        "playerId": "cs2-player-11893",
        "role": null,
        "fromAt": "2017-09-01T12:00:00.000Z",
        "toAt": "2018-09-30T12:00:00.000Z",
        "isActive": false,
        "lastSyncedAt": "2026-07-10T01:37:18.872Z",
        "team": {
          "id": "cs2-team-5639",
          "name": "aAa",
          "slug": "aaa",
          "teamTag": "AAA",
          "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/686cbe0c559e95cae6a091ffc4a7f524.svg",
          "countryName": "France",
          "countryCode": "FR",
          "region": "Europe",
          "worldRanking": null,
          "lastSyncedAt": "2026-11-11T12:55:50.381Z",
          "lastVerified": "2026-11-11T12:55:50.381Z",
          "confidence": "high",
          "worldRankingStatus": "not_ranked",
          "vrsRanking": 339,
          "vrsRankingStatus": "ranked",
          "vrsRegion": "Europe",
          "logoIsPlaceholder": false
        }
      }
    ],
    "currentTeam": {
      "id": "cs2-team-9565",
      "name": "Vitality",
      "slug": "vitality",
      "teamTag": "VITALITY",
      "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp",
      "countryName": "Europe",
      "countryCode": null,
      "region": "Europe",
      "worldRanking": 3,
      "lastSyncedAt": "2026-11
…

List players

GET/api/v1/cs2/players

Players with photo, country, team and rating. **Many players in one call:** `?ids=a,b,c` (comma-separated, or repeat `ids=`; up to 50 ids or slugs, anything the single-player endpoint accepts). Items have the list row shape, in request order; an entity named twice is returned once; inputs that name nothing are listed in `meta.notFound`. `meta.batch` = {requested, returned, notFound, billedRequests, idsPerBilledRequest: 10, maxIds: 50, itemShape, fullShape}. **Billing:** a batch costs one call per started block of 10 ids (1-10 ids = 1 call, 11-20 = 2, 50 = 5), on both the per-minute limit and the month; with fewer calls left this month than the batch needs, the first (calls left x 10) ids are served and the rest are listed in `meta.batch.notFetched` (`notFetchedReason: MONTHLY_LIMIT_REACHED`). More than 50 ids is a 400. `?expand=full` (or any `include=`) returns each item as the single-entity response (sections under `included`), the batch shape served before 2026-11-02; API keys that used batches before then keep that shape by default. Player photos: `imageUrl` on a player (`playerImageUrl` on roster and transfer rows) is always an image URL. A player with no photo gets a neutral silhouette placeholder (400x417 transparent WebP, the same size as the photos) and `imageIsPlaceholder: true` (`playerImageIsPlaceholder` on roster and transfer rows); a real photo has `false`. Check the flag, not the URL.

Query parameters

ParameterTypeDescription
activebooleanFilter by active.
allstringFilter by all.
archivebooleanFilter by archive.
competitivebooleanFilter by competitive.
expandstringfull with ids: each item is the full single-player response.
fieldsstringComma-separated list of fields to return.
filterstringFilter by filter.
hasImagestringFilter by hasImage.
has_imagestringFilter by has_image.
idsstringBatch read: up to 50 comma-separated player ids or slugs. Billed one call per started 10 ids.
includeUnverifiedstringFilter by includeUnverified.
include_unverifiedstringFilter by include_unverified.
letterstringFilter by letter.
limitintegerRows to return. Maximum 200; larger values are reduced to 200.
offsetintegerRows to skip, for paging.
orderBystringFilter by orderBy.
pageintegerPage number, starting at 1.
qstringSearch text.
searchstringSearch text.
sortstringSort order.
summarybooleantrue returns a summary instead of full rows.
teamIdstringTeam id or slug.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "entityType": "cs2_player",
      "id": "cs2-player-25719",
      "nickname": "-hubi-",
      "slug": "hubi",
      "realName": "Hubert Szumiński",
      "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/2080d701279e7a4489bf4c3b555ac1c6.webp",
      "countryName": "Poland",
      "countryCode": "PL",
      "age": 28,
      "rating": 0.81,
      "mapsPlayed": null,
      "careerStats": {
        "rating": 0.81,
        "window": "past_3_months",
        "opening": null,
        "sniping": null,
        "trading": null,
        "utility": null,
        "entrying": null,
        "clutching": null,
        "firepower": null,
        "mapsPlayed": null,
        "prizeMoney": null,
        "lastKnownRating": 0.81,
        "lastActiveTournament": "Betclic Clash Mistrzostwa Polski 2025"
      },
      "currentTeamId": null,
      "status": null,
      "primaryRole": "rifler",
      "roleConfidence": "low",
      "statusUpdatedAt": "2026-10-16T05:02:27.350Z",
      "lastSyncedAt": "2026-10-16T05:02:27.350Z",
      "lastVerified": "2026-10-16T05:02:27.350Z",
      "prizeMoney": null,
      "availableSubresources": [
        "stats",
        "matches"
      ],
      "unavailableSubresources": [
        "weapons"
      ],
      "unavailableFields": {
        "mapsPlayed": {
          "reason": "profile_field_unavailable"
        },
        "currentTeamId": {
          "reason": "profile_field_unavailable"
        }
      },
      "dataQuality": "complete",
      "…": "3 more fields"
    },
    {
      "entityType": "cs2_player",
      "id": "cs2-player-21145",
      "nickname": "0K1N",
      "slug": null,
      "realName": null,
      "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/15373dbc8529502106544c93d3139448.webp",
      "countryName": "China",
      "countryCode": null,
      "age": 30,
      "rating": 0.89,
      "mapsPlayed": null,
      "careerStats": {
        "rating": 0.89,
        "lastKnownRating": 0.89,
        "lastActiveTournament": "CCT Season 2 North America Series 1"
      },
      "currentTeamId": null,
      "status": null,
      "primaryRole": null,
      "roleConfidence": null,
      "statusUpdatedAt": null,
      "lastSyncedAt": "2026-10-31T09:01:52.144Z",
      "lastVerified": "2026-10-31T09:01:52.144Z",
      "prizeMoney": null,
      "availableSubresources": [
        "stats",
        "matches"
      ],
      "unavailableSubresources": [
        "weapons"
      ],
      "unavailableFields": {
        "imageUrl": null,
        "countryCode": {
          "reason": "profile_field_unavailable"
        },
        "mapsPlayed": {
          "reason": "profile_field_unavailable"
        },
        "currentTeamId": {
          "reason": "profile_field_unavailable"
        }
      },
      "dataQuality": "complete",
      "…": "3 more fields"
    }
  ],
  "meta": {
    "page": 1,
    "limit": 2,
    "total": 7699,
    "count": 2,
    "sort": "nickname",
    "dataAvailable": true,
    "unavailableReason": null,
    "totalPages": 3850,
    "hasNext": true,
    "hasPrev": false
  }
}

Try the CS2 Player Stats 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/players/donk/stats" \
  -H "x-api-key: YOUR_API_KEY"
Was this page helpful?