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
Coverage counts (matches, teams, players, events, demos) and links to the main endpoints.
Example
curl "https://api.citoapi.com/api/v1/cs2" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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
Whether CS2 data is current: `current_status`, `freshness` (`fresh` or `stale`) and the time of the last successful update.
Example
curl "https://api.citoapi.com/api/v1/cs2/status/sync" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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
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
| Parameter | Type | Description |
|---|---|---|
| action | string | Filter by action. |
| entity_id | string | Only changes to this record. |
| entity_type | string | Only changes to this kind of record. |
| full | boolean | true returns complete values instead of truncated ones. |
| limit | integer | Rows to return. Maximum 200; larger values are reduced to 200. |
| offset | integer | Rows to skip, for paging. |
Example
curl "https://api.citoapi.com/api/v1/cs2/changelog" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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
The event types a CS2 webhook can subscribe to, with example payloads. These routes are equivalent; use whichever reads best.
Example
curl "https://api.citoapi.com/api/v1/cs2/webhooks/events" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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
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
curl "https://api.citoapi.com/api/v1/cs2/webhooks" \
-H "x-api-key: YOUR_API_KEY"Search CS2
Search teams, players, events and matches by name. Requires `q`.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| q* | string | Search text. |
Example
curl "https://api.citoapi.com/api/v1/cs2/search" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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
Fast name completion across teams, players and events for search boxes. Requires `q`.
Example
curl "https://api.citoapi.com/api/v1/cs2/autocomplete" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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
CS2 weapons with their category (rifle, pistol, SMG and so on).
Example
curl "https://api.citoapi.com/api/v1/cs2/weapons" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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
Regions used for teams and regional rankings.
Example
curl "https://api.citoapi.com/api/v1/cs2/regions" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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
Leagues and circuits that group events.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| limit | integer | Rows to return. Maximum 200; larger values are reduced to 200. |
Example
curl "https://api.citoapi.com/api/v1/cs2/leagues" \
-H "x-api-key: YOUR_API_KEY"Response
{
"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.
curl "https://api.citoapi.com/api/v1/cs2/search?q=vitality" \
-H "x-api-key: YOUR_API_KEY"