cyberscore.live 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.
curl -X GET 'https://api.parse.bot/scraper/51020d30-5c43-45ba-bcab-afa0b7bd2122/get_matches' \ -H 'X-API-Key: $PARSE_API_KEY'
Get a paginated list of Dota 2 matches. Returns matches ordered by most recent, including live, upcoming, and past matches with team details, scores, tournament info, and betting odds.
| 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. Observed values include: draft, online, ended, ended_series. |
| team_id | string | Filter matches by team ID (numeric ID as string, e.g. '674' for Team Liquid). |
| tournament_id | string | Filter matches by tournament ID (numeric ID as string, e.g. '44509' for BLAST SLAM VII). |
{
"type": "object",
"fields": {
"rows": "array of match objects with id, status, teams, scores, tournament, odds, etc.",
"count": "integer - total number of matches matching the filter"
},
"sample": {
"rows": [
{
"id": 176633,
"odds": [
{
"type": "match_winner",
"values": [
1.95,
1.78
],
"partner": "thunderpick"
}
],
"status": "draft",
"winner": "",
"best_of": 5,
"date_end": null,
"id_steam": 8839371536,
"game_time": 420,
"id_series": "06b60ad8-d17c-4e14-9d83-2cd68a743c4e",
"team_dire": {
"id": 49445,
"tag": "GLYPH",
"name": "GLYPH"
},
"date_start": "2026-06-05T12:54:44.000Z",
"tournament": {
"id": 46175,
"name": "EWC 2026 Closed Qualifier: Southeast Asia",
"tier": 2
},
"team_radiant": {
"id": 48810,
"tag": "REKONIX",
"name": "REKONIX"
},
"best_of_score": [
2,
2
],
"game_map_number": 5,
"score_team_dire": 0,
"tournament_stage": "playoffs",
"score_team_radiant": 0
}
],
"count": 142669
}
}About the cyberscore.live 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.
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.
- 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 | 250 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.