For Agents
Retrieve Dota 2 match data, player histories, hero and item statistics, and professional league information across 55 endpoints derived from parsed game replays.
Install Jentic One Beta
Jentic One is a self-hosted execution layer for AI agents. It lets your agent call the OpenDota API, or any other public or private API you need. You set the rules, the agent never sees your credentials, and every call is logged.
Two steps, two machines. Install the instance in a safe environment, then register your agent from wherever it runs.
Step 1: Jentic One Host machine
# On the machine that will host your Jentic One instance:
curl -fsSL https://raw.githubusercontent.com/jentic/jentic-one/main/tools/install.sh | shStep 2: Agent machine
# On the machine where your agent runs (keep this separate from the instance):
curl -fsSL https://raw.githubusercontent.com/jentic/jentic-one/main/tools/install.sh | sh
jentic register # connects your agent to your Jentic One instanceJentic One is in public beta. The setup above keeps your agent separate from the instance, which is what you want before using real credentials: an agent running as the same OS user as Jentic One can read its stored keys directly. Just evaluating? A single local install is fine to start. See the secure deployment guide for the tiers.
What an agent can do with OpenDota API.
Fetch full parsed match details including per-player gold, XP, and combat events via /matches/{match_id}
Build a player profile by combining /players/{account_id}, /players/{account_id}/wl, and /players/{account_id}/recentMatches
Retrieve a player's per-hero and per-peer statistics through /players/{account_id}/heroes and /players/{account_id}/peers
GET STARTED
Use for: Get the full parsed details of a specific Dota 2 match by match ID, Retrieve a player's win-loss record and recent matches, Find which heroes a player performs best with, List the most-played teammates of a given player
Not supported: Does not handle live in-game state, account authentication, or matchmaking actions — use for read-only Dota 2 statistics, parsed match data, and pro-scene metadata only.
The OpenDota API is the open-data layer over Dota 2 match telemetry, exposing parsed match details, player histories, hero and item statistics, professional team metadata, and live league standings extracted from replay files. It supports the broader Dota 2 community's analytics tools, statistics sites, and third-party trackers with 55 endpoints spanning matches, players, heroes, items, leagues, teams, and aggregate metrics. An optional api_key query parameter raises rate limits for high-volume consumers.
Power leaderboards and tournament trackers using league, team, and pro-match aggregate endpoints
Compute meta analytics from hero, item, and rank-tier aggregate stats
Trigger fresh replay parsing for un-parsed public matches via /request/{job_id}
Patterns agents use OpenDota API for, with concrete tasks.
★ Player Stats Dashboard
Build a Dota 2 player dashboard showing recent matches, win-loss record, hero proficiency, and top teammates. The OpenDota API exposes one player profile endpoint plus a set of nested resources (wl, recentMatches, heroes, peers, totals, counts) that combine into a complete dashboard with around six requests per profile load.
For account_id 76561198015862139, call /players/{id}, /players/{id}/wl, and /players/{id}/heroes and return the player's win rate plus top three heroes.
Match Replay Analytics
Pull parsed match data including per-minute gold and XP, ability uses, kill events, and item timings via /matches/{match_id}. Used by post-game analytics sites that surface mistakes, rotations, and team-fight outcomes. If a public match is unparsed, request a parse via /request/{job_id} and poll for completion.
Call /matches/7456000123 and return the radiant and dire net worth at minute 20 plus the kill score at that timestamp.
Pro Scene Tracker
Track active professional leagues, teams, and pro matches by combining league, team, and pro-match aggregate endpoints. Powers community tournament trackers that show standings, recent results, and player rosters during major events without scraping third-party sites.
List currently active leagues from the leagues endpoint and return their league_id, name, and tier.
Agent-Driven Match Lookup
An AI agent answering Dota 2 questions can use Jentic to discover the right OpenDota endpoint for a query like "how did Player X do in their last 10 ranked matches?". Jentic returns /players/{account_id}/recentMatches with the input schema; the agent calls it and summarises the result. The optional api_key keeps the agent within free-tier rate limits at scale.
Through Jentic, find the operation for "recent matches for a player" and call it with account_id supplied by the user.
55 endpoints — the opendota api is the open-data layer over dota 2 match telemetry, exposing parsed match details, player histories, hero and item statistics, professional team metadata, and live league standings extracted from replay files.
METHOD
PATH
DESCRIPTION
/matches/{match_id}
Get parsed match details
/players/{account_id}
Get a player profile
/players/{account_id}/wl
Get a player's win-loss record
/players/{account_id}/recentMatches
List recent matches for a player
/players/{account_id}/heroes
Get a player's per-hero performance
/players/{account_id}/peers
Get a player's most-played teammates
/players/{account_id}/totals
Get aggregate per-stat totals for a player
/players/{account_id}/counts
Get count breakdowns by lane, role, and result
/matches/{match_id}
Get parsed match details
/players/{account_id}
Get a player profile
/players/{account_id}/wl
Get a player's win-loss record
/players/{account_id}/recentMatches
List recent matches for a player
/players/{account_id}/heroes
Get a player's per-hero performance
Three things that make agents converge on Jentic-routed access.
Credential isolation
OpenDota's optional api_key is stored encrypted in the Jentic vault (MAXsystem). Jentic appends it as the api_key query parameter at execution so the agent operates under the elevated rate limit without ever seeing the raw key.
Intent-based discovery
Agents query Jentic with intents like "recent matches for a Dota 2 player" or "parsed match details" and receive the matching OpenDota operation with its account_id or match_id parameters typed correctly.
Time to first call
Direct OpenDota integration: 1-2 days for endpoint coverage, parse-job polling, and rate-limit handling. Through Jentic: under 1 hour.
Alternatives and complements available in the Jentic catalogue.
Specific to using OpenDota API through Jentic.
What authentication does the OpenDota API use?
OpenDota accepts an optional api_key query parameter; calls without a key fall under a lower public rate limit. Jentic stores the api_key encrypted in MAXsystem and appends it to each request's query string at execution, keeping the value out of the agent's prompt context.
Can I get a player's recent matches with the OpenDota API?
Yes. Call /players/{account_id}/recentMatches to get the most recent 20 matches for a Dota 2 account, with match ID, hero, kills/deaths/assists, duration, and win flag for each. Combine with /players/{account_id}/wl for an aggregate win-loss view.
What are the rate limits for the OpenDota API?
The free tier permits roughly 60 requests per minute and 2,000 per day; an api_key raises the daily ceiling. Heavy consumers should use OpenDota's paid plan tiers documented on the OpenDota website. On 429 responses, back off and retry.
How do I trigger replay parsing for a match through Jentic?
Use the Jentic search query "request a Dota 2 match parse". Jentic returns /request/{job_id} with the input schema; the agent supplies the match_id and polls /request/{job_id} until the parse completes. Sign up at https://app.jentic.com/sign-up.
Is the OpenDota API free?
Yes, the public tier is free for individual and community use. OpenDota offers paid plans for higher rate limits and commercial use, billed per call volume.
How do I look up a Dota 2 match by ID with the OpenDota API?
GET /matches/{match_id} returns the full match record including team and per-player stats. If parsed_at is null, the match has not yet been replay-parsed; trigger a parse via /request/{job_id} or fall back to the unparsed summary.
/players/{account_id}/peers
Get a player's most-played teammates
/players/{account_id}/totals
Get aggregate per-stat totals for a player
/players/{account_id}/counts
Get count breakdowns by lane, role, and result