CS2 API#
The CS2 API covers competitive Counter-Strike 2: tournaments, teams (with ELO ratings, form and map pools), players (K/D, damage, clutch stats), matches with map-by-map scores, and model-based win predictions.
Base URL: https://sports.bzzoiro.com/csgo/api/v2/
Access#
Requires the Sports Addon ($5/month) — it unlocks the tennis, CS2, darts, hockey, basketball and horse racing APIs plus their MCP servers. Get it at /addons/. You also need a free account token from /register/.
Authorization: Token YOUR_API_KEY
Without a token you get 401:
{"error": "authentication required", "code": "authentication_required",
"detail": "Send Authorization: Token <YOUR_TOKEN> on every request.",
"register": "https://sports.bzzoiro.com/register/"}
With a token but no addon you get 402:
{"error": "Sports Addon required", "code": "addon_required",
"detail": "Tennis, CS:GO, darts, hockey, basketball and horse racing APIs require the Sports Addon ($5/mo).",
"pricing_url": "https://sports.bzzoiro.com/pricing/"}
List endpoints paginate with limit (default 50, max 200) and offset, and
return {count, next, previous, results}.
Endpoints#
| Endpoint | Description |
|---|---|
GET /csgo/api/v2/tournaments/ |
List tournaments |
GET /csgo/api/v2/tournaments/{id}/ |
Tournament detail |
GET /csgo/api/v2/teams/ |
List/search teams with ELO and winrate |
GET /csgo/api/v2/teams/{id}/ |
Team detail: map pool, round winrates, form |
GET /csgo/api/v2/players/ |
List/search players |
GET /csgo/api/v2/players/{id}/ |
Player detail: K/D, damage, clutches |
GET /csgo/api/v2/matches/ |
List matches |
GET /csgo/api/v2/matches/live/ |
Matches in play right now |
GET /csgo/api/v2/matches/{id}/ |
Match detail with map-by-map scores |
GET /csgo/api/v2/predictions/ |
Model win probabilities |
GET /csgo/api/v2/predictions/{id}/ |
One prediction |
The machine-readable schema is public at /csgo/api/schema/, with an
interactive UI at /csgo/api/docs/ and a themed explorer at
/docs/explorer/csgo/.
Tournaments#
Query parameters
| Param | Type | Description |
|---|---|---|
include_inactive |
bool | Include finished/inactive tournaments |
limit / offset |
int | Pagination (default 50, max 200) |
Responses are cached ~5 minutes.
{"count": 12, "results": [
{"id": 87, "name": "IEM Cologne 2026", "start_date": "2026-07-22",
"end_date": "2026-08-03", "prize_pool": "$1,000,000"}
]}
Teams#
Query parameters
| Param | Type | Description |
|---|---|---|
search |
string | Name search |
country |
string | ISO country code |
limit / offset |
int | Pagination |
Cached ~5 minutes.
curl -H "Authorization: Token YOUR_API_KEY" \
"https://sports.bzzoiro.com/csgo/api/v2/teams/?search=vitality"
{"count": 1, "results": [
{"id": 342, "name": "Team Vitality", "short_name": "VIT",
"country_code": "FR", "country": "France",
"elo_rating": 2144, "win_rate": 0.71}
]}
GET /teams/{id}/ adds the map pool (per-map winrates, picked/banned rates),
round winrates by side (T/CT), pistol-round winrate and recent form.
Players#
Query parameters
| Param | Type | Description |
|---|---|---|
search |
string | Name/nickname search |
team |
int | Filter by team id |
limit / offset |
int | Pagination |
GET /players/{id}/ returns career aggregates: K/D ratio, average damage per
round, headshot rate, opening kills, AWP usage and clutch stats.
{"id": 1874, "nickname": "ZywOo", "name": "Mathieu Herbaut",
"country_code": "FR", "team": {"id": 342, "name": "Team Vitality"},
"kd_ratio": 1.32, "avg_damage": 86.4, "headshot_rate": 0.42,
"opening_kills_per_round": 0.14, "clutch_win_rate": 0.38}
Matches#
Query parameters
| Param | Type | Description |
|---|---|---|
tournament |
int | Filter by tournament id |
team |
int | Matches involving this team id |
status |
string | upcoming, live, finished |
date_from / date_to |
date | YYYY-MM-DD |
limit / offset |
int | Pagination |
curl -H "Authorization: Token YOUR_API_KEY" \
"https://sports.bzzoiro.com/csgo/api/v2/matches/?team=342&status=finished"
{"count": 18, "results": [
{"id": 5531, "tournament": {"id": 87, "name": "IEM Cologne 2026"},
"home_team": {"id": 342, "name": "Team Vitality", "short_name": "VIT"},
"away_team": {"id": 199, "name": "FaZe Clan", "short_name": "FAZE"},
"start_time": "2026-08-01T18:00:00+00:00", "status": "finished",
"home_score": 2, "away_score": 1, "best_of": 3, "stage": "Semifinal"}
]}
GET /matches/live/ returns in-play matches only (cached 30 seconds).
GET /matches/{id}/ adds maps[] — one entry per map with the map name and
per-map round scores:
{"id": 5531, "best_of": 3, "home_score": 2, "away_score": 1,
"maps": [
{"map": "Inferno", "home_rounds": 13, "away_rounds": 7},
{"map": "Mirage", "home_rounds": 10, "away_rounds": 13},
{"map": "Nuke", "home_rounds": 13, "away_rounds": 11}
]}
Predictions#
Query parameters
| Param | Type | Description |
|---|---|---|
upcoming |
bool | Only matches not yet started |
date_from / date_to |
date | YYYY-MM-DD |
limit / offset |
int | Pagination |
{"count": 9, "results": [
{"id": 2210, "match_id": 5544,
"home_win_prob": 0.58, "away_win_prob": 0.42,
"predicted_winner_id": 342, "confidence": 0.58}
]}