Docs/CS2 API/CS2 Search and Reference API

CS2 Search and Reference API

Search across teams, players, events and matches, the reference catalogs, webhook event types and freshness endpoints.

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

CS2 API overview

GET/api/v1/cs2

Coverage counts (matches, teams, players, events, demos) and links to the main endpoints.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_api_overview",
    "name": "Counter-Strike 2 API",
    "status": "available",
    "coverage": {
      "matches": 14398,
      "live": 1,
      "upcoming": 120,
      "teams": 4470,
      "players": 8545,
      "events": 1502,
      "rosterChanges": 149615,
      "demos": 26893,
      "playerPeriodStats": 47466,
      "teamPeriodStats": 1677
    },
    "endpoints": {
      "live": "/api/v1/cs2/live",
      "liveState": "/api/v1/cs2/live/{matchId}/state",
      "liveScoreboard": "/api/v1/cs2/live/{matchId}/scoreboard",
      "liveEvents": "/api/v1/cs2/live/{matchId}/events",
      "matches": "/api/v1/cs2/matches",
      "matchPlayerStats": "/api/v1/cs2/matches/{matchId}/player-stats",
      "matchMaps": "/api/v1/cs2/matches/{matchId}/maps",
      "matchDemos": "/api/v1/cs2/matches/{matchId}/demos",
      "gameStats": "/api/v1/cs2/games/{gameId}/stats",
      "gameRounds": "/api/v1/cs2/games/{gameId}/rounds",
      "gameEvents": "/api/v1/cs2/games/{gameId}/events",
      "teams": "/api/v1/cs2/teams",
      "teamRosterHistory": "/api/v1/cs2/teams/{teamId}/roster-history",
      "teamTrends": "/api/v1/cs2/teams/{teamId}/trends",
      "players": "/api/v1/cs2/players",
      "playerCareer": "/api/v1/cs2/players/{playerId}/career",
      "playerSeasons": "/api/v1/cs2/players/{playerId}/seasons",
      "playerTransfers": "/api/v1/cs2/players/{playerId}/transfers",
      "events": "/api/v1/cs2/events",
      "activeEvents": "/api/v1/cs2/events/active",
      "eventCalendar": "/api/v1/cs2/events/calendar",
      "eventParticipants": "/api/v1/cs2/events/{eventId}/participants",
      "rosterChanges": "/api/v1/cs2/roster-changes/recent",
      "rankings": "/api/v1/cs2/rankings/teams",
      "…": "1 more fields"
    }
  },
  "meta": {}
}

CS2 data freshness

GET/api/v1/cs2/status/sync

Whether CS2 data is current: `current_status`, `freshness` (`fresh` or `stale`) and the time of the last successful update.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entity_type": "cs2_sync_health",
    "current_status": "healthy",
    "freshness": "fresh",
    "last_successful_sync_at": "2026-09-23T01:21:07.356Z",
    "checked_at": "2026-09-23T01:21:30.000Z"
  },
  "meta": {}
}

CS2 data changelog

GET/api/v1/cs2/changelog

Recent changes to stored CS2 records (field, old value, new value, time). Values longer than 500 characters are truncated; pass `entity_id` with `full=true` for complete values.

Query parameters

ParameterTypeDescription
actionstringFilter by action.
entity_idstringOnly changes to this record.
entity_typestringOnly changes to this kind of record.
fullbooleantrue returns complete values instead of truncated ones.
limitintegerRows to return. Maximum 200; larger values are reduced to 200.
offsetintegerRows to skip, for paging.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "cmudj3yqa00pi10aqe361juo3",
      "entityType": "cs2_match",
      "entityId": "cs2-match-2398521",
      "fieldPath": "liveState",
      "oldValue": "{\"teams\":{\"team1Name\":\"Club 333\",\"team2Name\":\"DETONATE\",\"ctTeamName\":\"CT\",\"terroristTeamName\":\"Terrorist\"},\"sourceId\"…",
      "newValue": {
        "status": "upcoming",
        "team1Score": null,
        "team2Score": null,
        "winnerTeamId": null
      },
      "action": "merge_rejected",
      "createdAt": "2026-09-23T03:13:58.161Z"
    },
    {
      "id": "cmudj23cl00ph10aq427s8v0b",
      "entityType": "cs2_map_player_stat",
      "entityId": "cs2-match-2398520-map-2:twigs",
      "fieldPath": "rating,headshotPercent",
      "oldValue": "{\"id\":\"live-source-match-2398520-map-2-twigs\",\"adr\":52.5,\"raw\":{\"hp\":55,\"adr\":52.5,\"raw\":{\"hp\":55,\"dbId\":23376,\"name\"…",
      "newValue": "{\"id\":\"live-source-match-2398520-map-2-twigs\",\"adr\":52.5,\"raw\":{\"hp\":55,\"adr\":52.5,\"raw\":{\"hp\":55,\"dbId\":23376,\"name\"…",
      "action": "merge_accepted",
      "createdAt": "2026-09-23T03:12:30.837Z"
    }
  ],
  "meta": {
    "total": 1242453,
    "limit": 2,
    "valuesTruncatedAt": 500,
    "count": 2,
    "page": 1,
    "totalPages": 621227,
    "hasNext": true,
    "hasPrev": false
  }
}

