Professional match monitoring
Mit OpenDota-Endpunkten verwandelst du professional match monitoring in wiederholbare API-Requests mit dokumentierten Inputs und JSON-Antworten.
Join Dota 2 hero and match records across live games, professional feeds, ranked public matches, lineup queries, and replay-aware detail.
Collect OpenDota hero, live-game, professional and public-match, lineup-search, and match-detail data as structured JSON.
Endpunkt-Familien
6
Dokumentierte Parameter
18
Beispiele
8
Live-Katalog-Snapshot
Aktive Endpunkte
8
Methoden
GET
Pflichtparameter
10
Schema-Referenzen
8
{
"platform": "OpenDota",
"endpoint": "opendota-pro-matches",
"method": "GET",
"path": "/opendota/pro-matches",
"auth": "apiKey"
}Use Cases
Collect OpenDota hero, live-game, professional and public-match, lineup-search, and match-detail data as structured JSON.
Mit OpenDota-Endpunkten verwandelst du professional match monitoring in wiederholbare API-Requests mit dokumentierten Inputs und JSON-Antworten.
Mit OpenDota-Endpunkten verwandelst du live dota 2 game discovery in wiederholbare API-Requests mit dokumentierten Inputs und JSON-Antworten.
Mit OpenDota-Endpunkten verwandelst du hero and match analytics in wiederholbare API-Requests mit dokumentierten Inputs und JSON-Antworten.
Managed Execution
Jede Zahl unten stammt direkt aus dem Live-OpenDota-Endpunktkatalog — 8 Endpunkte, 18 dokumentierte Request-Parameter und 8 veröffentlichte Response-Schemas — demselben Katalog, gegen den auch Docs und Playground laufen.
8 documented OpenDota endpoints, grouped into 8 request families — Find Matches, Hero Descriptions and Hero Matches, plus 5 more.
18 request parameters are documented across those OpenDota endpoints, 10 of them required — the full input contract is public before you write any integration code.
8 of the 8 OpenDota endpoints ship a recorded example response, and 8 carry a documented response schema — you can code against the real JSON before the first request.
OpenDota endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
8 hosted MCP tools back the OpenDota endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Abdeckungskarte
/opendota/find-matches
/opendota/hero-descriptions
/opendota/hero-matches
/opendota/heroes
/opendota/live
/opendota/match
Endpunktkatalog
/opendota/pro-matchesReturns professional Dota 2 match summaries with match ID, teams, league, start time, duration, scores, winner and series metadata. OpenDota returns up to 100 rows per page. Set `less_than_match_id` to a positive match ID to fetch older results; use `next_less_than_match_id` from the response for the next page. An empty cursor page is the end of history. This is recent results, not an upcoming-match schedule. Use opendota_match with one returned match ID for parsed player statistics.
Hinweise zur Response
- OpenDota returns up to 100 rows per page. The first page contains recent results; use the cursor to read older history. This is not an upcoming-match schedule. - `count` is the number of matches in this page. - `less_than_match_id` must be a positive ID. Zero, negative or non-numeric values return HTTP 400 with an invalid-parameter error. - `next_less_than_match_id` is the lowest `match_id` in the returned page. Pass it as `less_than_match_id` to fetch the next page. An empty cursor page is a valid end-of-history response; an unexpectedly empty unfiltered response is reported as an upstream data gap. - `start_time` is UTC in RFC 3339 format. `duration_seconds` is the match length. - `radiant_win` is the upstream result boolean. `true` means Radiant won; `false` means Dire won. It is omitted if the source has no result yet. - Copy a `match_id` into [opendota-match](opendota-match.md) for the compact match summary and any parsed player lines. - The endpoint caches results for up to 15 minutes.
MCP-Tool opendota_pro_matches
/opendota/liveReturns OpenDota's current top live Dota 2 games: match and league IDs, team names, score, game clock, net-worth lead, player names when exposed, raw hero IDs, the upstream team code (`0` or `1`), and team slot (`1`, `2`, `3`, `4`, or `5`). The source mixes public matchmaking with tournament games; `league_id` is `0` when no league is associated, so its presence alone does not certify a professional event. `delay_seconds` and `last_update_time` report source freshness. Live player K/D/A is not provided by this endpoint. Resolve `hero_id` values with opendota_heroes.
Hinweise zur Response
- The response can include ordinary public matchmaking and tournament games. `league_id` is `0` when no league is associated; a nonzero ID does not by itself prove a professional event. - `delay_seconds` and `last_update_time` describe the source snapshot. The source is best-effort and its observed delay varied. A missing update time stays omitted; a zero timestamp remains zero. - Player `team_code` values are `0` and `1`. `team_slot` values are `1`, `2`, `3`, `4`, and `5`. These are raw OpenDota codes. - `hero_id` is an OpenDota hero identifier. Use [opendota-heroes](opendota-heroes.md) to resolve the current IDs and names. - The source does not provide live player K/D/A on this endpoint. An empty `matches` list is valid when no games are live. - The endpoint caches the source snapshot for up to one minute to stay within OpenDota's anonymous API limits.
MCP-Tool opendota_live
/opendota/heroesReturns the live OpenDota hero lookup needed to resolve `hero_id` values in live and detailed match responses. It includes every current hero ID with its internal name, localized name, primary attribute (`agi`, `all`, `int`, or `str`) and attack type (`Melee` or `Ranged`).
Hinweise zur Response
- The response contains every current hero supplied by OpenDota. The set and count may change with game updates. - `primary_attr` has these values: `agi`, `all`, `int`, `str`. - `attack_type` has these values: `Melee`, `Ranged`. - The endpoint caches the directory for up to 24 hours.
MCP-Tool opendota_heroes
/opendota/matchReturns a compact parsed match summary and player lines for one numeric OpenDota match ID. Copy the ID from opendota_live, opendota_pro_matches, opendota_league_matches, or opendota_league_match_ids. Replay-derived player data can be absent or delayed; a missing match ID returns not found. Steam account IDs, chat logs, replay salts and raw telemetry are not returned. `hero_id` is resolved with opendota_heroes.
Hinweise zur Response
- The response includes the teams, league, patch, score, result and parsed player lines where available. - Replay parsing is optional and can arrive several minutes after a match. If OpenDota has not parsed the replay, `players` is omitted. A match whose replay is unavailable may have only the match summary. - Player `hero_id` values come from OpenDota's current hero index; use [opendota-heroes](opendota-heroes.md) to resolve them. - Account IDs, chat logs, replay salts, replay URLs and raw telemetry are not returned. - The source detail is cached for up to one minute.
MCP-Tool opendota_match
/opendota/find-matchesReturns recent public Dota 2 matches in which the given heroes were on team A and/or team B, with both full lineups (radiant and dire), whether Radiant won, and which side the requested team A heroes were on and whether they won. Provide at least one hero id in total; each side takes up to 5 comma-separated hero ids from opendota-heroes. Unknown or repeated hero ids return an invalid-parameter error.
Hinweise zur Response
- At least one hero id is required across `team_a` and `team_b`. A non-number, an id that is not in `opendota-heroes`, a repeated id or more than five ids on one side returns `400` before any search. - OpenDota returns each match with a fixed orientation: `radiant` and `dire` lineups (hidden slots are left out) and `radiant_win`. Your `team_a` heroes can be on either side, so each match also has `team_a_side` (`radiant` or `dire`) and `team_a_win`, worked out from where the `team_a` heroes were; both are omitted when `team_a` is empty. - The response is cached for up to five minutes.
MCP-Tool opendota_find_matches
/opendota/hero-descriptionsReturns, for every Dota 2 hero or for one `hero_id`, what Aghanim's Scepter and Aghanim's Shard do: whether each upgrade exists, its description, the skill it changes and whether it adds a new skill. `include_lore=true` adds each hero's lore text (about 155 KB for all heroes), so it is off by default. An unknown hero id returns not found. Take `hero_id` from opendota-heroes.
Hinweise zur Response
- Each hero has `hero_id`, `name` (the internal `npc_dota_hero_*` name), `key` (the name without the prefix, which is also the lore key), `scepter` and `shard`. Each upgrade has `available`, `description`, `skill_name` (the ability it changes) and `new_skill` (true when the upgrade adds an ability). - A hero with no Scepter or Shard upgrade has `available: false` and an empty description. Descriptions are the tooltip text from the game files and can contain `%` placeholders for values. - With `include_lore=false` the lore table is not fetched at all. - Built from the dotaconstants tables `aghs_desc` and `hero_lore`. The response is cached for up to a day and costs two credits.
MCP-Tool opendota_hero_descriptions
/opendota/hero-matchesReturns recent professional and public matches in which a hero was played (about 100), each with the side it played, whether it won, its kills, deaths and assists, duration and league when there is one. Players' account ids are not returned. An unknown hero id returns not found.
Hinweise zur Response
- Each match has the side the hero played (`played_radiant`), `won`, kills, deaths, assists, duration and, for league games, `league_id` and `league_name`. Players' account ids are never returned. - An unknown hero id returns `404`. The response is cached for up to five minutes.
MCP-Tool opendota_hero_matches
/opendota/public-matchesReturns about 100 recent ranked public Dota 2 matches with the heroes on each side, game mode, lobby type and average rank tier, optionally limited to a rank range. Rank tiers are the medal (1 Herald, 2 Guardian, 3 Crusader, 4 Archon, 5 Legend, 6 Ancient, 7 Divine, 8 Immortal) times ten plus stars 1 to 5. Page back with `less_than_match_id` set to the previous `next_less_than_match_id`. Players' account ids are not returned.
Hinweise zur Response
- Each match has `radiant_heroes` and `dire_heroes` (hero id and localized name). Hidden slots are left out, so a lineup can be shorter than five or empty. - `avg_rank_tier` and `avg_rank_medal` describe the match's ranked players (`ranked_players` is how many were ranked). Players' account ids are never returned. - `lobby_type` and `game_mode` are the numeric ids described by [opendota-constants](opendota-constants.md). The response is cached for up to five minutes.
MCP-Tool opendota_public_matches
Verwandte APIs
Sports & Gaming
Browse public sports and event data from FanDuel Sportsbook. Discover market-specific event types, follow a league or schedule, and read the markets and prices FanDuel publishes for that event and market.
Sports & Gaming
Follow public horse-racing cards across tracks and countries. Discover today's tracks, inspect races and runners, and read official results, wager-type reference data, and published pool information without placing a wager.
Sports & Gaming
Explore FanDuel Research's public editorial and sports-data surfaces. Discover sport slugs and teams, read articles and player updates, inspect live fixtures, and retrieve the published projection tables with their source-specific slate identifiers.
So scrapst du OpenDota
OpenDota describes itself as a volunteer-developed, open-source Dota 2 data platform; its FAQ explains that basic public-match data is broader than replay-derived detail, which may cover only a subset and arrive minutes later. Players must enable Dota 2's Expose Public Match Data setting before their public matches appear. This landing highlights eight production-validated routes from OpenDota's larger catalog: hero discovery, live games, professional and ranked public matches, lineup search, hero ability descriptions and histories, and match detail. On 2026-10-29, hero-match and rank-filtered public-match responses each returned 100 rows with a usable pagination cursor; match detail also returned HTTP 200 for the current valid-ID canary. One direct lineup-search request returned HTTP 503 during the same day's research, so treat upstream errors as transient and do not interpret them as an empty lineup. Keep fetched_at and returned IDs; missing replay fields are not zero stats.
/opendota/heroes returns Dota hero identifiers and names for joins. Retain the numeric hero_id values exactly; hero statistics and match records use those IDs rather than display names.
/opendota/live returns games visible at request time, without a page or cursor parameter. Polling the endpoint creates successive observations, not a durable event history. Store fetched_at and deduplicate by the source's match identifier.
/opendota/pro-matches returns a recent list of up to 100 records and a next_less_than_match_id cursor. Pass that returned value as less_than_match_id for older matches; don't invent IDs or increment the cursor yourself.
/opendota/find-matches accepts up to five hero IDs for each team and needs at least one side; obtain IDs from `/opendota/heroes`. `/opendota/hero-matches` takes one positive `hero_id` and returns about 100 recent public and professional appearances, not a full archive.
/opendota/public-matches accepts `min_rank` and `max_rank` tiers from medal × 10 plus stars, and a `less_than_match_id` cursor from the previous response. A production sample for ranks 71–85 returned 100 rows; reuse its next cursor instead of incrementing or inventing IDs.
Pass a match ID returned by a feed to `/opendota/match`; the valid-ID canary returned 200 on 2026-10-29. `/opendota/hero-descriptions` returns one hero or all 127, and `include_lore=true` adds a much larger lore table. A successful detail response still may lack replay-derived fields.
OpenDota's FAQ says players must enable Expose Public Match Data, while replay parsing covers only a subset and can lag. A 503 from lineup search is an upstream error, not a zero-match result; back off rather than increasing request volume.
FAQ
No. Its FAQ distinguishes broad public-match data from replay parsing, which supplies additional detail for only a subset and may arrive minutes later.
OpenDota says the player must enable Expose Public Match Data in the Dota 2 client; matches played before enabling it may not appear in the public profile data.
Yes. Follow next_less_than_match_id from a response into less_than_match_id on the next request. The current route returns a bounded recent page rather than a full archive.
No. Basic public data is broader than replay parsing, which OpenDota says may be missing or arrive minutes later. The match-detail canary returned 200 on 2026-10-29, but that does not guarantee parsed fields for every match.
A direct 2026-10-29 sample returned HTTP 503 although the route also had an UP ordinary heartbeat. Back off, keep source error and empty-result cases distinct, and do not treat the failure as a successful empty search.