The CS2 team ranking, as an API.
HLTV shows its team ranking on a web page and offers no API for it. To use a CS2 ranking in code, call GET /cs2/rankings/world for the world ranking (rank, points and weekly change for 250 teams) or GET /cs2/rankings/vrs for Valve's Regional Standings. A free key covers 500 requests a month.
- World ranking + VRS
- Weekly change per team
- 500 free requests / month
{ "success": true, "meta": { "ranking": "world", "rankingDate": "2026-10-12" }, "data": [ { "rank": 1, "teamName": "Spirit", "points": 1000 }, { "rank": 2, "teamName": "Vitality", "points": 686 }, { "rank": 3, "teamName": "MOUZ", "points": 562 }, "__more__" ]}Seamless Integration with our MCP Server
Give Claude, Cursor, and ChatGPT the CS2 data. One command writes the MCP config; agents call live scoreboard, team map stat, opening duel, and transfer tools instead of inventing match IDs, and your key stays on your machine.
MCPInstall the Cito MCP serverWhat does the world ranking look like right now?
The table is GET /cs2/rankings/world at build time: the same rows, points and movement your code receives, so a ranking widget on your site can match it exactly.
| Rank | Team | Points | Change | Region |
|---|---|---|---|---|
| 1 | Spirit | 1,000 | – | Europe |
| 2 | Vitality | 686 | – | Europe |
| 3 | MOUZ | 562 | – | Europe |
| 4 | FURIA | 534 | – | South America |
| 5 | Falcons | 496 | – | Europe |
| 6 | Legacy | 430 | – | South America |
| 7 | G2 | 384 | – | Europe |
| 8 | FUT | 359 | – | Europe |
| 9 | Aurora | 350 | – | Europe |
| 10 | Natus Vincere | 241 | – | Europe |
World ranking or VRS: which one do I need?
Use the world ranking for the familiar top-30 style table fans follow week to week. Use VRS when you need the ranking Valve itself uses for Major and tournament invitations. Both come with the same row shape, so one parser handles either.
| World ranking | Valve Regional Standings (VRS) | |
|---|---|---|
| Endpoint | GET /cs2/rankings/world | GET /cs2/rankings/vrs |
| Teams | 250 | 350 |
| Row fields | rank, teamName, points, change, region | rank, teamName, points, change, region |
| Movement | change since meta.changeSince | change since meta.changeSince |
| Typical use | Ranking tables, bots, power rankings | Invite tracking, Major qualification |
What does VRS look like right now?
GET /cs2/rankings/vrs at build time, top 10 with points and movement.
| Rank | Team | Points | Change | Region |
|---|---|---|---|---|
| 1 | Vitality | 1,978 | ▲2 | Europe |
| 2 | MOUZ | 1,946 | ▲2 | Europe |
| 3 | Spirit | 1,940 | ▼2 | Europe |
| 4 | Falcons | 1,843 | ▲2 | Europe |
| 5 | Aurora | 1,840 | ▲4 | Europe |
| 6 | Legacy | 1,792 | ▼4 | South America |
| 7 | FURIA | 1,784 | – | South America |
| 8 | G2 | 1,721 | ▼3 | Europe |
| 9 | FUT | 1,703 | ▼1 | Europe |
| 10 | Astralis | 1,607 | – | Europe |
How do I fetch the ranking in Python or Node.js?
One GET returns the ranking newest first, paged with page and limit. meta.rankingDate says which week you have, so you only redraw a table when that date changes.
import os, requests
API = "https://api.citoapi.com/api/v1/cs2"
H = {"x-api-key": os.environ["CITO_API_KEY"]}
r = requests.get(f"{API}/rankings/world", headers=H, params={"limit": 30}, timeout=10)
r.raise_for_status()
body = r.json()
print("Ranking of", body["meta"]["rankingDate"])
for t in body["data"]:
change = t["change"] or 0
move = f"+{change}" if change > 0 else str(change) if change < 0 else "="
print(f"{t['rank']:>2}. {t['teamName']:<20} {t['points']:>5} pts {move}")const res = await fetch("https://api.citoapi.com/api/v1/cs2/rankings/vrs?limit=100", {
headers: { "x-api-key": process.env.CITO_API_KEY },
})
const { data, meta } = await res.json()
const movers = data.filter((t) => t.change).sort((a, b) => Math.abs(b.change) - Math.abs(a.change))
console.log(`VRS ${meta.rankingDate}, change since ${meta.changeSince}`)
for (const t of movers.slice(0, 5)) console.log(t.rank, t.teamName, t.change > 0 ? `+${t.change}` : t.change)How fresh is the ranking?
The world ranking moves weekly. Every response carries meta.rankingDate (the ranking you have), meta.changeSince (the ranking change is measured against) and syncedAt (when the API last checked), so you can show the date next to the table and only redraw when it changes.
How much CS2 data is behind it?
Measured on production, with the date each figure was taken.
- The CS2 API serves the world ranking (250 teams) and the Valve Regional Standings (349 teams), updated 12 October 2026.
- The CS2 API indexes 15,315 Counter-Strike 2 matches, 4,507 teams and 8,828 players across 1,534 tournaments (as of 12 October 2026).
- The CS2 API answered 197,791 requests in the 24 hours to 3 October 2026 with a median server response time of 227 ms.
- The free CS2 API plan includes 500 requests a month, 10 requests a minute and live data on a 60-second delay, with no credit card.
Endpoints you can ship with
Start on rankings: the world ranking, VRS and one region.
Live matches
Poll the live list for every match in progress, open one match for its round, timer, bomb and players, or keep an SSE stream open and get each update pushed.
- GET
/api/v1/cs2/liveMatches in progress: series score, map in play, map score, current round.
- GET
/api/v1/cs2/live/{matchId}/stateOne live match: score, round, round timer, bomb status and players.
- GET
/api/v1/cs2/live/{matchId}/scoreboardSeries score, current map and round, and each player's kills, deaths, money and equipment.
- GET
/api/v1/cs2/live/{matchId}/roundsRound-by-round results so far: winner, side and how each round ended.
- GET
/api/v1/cs2/live/streamServer-Sent Events push of every live update. Every plan; counts like polling.
- GET
/api/v1/cs2/live/wsWebSocket with a room per match. Scale and Enterprise.
Results
Finished matches with the series score and winner, every map and its score, and the player lines behind them.
- GET
/api/v1/cs2/matches/recentFinished matches with final series score and winner, newest first.
- GET
/api/v1/cs2/matches/{matchId}One match: event, teams, series score, and maps.
- GET
/api/v1/cs2/matches/{matchId}/mapsEach map: name, score, winner, and the team that picked it.
- GET
/api/v1/cs2/matches/{matchId}/player-statsPer-player stats for each map: kills, deaths, ADR, KAST and rating.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/resultsOne team's finished matches, newest first.
- GET
/api/v1/cs2/events/{eventIdOrSlug}/resultsFinal placements and prize money of a tournament.
Schedule
What is on next: upcoming matches soonest first, today's slate, one team's fixtures, and the tournament calendar.
- GET
/api/v1/cs2/matches/upcomingScheduled matches, soonest first.
- GET
/api/v1/cs2/matches/todayMatches scheduled, live or finished today (UTC).
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/upcomingOne team's scheduled matches.
- GET
/api/v1/cs2/events/upcomingScheduled tournaments, soonest first.
- GET
/api/v1/cs2/events/calendarTournaments in a date range, with from and to.
- GET
/api/v1/cs2/matches/{matchId}/streamsBroadcast links for a match, when known.
Player stats
Rating, ADR, KAST and K/D for every map a player has played, rolled up into career, yearly and recent-form views.
- GET
/api/v1/cs2/players/{playerIdOrSlug}Nickname, real name, photo, country, team, role and headline stats.
- GET
/api/v1/cs2/players/{playerIdOrSlug}/statsCareer totals plus a stat line for every map played.
- GET
/api/v1/cs2/players/{playerIdOrSlug}/seasonsA player's stats by year.
- GET
/api/v1/cs2/players/{playerIdOrSlug}/formThe most recent maps with kills, deaths, ADR, KAST and rating.
- GET
/api/v1/cs2/leaderboards/{metric}Top players by rating, ADR, KAST, K/D, kills or opening kills.
- GET
/api/v1/cs2/players/search?q={name}Find a player by nickname or real name.
Teams & rosters
Team profiles with the current roster, every past lineup, player moves between teams, and how each team plays each map.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}Name, logo, country, region, world ranking and current roster.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/roster-historyEvery player who has played for the team, with start and end dates.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/map-statsPer-map win rate, rounds and pick/ban tendencies.
- GET
/api/v1/cs2/teams/{teamIdOrSlug}/vs/{opponentIdOrSlug}Record and past matches between two teams.
- GET
/api/v1/cs2/roster-changes/recentPlayers joining and leaving teams, newest first.
- GET
/api/v1/cs2/transfers/recentPlayer moves between teams, newest first.
Rankings
The world team ranking and the Valve Regional Standings, with points and movement, plus one table per region.
- GET
/api/v1/cs2/rankings/worldThe latest world team ranking.
- GET
/api/v1/cs2/rankings/vrsThe latest Valve Regional Standings (VRS).
- GET
/api/v1/cs2/rankings/region/{region}One region, with each team's world and regional rank.
- GET
/api/v1/cs2/rankingsOne row per team, with points and change since the previous ranking.
Skin prices
The current price of a skin on each marketplace, its daily price history, sell listings across markets, and the week's biggest movers.
- GET
/api/v1/cs2/skins?q={name}Search skins by name, weapon, rarity or price range.
- GET
/api/v1/cs2/skins/{skinIdOrSlug}/pricesThe current price on each marketplace, cheapest first, with offer counts.
- GET
/api/v1/cs2/skins/{skinIdOrSlug}/historyDaily cheapest price across marketplaces, years back on long-listed skins.
- GET
/api/v1/cs2/skins/{skinIdOrSlug}/order-bookSell listings per marketplace with counts, and the lowest ask.
- GET
/api/v1/cs2/skins/trendingBiggest gainers and losers over 1 day to 1 year, with sparklines.
- GET
/api/v1/cs2/skins/{skinIdOrSlug}One skin: weapon, rarity, collection, image and price summary.
Tournaments
Tournaments with dates, prize pool, tier and format, plus every match, the standings and the bracket.
- GET
/api/v1/cs2/events/liveTournaments being played now.
- GET
/api/v1/cs2/events/{eventIdOrSlug}Dates, location, prize pool, tier, teams and format.
- GET
/api/v1/cs2/events/{eventIdOrSlug}/matchesEvery match of the tournament.
- GET
/api/v1/cs2/events/{eventIdOrSlug}/standingsTeams with seed, final placement and prize.
- GET
/api/v1/cs2/events/{eventIdOrSlug}/bracketBracket, groups, play-in and Swiss, each slot with teams, scores and winner.
More HLTV-style data
- HLTV APIIs there an HLTV API? No official one. What to use instead.
- HLTV stats APIHLTV-style ratings, ADR, KAST and K/D as JSON.
- CS2 rankings APIThe world ranking and Valve Regional Standings.
- HLTV API alternativeEvery way to get HLTV-style CS2 data, compared.
- HLTV API in PythonResults, player stats, rankings and live scores in Python.
- Free CS2 APIWhat a free key includes, with every limit stated.
- CS2 APILive scores, results, player stats, rankings, and skin prices in one API.
- CS2 API docsEvery endpoint, its parameters, and a real response.
Build ranking tables
Create a free key and pull the ranking in one call.