CS2 webhook event types

GET/api/v1/cs2/webhooks/events
GET/api/v1/cs2/webhooks

The event types a CS2 webhook can subscribe to, with example payloads. These routes are equivalent; use whichever reads best.

Example

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

Response

json
{
  "success": true,
  "available_on_plans": [
    "PRO",
    "BUSINESS"
  ],
  "management_endpoint": "/api/v1/webhooks",
  "create_endpoint": "POST /api/v1/webhooks",
  "events": [
    "cs2.match.started",
    "cs2.match.live_started"
  ],
  "example_payload": {
    "event": "cs2.score.updated",
    "id": "7f4c2d0d8f2f4b2ca6c6f35c4d53c2aa",
    "timestamp": "2026-09-23T03:15:09.506Z",
    "data": {
      "matchId": "cs2_match_2395230",
      "team1Score": 1,
      "team2Score": 0,
      "currentMap": "mirage"
    }
  },
  "signature_headers": [
    "X-Cito-Signature",
    "X-Cito-Event"
  ],
  "signing": {
    "algorithm": "HMAC-SHA256",
    "signedContent": "UTF-8 bytes of the exact JSON request body sent by Cito",
    "bodySerialization": "JSON.stringify(payload)",
    "signatureHeader": "X-Cito-Signature",
    "signatureEncoding": "hex",
    "signaturePrefix": "none",
    "secretFormat": "Use the exact webhook secret value shown when the webhook is created or regenerated. No whsec_ prefix is used.",
    "verificationRule": "Verify against the raw request body bytes before reparsing or reserializing JSON.",
    "sampleSecret": "cito_test_secret_123",
    "samplePayload": {
      "event": "lol.live.state",
      "id": "sample-event-id-123",
      "timestamp": "2026-06-07T16:00:00.000Z",
      "data": {
        "gameId": "lol-game-123",
        "matchId": "lol-match-123",
        "league": "LEC",
        "gameTime": 1337,
        "blueTeam": {
          "tag": "G2",
          "kills": 7,
          "gold": 24800,
          "towers": 3,
          "dragons": 2,
          "barons": 0
        },
        "redTeam": {
          "tag": "FNC",
          "kills": 5,
          "gold": 23700,
          "towers": 2,
          "dragons": 1,
          "barons": 0
        }
      }
    },
    "samplePayloadString": "{\"event\":\"lol.live.state\",\"id\":\"sample-event-id-123\",\"timestamp\":\"2026-06-07T16:00:00.000Z\",\"data\":{\"gameId\":\"lol-gam…",
    "sampleSignature": "97db77f5cd96e09a70dcf6cc75fc5d92d780c41ce82c853b51e4070954c54171",
    "sampleHeaders": {
      "Content-Type": "application/json",
      "X-Cito-Signature": "97db77f5cd96e09a70dcf6cc75fc5d92d780c41ce82c853b51e4070954c54171",
      "X-Cito-Event": "lol.live.state",
      "X-Cito-Event-Id": "sample-event-id-123",
      "X-Cito-Timestamp": "2026-06-07T16:00:00.000Z",
      "X-Cito-Delivery-Attempt": "1"
    }
  },
  "live_sse_stream": "/api/v1/cs2/live/stream?matchId={matchId}",
  "docs": "https://citoapi.com/docs/api/cs2"
}

How to register a CS2 webhook

POST/api/v1/cs2/webhooks

Returns the steps and payload for registering a CS2 webhook in the dashboard. It does not create a subscription. Same response as `GET /api/v1/cs2/webhooks/events`.

Example

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

Search CS2

GET/api/v1/cs2/search

Search teams, players, events and matches by name. Requires `q`.

Query parameters

ParameterTypeDescription
q*stringSearch text.

Example

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

Response

