Docs/CS2 API/CS2 Rankings API

CS2 Rankings API

Team rankings: the world ranking, Valve Regional Standings, and regional boards. The VRS ranks rosters, not organisations, so an organisation whose new and previous lineups are both ranked appears twice: the lower entry carries alsoRankedAt.

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

Team rankings

GET/api/v1/cs2/teams/rankings
GET/api/v1/cs2/rankings/teams
GET/api/v1/cs2/rankings

The latest world team ranking, one row per team, with points and change since the previous ranking. Same response as `GET /api/v1/cs2/rankings`. These routes are equivalent; use whichever reads best.

Query parameters

ParameterTypeDescription
limitintegerRows to return. Maximum 100; larger values are reduced to 100.
offsetintegerRows to skip, for paging.
pageintegerPage number, starting at 1.
sourcestringRanking to use: omit for Valve Regional Standings, or world for the world ranking filtered to this region.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "ed73655e-011f-48fa-a6a8-1594187a86c6",
      "teamId": "cs2-team-7020",
      "teamName": "Spirit",
      "rank": 1,
      "points": 904,
      "change": 0,
      "region": "Europe",
      "rankingDate": "2026-10-26T00:00:00.000Z",
      "syncedAt": "2026-10-26T22:02:01.323Z",
      "team": {
        "id": "cs2-team-7020",
        "name": "Spirit",
        "slug": "spirit",
        "teamTag": "SPIRIT",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/608894028d96779c209b2fb4c03da37c.webp",
        "countryName": "Russia",
        "countryCode": "RU",
        "region": "Europe",
        "lastSyncedAt": "2026-10-26T22:47:00.752Z",
        "lastVerified": "2026-10-26T22:47:00.752Z",
        "confidence": "high",
        "alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp",
        "darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp"
      }
    },
    {
      "id": "fe330e8a-fd41-4920-867d-dd86c556d759",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "rank": 2,
      "points": 898,
      "change": 0,
      "region": "Europe",
      "rankingDate": "2026-10-26T00:00:00.000Z",
      "syncedAt": "2026-10-26T22:02:01.323Z",
      "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",
        "lastSyncedAt": "2026-10-26T22:47:07.809Z",
        "lastVerified": "2026-10-26T22:47:07.809Z",
        "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"
      }
    }
  ],
  "meta": {
    "count": 2,
    "total": 248,
    "page": 1,
    "limit": 2,
    "ranking": "world",
    "rankingDate": "2026-10-26",
    "changeSince": "2026-10-19",
    "syncedAt": "2026-10-26T22:02:01.323Z",
    "availability": "available",
    "totalPages": 124,
    "hasNext": true,
    "hasPrev": false
  }
}

World ranking

GET/api/v1/cs2/rankings/world

The latest world team ranking. Past lists: `?date=YYYY-MM-DD` (or `as_of`) returns the newest complete list published on or before that day; `?before=YYYY-MM-DD` the newest one strictly before it (the ranking a model may use for a match on that day). Weekly lists from 2018-01-01, daily from 2026-07-22. `meta.rankingDate` is the list returned. Team ids are the same as in the match endpoints.

Query parameters

