get_match_details
Fetch detailed Dota 2 match data, covering teamfights, objectives, gold advantage, and player benchmarks, with automatic parse status detection.
Instructions
Get comprehensive details for a specific match, with automatic detection of parse status.
Use this when users ask:
"Show me match [match_id]"
"Analyze match [match_id]"
"What happened in match [match_id]?"
"Show me the teamfights in match [match_id]"
"Who won match [match_id]?"
"What were the item builds in match [match_id]?"
"Show me the gold graph for match [match_id]"
This tool automatically detects whether a match has been parsed (has detailed replay data) or not:
Parsed matches: Returns organized summary with teamfights, objectives, gold/XP advantage graphs, chat logs, and detailed player performance benchmarks
Unparsed matches: Returns basic match data with player KDA, GPM/XPM, and game outcome
For matches that aren't parsed yet, use request_parse_match() first, wait a few minutes, then call this function to get the detailed data.
Args: match_id: The match ID to retrieve (e.g., 8123456789)
Returns: Dictionary with structure depending on parse status:
If parsed=True (detailed replay data available):
- parsed (bool): True
- metadata (dict): Match info (duration, game mode, winner, etc.)
- teamfights_summary (dict):
- count (int): Number of teamfights detected
- teamfights (list): Detailed teamfight breakdowns with:
- start/end time, location, deaths, gold swing
- objectives (list): Timeline of objectives (towers, barracks, Roshan)
- chat (list): In-game chat messages with timestamps
- picks_bans (list): Draft phase picks and bans
- players_summary (dict):
- count (int): Number of players (always 10)
- players (list): Per-player statistics including:
- account_id, hero_name, team, KDA
- gold_per_min, xp_per_min, net_worth
- hero_damage, tower_damage, hero_healing
- last_hits, denies
- benchmarks: Performance percentiles for 7 key metrics
- gold_advantage (list): Gold advantage over time (array of values)
- xp_advantage (list): XP advantage over time (array of values)
If parsed=False (basic match data only):
- parsed (bool): False
- data (dict):
- players (list): Basic player stats (KDA, GPM, damage, benchmarks)
- radiant_win (bool): True if Radiant won, False if Dire won
- duration (str): Game length in MM:SS format
- match_id (int): The match IDCommon queries: - Basic match info: get_match_details(8123456789) - Teamfight analysis: After parsing, check teamfights_summary - Performance comparison: Compare benchmarks between players - Gold advantage: Check gold_advantage array for momentum swings
Example (parsed match): get_match_details(8123456789) -> { "parsed": true, "metadata": { "match_id": 8123456789, "duration": "45:23", "radiant_win": true, "game_mode": 22 }, "teamfights_summary": { "count": 12, "teamfights": [ { "start": 1245, "end": 1267, "deaths": 6, "gold_delta": 3500, ... } ] }, "players_summary": { "count": 10, "players": [ { "hero_name": "Rubick", "team": "radiant", "kills": 8, "deaths": 5, "assists": 25, "gold_per_min": 380, "benchmarks": { "gold_per_min": {"raw": 380, "pct": 65.3}, "xp_per_min": {"raw": 425, "pct": 58.2}, ... } }, ... ] }, "gold_advantage": [0, 200, 450, 800, ...], ... }
Example (unparsed match): get_match_details(8123456789) -> { "parsed": false, "data": { "players": [...], "radiant_win": true, "duration": "45:23", "match_id": 8123456789 } }
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| match_id | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||