CyberScore APIcyberscore.live ↗
Get upcoming Dota 2 professional match data from CyberScore.live. Filter by tournament tier, retrieve team names, start times, and best-of format.
What is the CyberScore API?
The CyberScore.live API provides one endpoint — get_upcoming_matches — that returns up to 15 upcoming Dota 2 professional matches, each carrying 5 structured fields: radiant team name, dire team name, tournament name, ISO 8601 start time, and best-of format. You can filter results by tournament tier to narrow coverage to Premier/Major events, regional leagues, or minor tournaments without any post-processing on your side.
curl -X GET 'https://api.parse.bot/scraper/be1888fa-d7d0-476a-bd89-7a59cc116d87/get_upcoming_matches?tier=1' \ -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.
"""Walkthrough: CyberScore Dota 2 Matches — list upcoming pro matches by tier."""
from parse_apis.cyberscore_live_api import CyberScore, Tier, InputFormatInvalid
client = CyberScore()
# List upcoming Tier 2 matches, capped at 5 total items.
for match in client.matches.list(tier=Tier.TIER_2, limit=5):
print(f"{match.radiant_team} vs {match.dire_team} — {match.tournament_name} ({match.best_of_format})")
print(f" Starts: {match.start_time.isoformat()}")
# Grab the first Tier 1 match (if any) for a quick look.
top_match = client.matches.list(tier=Tier.TIER_1, limit=1).first()
if top_match is not None:
print(f"Next premier match: {top_match.radiant_team} vs {top_match.dire_team}")
# Demonstrate error handling for an invalid tier value.
try:
client.matches.list(tier="invalid", limit=1).first()
except InputFormatInvalid as e:
print(f"Expected error: {e.message}")
print("exercised: matches.list (Tier 2 + Tier 1 + invalid tier)")
Returns upcoming (not yet started) Dota 2 professional matches filtered by tournament tier. Each match includes radiant and dire team names, tournament name, start time in ISO 8601, and best-of format. Results come from a single page load; the site returns up to 15 matches per request. When no matches are scheduled for the specified tier, returns an empty list.
| Param | Type | Description |
|---|---|---|
| tier | string | Tournament tier filter. Tier 1 = Premier/Major tournaments, Tier 2 = Regional leagues, Tier 3 = Minor tournaments, Tier 4 = Open qualifiers. |
{
"type": "object",
"fields": {
"total": "integer count of matches returned",
"matches": "array of match objects with radiant_team, dire_team, tournament_name, start_time, best_of_format"
},
"sample": {
"data": {
"total": 1,
"matches": [
{
"dire_team": "RE.Arise",
"start_time": "2026-08-06T09:00:00.000Z",
"radiant_team": "Level UP",
"best_of_format": "Bo3",
"tournament_name": "EPL Masters I"
}
]
},
"status": "success"
}
}About the CyberScore API
What the API Returns
The get_upcoming_matches endpoint returns a total integer alongside a matches array. Each object in the array includes radiant_team and dire_team (the two competing sides), tournament_name, start_time in ISO 8601 format, and best_of_format indicating whether the series is a Bo1, Bo2, Bo3, or Bo5. Only matches that have not yet started are included — live or concluded matches do not appear in the response.
Filtering by Tier
The optional tier query parameter accepts a string value. Tier 1 maps to Premier and Major events, Tier 2 to regional league fixtures, and Tier 3 to minor tournaments. Omitting the parameter returns matches across all tiers, subject to the 15-match-per-request cap that reflects what the source publishes per page load. There is no offset or pagination parameter.
Coverage and Scope
Coverage is limited to Dota 2 professional matches listed on CyberScore.live. The API does not expose live scores, match results, player rosters, or odds. Start times reflect the schedule as published on the source site; last-minute rescheduling will appear in the next data refresh. The tournament_name field gives you enough context to cross-reference with tournament bracket data from other sources if needed.
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?+
- Populate a Dota 2 match calendar app with upcoming fixtures pulled directly from
get_upcoming_matches. - Send automated Discord or Slack alerts when a Tier 1 tournament match is scheduled within the next 24 hours.
- Filter
tierto Tier 2 to build a regional league schedule tracker for fantasy esports platforms. - Aggregate
tournament_namevalues across responses to monitor which events are currently active. - Display best-of format alongside start times in a broadcast preparation tool for esports commentary teams.
- Track matchup frequency between two teams by querying
radiant_teamanddire_teamfields over time.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does CyberScore.live offer an official developer API?+
What does the `tier` parameter actually filter, and what happens if I omit it?+
tier restricts results to one category: Tier 1 for Premier/Major events, Tier 2 for regional leagues, Tier 3 for minor tournaments. Omitting it returns upcoming matches across all tiers, capped at 15 results per response.Does the API return live scores or match results?+
get_upcoming_matches only returns matches that have not yet started — there are no live score fields or historical result fields in the response. You can fork this API on Parse and revise it to add an endpoint covering live or completed match data.