ParameterTypeDescription
as_ofstringSame as date.
beforestringThe newest list published strictly before this day (YYYY-MM-DD): pre-match rankings with no look-ahead.
datestringThe list as it stood on this day (YYYY-MM-DD): the newest complete list published on or before it.
limitintegerRows to return. Maximum 100; larger values are reduced to 100.
offsetintegerRows to skip, for paging.
pageintegerPage number, starting at 1.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "ed73655e-011f-48fa-a6a8-1594187a86c6",
      "teamId": "cs2-team-7020",
      "teamName": "Spirit",
      "rank": 1,
      "points": 904,
      "change": 0,
      "region": "Europe",
      "rankingDate": "2026-10-26T00:00:00.000Z",
      "syncedAt": "2026-10-26T22:02:01.323Z",
      "team": {
        "id": "cs2-team-7020",
        "name": "Spirit",
        "slug": "spirit",
        "teamTag": "SPIRIT",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/608894028d96779c209b2fb4c03da37c.webp",
        "countryName": "Russia",
        "countryCode": "RU",
        "region": "Europe",
        "lastSyncedAt": "2026-10-26T23:00:39.505Z",
        "lastVerified": "2026-10-26T23:00:39.505Z",
        "confidence": "high",
        "alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp",
        "darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp"
      }
    },
    {
      "id": "fe330e8a-fd41-4920-867d-dd86c556d759",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "rank": 2,
      "points": 898,
      "change": 0,
      "region": "Europe",
      "rankingDate": "2026-10-26T00:00:00.000Z",
      "syncedAt": "2026-10-26T22:02:01.323Z",
      "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",
        "lastSyncedAt": "2026-10-26T22:47:07.809Z",
        "lastVerified": "2026-10-26T22:47:07.809Z",
        "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"
      }
    }
  ],
  "meta": {
    "count": 2,
    "total": 248,
    "page": 1,
    "limit": 2,
    "ranking": "world",
    "rankingDate": "2026-10-26",
    "changeSince": "2026-10-19",
    "syncedAt": "2026-10-26T22:02:01.323Z",
    "availability": "available",
    "totalPages": 124,
    "hasNext": true,
    "hasPrev": false
  }
}

VRS snapshot dates

GET/api/v1/cs2/rankings/vrs/dates

Every Valve Regional Standings list we hold, oldest first, with the number of teams in each: Valve's releases from 2024-08-06 (weekly until January 2025, then about monthly) and a daily list from July 2026. Use these dates with `/cs2/rankings/vrs?date=` to rebuild the ranking as it stood at any point.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "rankingDate": "2024-08-06",
      "teams": 207
    },
    {
      "rankingDate": "2024-08-14",
      "teams": 209
    }
  ],
  "meta": {
    "count": 118,
    "ranking": "vrs",
    "coverage": {
      "from": "2024-08-06",
      "to": "2026-10-26"
    },
    "limit": 118,
    "total": 118,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

World ranking snapshot dates

GET/api/v1/cs2/rankings/world/dates

Every world ranking list we hold, oldest first, with the number of teams in each: weekly from 2018-01-01, daily from 2026-07-22. Use these dates with `/cs2/rankings/world?date=` to rebuild the ranking as it stood at any point.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "rankingDate": "2018-01-01",
      "teams": 30
    },
    {
      "rankingDate": "2018-01-08",
      "teams": 30
    }
  ],
  "meta": {
    "count": 539,
    "ranking": "world",
    "coverage": {
      "from": "2018-01-01",
      "to": "2026-10-26"
    },
    "limit": 539,
    "total": 539,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Valve Regional Standings

GET/api/v1/cs2/rankings/vrs

Past lists: `?date=YYYY-MM-DD` (or `as_of`) returns the newest list published on or before that day; `?before=YYYY-MM-DD` the newest one strictly before it, which is the ranking a model may use for a match on that day without seeing results from it. `meta.rankingDate` is the list returned; a date before our coverage returns an empty list with `meta.coverage`. Team ids are the same as in the match endpoints. Without a date: the latest Valve Regional Standings (VRS), in Valve's order. Valve ranks rosters, not organisations: a roster is five specific players and keeps its ranking only while at least three of them stay together, so after a big roster change the new lineup and the previous one can both be ranked under the same organisation. That team then appears twice with different points: the lower entry has `alsoRankedAt` (the team's best rank) and `change: null`. Every entry has its own `id`; key on `id` or `rank` for one row per place, or skip rows with `alsoRankedAt` for one row per organisation. `rank` is Valve's official position; points are rounded, so two teams can show equal points with different ranks.

Query parameters

