Cyberscore APIcyberscore.live ↗
Access live, upcoming, and historical Dota 2 match data from cyberscore.live including team scores, tournament info, networth graphs, and betting odds via 2 endpoints.
What is the Cyberscore API?
The cyberscore.live API exposes Dota 2 competitive match data across 2 endpoints, covering live, upcoming, and completed matches. The get_matches endpoint returns paginated lists filterable by status, team, or tournament, while get_match delivers per-match detail including networth timeline data, series format, Steam match ID, and odds from multiple partners.
curl -X GET 'https://api.parse.bot/scraper/51020d30-5c43-45ba-bcab-afa0b7bd2122/get_matches?limit=5&offset=0&status=ended_series&team_id=43580&tournament_id=46220' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace cyberscore-live-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.cyberscore_dota_2_matches_api import Cyberscore, MatchStatus, MatchNotFound
client = Cyberscore()
# List live matches filtered by status
for match in client.matchsummaries.list(status=MatchStatus.ONLINE, limit=5):
print(match.id, match.team_radiant.tag, "vs", match.team_dire.tag, match.score_team_radiant, match.score_team_dire)
# Get full details for a finished match
for match in client.matchsummaries.list(status=MatchStatus.ENDED_SERIES, limit=1):
detailed = match.details()
print(detailed.id, detailed.status, detailed.best_of, detailed.tournament.name)
for related in detailed.related_matches:
print(related.game_map_number, related.winner, related.score_team_radiant, related.score_team_dire)
Get a paginated list of Dota 2 matches ordered by most recent. Returns matches including live, upcoming, and past with team details, scores, tournament info, and betting odds. Supports filtering by status, team, or tournament. Pagination via limit/offset against a total count returned in the response.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of matches to return per page. |
| offset | integer | Number of matches to skip for pagination. |
| status | string | Filter by match status. Accepted values: draft, online, ended, ended_series. |
| team_id | string | Filter matches by team ID (numeric ID as string). Available from get_matches results rows[*].team_radiant.id or rows[*].team_dire.id. |
| tournament_id | string | Filter matches by tournament ID (numeric ID as string). Available from get_matches results rows[*].tournament.id. |
{
"type": "object",
"fields": {
"rows": "array of match objects with id, status, teams, scores, tournament, odds, networth, related_matches",
"count": "integer - total number of matches matching the filter"
},
"sample": {
"data": {
"rows": [
{
"id": 177282,
"odds": [
{
"type": "match_winner",
"values": [
"1.71",
"2.14"
],
"partner": "megapari"
}
],
"status": "online",
"winner": "",
"best_of": 3,
"id_steam": 8846782245,
"game_time": 1137,
"team_dire": {
"id": 43578,
"tag": "Moonlight Wispers",
"name": "Moonlight Wispers"
},
"date_start": "2026-06-10T19:21:31.000Z",
"tournament": {
"id": 46220,
"name": "Mad Dogs League S43",
"tier": 4,
"status": "active"
},
"team_radiant": {
"id": 43580,
"tag": "PLegion",
"name": "Prime Legion"
},
"best_of_score": [
0,
0
],
"score_team_dire": 15,
"score_team_radiant": 14
}
],
"count": 143309
},
"status": "success"
}
}About the Cyberscore API
What the API Returns
The get_matches endpoint returns a paginated array of match objects plus a total count of results matching your filters. Each match object includes team details, current scores, tournament metadata, match status, and betting odds. Status values you'll encounter are draft, online, ended, and ended_series, letting you distinguish live matches from completed ones and in-progress series from fully resolved ones.
Filtering and Pagination
You can narrow results using the status, team_id, and tournament_id query parameters — for example, passing team_id=674 to isolate Team Liquid matches, or tournament_id=44509 for BLAST SLAM VII. The limit and offset parameters handle pagination across large result sets. IDs for teams and tournaments are numeric strings, sourced from the rows[*].id fields in prior responses.
Match Detail
The get_match endpoint takes a match_id and returns the full record for that match. Notable fields include best_of (series format, e.g. 3 for BO3), winner (radiant or dire), game_time in seconds, id_steam for cross-referencing with Steam's Dota 2 data, and a networth array with timeline data points. The odds array lists figures from multiple betting partners. Related matches in the same series are also included in the response.
Coverage Scope
Data covers competitive Dota 2 matches tracked on cyberscore.live, including major tournament play. The API does not expose player-level statistics, individual hero picks, or per-game map results within a series — it operates at the match and series level.
The Cyberscore API is a managed, monitored endpoint for cyberscore.live — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cyberscore.live changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official cyberscore.live API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display a live scoreboard widget for ongoing Dota 2 tournament matches using the
onlinestatus filter - Track historical results for a specific team by filtering
get_matcheswith ateam_id - Build a tournament bracket viewer by filtering matches with a
tournament_id - Aggregate betting odds across partners from the
oddsarray for comparison tools - Plot networth advantage over time using the
networthtimeline field fromget_match - Detect series conclusions by monitoring for
ended_seriesstatus transitions - Cross-reference match results with Steam Dota 2 data using the
id_steamfield
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does cyberscore.live have an official developer API?+
What does the `status` filter in `get_matches` actually distinguish?+
draft (match scheduled but not yet started), online (currently live), ended (a single game or match concluded), and ended_series (the full series is complete). Filtering by online returns only live matches; combining ended and ended_series covers historical results.Does the API return player-level stats or hero picks for each match?+
Is networth data available for all matches?+
networth array is part of the get_match response, but its contents depend on whether the source has recorded timeline data for that match. Live and recently completed matches are most likely to carry populated networth arrays; older archived matches may return an empty array.Does the API cover esports titles beyond Dota 2?+
get_matches and get_match return Dota 2 match data only. You can fork the API on Parse and revise it to add endpoints covering other titles tracked on cyberscore.live.