json
{
  "success": true,
  "data": {
    "teams": [
      {
        "id": "cs2-team-9565",
        "name": "Vitality",
        "slug": "vitality",
        "teamTag": "VITALITY",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp",
        "countryName": "France",
        "countryCode": "FR",
        "region": "Europe",
        "worldRanking": 2,
        "lastSyncedAt": "2026-09-23T03:08:44.625Z",
        "lastVerified": "2026-09-23T03:08:44.625Z",
        "confidence": "high",
        "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"
      },
      {
        "id": "cs2-team-13815",
        "name": "Vitality Academy",
        "slug": "vitality-academy",
        "teamTag": "VA",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/ad13083b7d0f2fdc6fc7032fe719467f.webp",
        "countryName": "Estonia",
        "countryCode": "EE",
        "region": "Europe",
        "worldRanking": null,
        "lastSyncedAt": "2026-09-16T18:43:52.802Z",
        "lastVerified": "2026-09-16T18:43:52.802Z",
        "confidence": "high",
        "alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp",
        "darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp"
      }
    ],
    "players": [],
    "events": [],
    "matches": [
      {
        "id": "cs2-match-2398108",
        "eventId": "cs2-event-8057",
        "eventName": "StarLadder StarSeries Fall 2026",
        "eventSlug": "starladder-starseries-fall-2026",
        "stageName": null,
        "startsAt": "2026-09-20T18:49:47.000Z",
        "endsAt": null,
        "bestOf": 5,
        "status": "completed",
        "team1Id": "cs2-team-11861",
        "team2Id": "cs2-team-9565",
        "team1Name": "Aurora",
        "team2Name": "Vitality",
        "team1Score": 1,
        "team2Score": 3,
        "winnerTeamId": "cs2-team-9565",
        "liveState": {
          "status": "completed",
          "team1Score": 1,
          "team2Score": 3,
          "winnerTeamId": "cs2-team-9565"
        },
        "vetoOrder": [
          {
            "map": null,
            "order": 1,
            "action": "ban",
            "teamId": "cs2-team-11861",
            "teamName": "Aurora"
          },
          {
            "map": "ancient",
            "order": 2,
            "action": "ban",
            "teamId": "cs2-team-9565",
            "teamName": "Vitality"
          }
        ],
        "streamLinks": [
          {
            "url": null,
            "label": null,
            "language": null,
            "platform": "twitch"
          },
          {
            "url": null,
            "label": null,
            "language": null,
            "platform": "youtube"
          }
        ],
        "vodLinks": [],
        "lastSyncedAt": "2026-09-23T03:07:06.893Z",
        "lastVerified": "2026-09-23T03:07:06.893Z",
        "confidence": "high",
        "event": {
          "id": "cs2-event-8057",
          "name": "StarLadder StarSeries Fall 2026",
          "slug": "starladder-starseries-fall-2026",
          "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp",
          "
…

CS2 autocomplete

GET/api/v1/cs2/autocomplete

Fast name completion across teams, players and events for search boxes. Requires `q`.

Example

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

Response

json
{
  "success": true,
  "data": {
    "teams": [
      {
        "id": "cs2-team-9565",
        "name": "Vitality",
        "slug": "vitality",
        "teamTag": "VITALITY",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp",
        "countryName": "France",
        "countryCode": "FR",
        "region": "Europe",
        "worldRanking": 2,
        "lastSyncedAt": "2026-09-23T03:08:44.625Z",
        "lastVerified": "2026-09-23T03:08:44.625Z",
        "confidence": "high",
        "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"
      },
      {
        "id": "cs2-team-13815",
        "name": "Vitality Academy",
        "slug": "vitality-academy",
        "teamTag": "VA",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/ad13083b7d0f2fdc6fc7032fe719467f.webp",
        "countryName": "Estonia",
        "countryCode": "EE",
        "region": "Europe",
        "worldRanking": null,
        "lastSyncedAt": "2026-09-16T18:43:52.802Z",
        "lastVerified": "2026-09-16T18:43:52.802Z",
        "confidence": "high",
        "alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp",
        "darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp"
      }
    ],
    "players": [],
    "events": [],
    "matches": [
      {
        "id": "cs2-match-2398108",
        "eventId": "cs2-event-8057",
        "eventName": "StarLadder StarSeries Fall 2026",
        "eventSlug": "starladder-starseries-fall-2026",
        "stageName": null,
        "startsAt": "2026-09-20T18:49:47.000Z",
        "endsAt": null,
        "bestOf": 5,
        "status": "completed",
        "team1Id": "cs2-team-11861",
        "team2Id": "cs2-team-9565",
        "team1Name": "Aurora",
        "team2Name": "Vitality",
        "team1Score": 1,
        "team2Score": 3,
        "winnerTeamId": "cs2-team-9565",
        "liveState": {
          "status": "completed",
          "team1Score": 1,
          "team2Score": 3,
          "winnerTeamId": "cs2-team-9565"
        },
        "vetoOrder": [
          {
            "map": null,
            "order": 1,
            "action": "ban",
            "teamId": "cs2-team-11861",
            "teamName": "Aurora"
          },
          {
            "map": "ancient",
            "order": 2,
            "action": "ban",
            "teamId": "cs2-team-9565",
            "teamName": "Vitality"
          }
        ],
        "streamLinks": [
          {
            "url": null,
            "label": null,
            "language": null,
            "platform": "twitch"
          },
          {
            "url": null,
            "label": null,
            "language": null,
            "platform": "youtube"
          }
        ],
        "vodLinks": [],
        "lastSyncedAt": "2026-09-23T03:07:06.893Z",
        "lastVerified": "2026-09-23T03:07:06.893Z",
        "confidence": "high",
        "event": {
          "id": "cs2-event-8057",
          "name": "StarLadder StarSeries Fall 2026",
          "slug": "starladder-starseries-fall-2026",
          "imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp",
          "
…

Weapon catalog

GET/api/v1/cs2/weapons

CS2 weapons with their category (rifle, pistol, SMG and so on).

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "ak47",
      "slug": "ak47",
      "name": "AK-47",
      "category": "rifle"
    },
    {
      "id": "m4a1",
      "slug": "m4a1",
      "name": "M4A1-S",
      "category": "rifle"
    }
  ],
  "meta": {
    "count": 18,
    "source": "static_catalog",
    "limit": 18,
    "total": 18,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Regions

GET/api/v1/cs2/regions

Regions used for teams and regional rankings.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "europe",
      "slug": "europe",
      "name": "Europe"
    },
    {
      "id": "americas",
      "slug": "americas",
      "name": "Americas"
    }
  ],
  "meta": {
    "count": 7,
    "source": "static_catalog",
    "limit": 7,
    "total": 7,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Leagues

GET/api/v1/cs2/leagues

Leagues and circuits that group events.

Query parameters

ParameterTypeDescription
limitintegerRows to return. Maximum 200; larger values are reduced to 200.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "entityType": "cs2_event",
      "id": "cs2-event-ranked-episode-4-open-qualifier",
      "name": "Ranked Episode 4 Open Qualifier",
      "slug": "ranked-episode-4-open-qualifier",
      "tier": null,
      "region": null,
      "status": null,
      "location": null,
      "bannerImageUrl": null,
      "eventStructure": null,
      "prizeDistribution": null,
      "stats": null,
      "availableSubresources": [
        "teams",
        "results"
      ],
      "unavailableSubresources": [
        "matches",
        "standings"
      ],
      "unavailableFields": {
        "imageUrl": {
          "reason": "event_field_unavailable"
        },
        "prizePool": {
          "reason": "event_field_unavailable"
        },
        "currency": {
          "reason": "event_field_unavailable"
        },
        "location": null,
        "format": {
          "reason": "event_field_unavailable"
        },
        "teamCount": {
          "reason": "event_field_unavailable"
        },
        "standings": {
          "reason": "event_field_unavailable"
        },
        "startsAt": {
          "reason": "event_field_unavailable"
        },
        "endsAt": {
          "reason": "event_field_unavailable"
        }
      },
      "dataQuality": "partial",
      "confidence": "medium",
      "confidenceScore": 0.7,
      "lastVerified": null
    },
    {
      "entityType": "cs2_event",
      "id": "cs2-event-8699",
      "name": "Radio Popular Roman Imperium Cup II",
      "slug": "radio-popular-roman-imperium-cup-ii",
      "tier": null,
      "region": null,
      "status": "completed",
      "location": null,
      "bannerImageUrl": null,
      "eventStructure": null,
      "prizeDistribution": null,
      "stats": null,
      "availableSubresources": [
        "teams",
        "results"
      ],
      "unavailableSubresources": [
        "matches",
        "standings"
      ],
      "unavailableFields": {
        "imageUrl": {
          "reason": "event_field_unavailable"
        },
        "prizePool": {
          "reason": "event_field_unavailable"
        },
        "currency": {
          "reason": "event_field_unavailable"
        },
        "location": null,
        "format": {
          "reason": "event_field_unavailable"
        },
        "teamCount": {
          "reason": "event_field_unavailable"
        },
        "standings": {
          "reason": "event_field_unavailable"
        },
        "startsAt": {
          "reason": "event_field_unavailable"
        },
        "endsAt": {
          "reason": "event_field_unavailable"
        }
      },
      "dataQuality": "partial",
      "confidence": "medium",
      "confidenceScore": 0.7,
      "lastVerified": null
    }
  ],
  "meta": {
    "count": 2,
    "limit": 2,
    "total": 2,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Try the CS2 Search and Reference 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/search?q=vitality" \
  -H "x-api-key: YOUR_API_KEY"