ParameterTypeDescription
as_ofstringSame as date.
beforestringThe newest list published strictly before this day (YYYY-MM-DD): pre-match rankings with no look-ahead.
datestringThe list as it stood on this day (YYYY-MM-DD): the newest list published on or before it.
limitintegerRows to return. Maximum 100; larger values are reduced to 100.
offsetintegerRows to skip, for paging.
pageintegerPage number, starting at 1.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "3dfa5b6a-6053-43f3-89c8-6426d46eb92a",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "rank": 1,
      "points": 1988,
      "change": 0,
      "region": "Europe",
      "rankingDate": "2026-10-26T00:00:00.000Z",
      "syncedAt": "2026-10-26T22:02:01.323Z",
      "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",
        "lastSyncedAt": "2026-10-26T22:47:07.809Z",
        "lastVerified": "2026-10-26T22:47:07.809Z",
        "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"
      },
      "alsoRankedAt": null
    },
    {
      "id": "bb6d4352-14ff-4982-ad97-28fb02d7e8fc",
      "teamId": "cs2-team-4494",
      "teamName": "MOUZ",
      "rank": 2,
      "points": 1941,
      "change": 0,
      "region": "Europe",
      "rankingDate": "2026-10-26T00:00:00.000Z",
      "syncedAt": "2026-10-26T22:02:01.323Z",
      "team": {
        "id": "cs2-team-4494",
        "name": "MOUZ",
        "slug": "mouz",
        "teamTag": "MOUZ",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0ad08abfc7542d74ca19505208967289.svg",
        "countryName": "Europe",
        "countryCode": null,
        "region": "Europe",
        "lastSyncedAt": "2026-10-26T22:47:00.942Z",
        "lastVerified": "2026-10-26T22:47:00.942Z",
        "confidence": "high"
      },
      "alsoRankedAt": null
    }
  ],
  "meta": {
    "count": 2,
    "total": 386,
    "page": 1,
    "limit": 2,
    "ranking": "vrs",
    "rankingDate": "2026-10-26",
    "changeSince": "2026-10-19",
    "syncedAt": "2026-10-26T22:02:01.323Z",
    "availability": "available",
    "totalPages": 193,
    "hasNext": true,
    "hasPrev": false
  }
}

Regional ranking

GET/api/v1/cs2/rankings/region/{region}

The latest ranking for one region, with each team's world and regional rank. `region`: `europe`, `americas`, `north-america`, `south-america`, `asia` or `oceania` (short forms `eu`, `am`, `na`, `sa`, `as` also work).

Query parameters

ParameterTypeDescription
region (path)*stringRegion: europe, americas, north-america, south-america, asia, oceania.
limitintegerRows to return. Maximum 100; larger values are reduced to 100.
sourcestringRanking to use: omit for Valve Regional Standings, or world for the world ranking filtered to this region.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "3dfa5b6a-6053-43f3-89c8-6426d46eb92a",
      "teamId": "cs2-team-9565",
      "teamName": "Vitality",
      "rank": 1,
      "points": 1988,
      "change": null,
      "region": "Europe",
      "rankingDate": "2026-10-26T00:00:00.000Z",
      "syncedAt": "2026-10-26T22:02:01.323Z",
      "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": 2,
        "lastSyncedAt": "2026-10-26T22:47:07.809Z",
        "lastVerified": "2026-10-26T22:47:07.809Z",
        "confidence": "high",
        "vrsRanking": 1,
        "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"
      },
      "regionalRank": 1
    },
    {
      "id": "bb6d4352-14ff-4982-ad97-28fb02d7e8fc",
      "teamId": "cs2-team-4494",
      "teamName": "MOUZ",
      "rank": 2,
      "points": 1941,
      "change": null,
      "region": "Europe",
      "rankingDate": "2026-10-26T00:00:00.000Z",
      "syncedAt": "2026-10-26T22:02:01.323Z",
      "team": {
        "id": "cs2-team-4494",
        "name": "MOUZ",
        "slug": "mouz",
        "teamTag": "MOUZ",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0ad08abfc7542d74ca19505208967289.svg",
        "countryName": "Europe",
        "countryCode": null,
        "region": "Europe",
        "worldRanking": 4,
        "lastSyncedAt": "2026-10-26T22:47:00.942Z",
        "lastVerified": "2026-10-26T22:47:00.942Z",
        "confidence": "high",
        "vrsRanking": 2
      },
      "regionalRank": 2
    }
  ],
  "meta": {
    "region": "europe",
    "rankingDate": "2026-10-26",
    "count": 2,
    "limit": 2,
    "total": 2,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Try the CS2 Rankings 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/rankings/vrs?limit=10" \
  -H "x-api-key: YOUR_API_KEY"