Dotabuff APIdotabuff.com ↗
Access Dota 2 hero win rates, pick rates, lane stats, and meta trends from Dotabuff via a structured JSON API. Covers all heroes across 4 endpoints.
What is the Dotabuff API?
The Dotabuff API exposes Dota 2 hero performance data across 4 endpoints, covering win rates, pick rates, ban rates, lane statistics, attribute breakdowns, and meta trend deltas. The get_heroes_overview endpoint supports six distinct views — including lanes, damage, and economy — while get_hero_details returns per-hero base stats, roles, and popular item win rates. Draft analysts, tier list tools, and coaching platforms can pull structured data without maintaining their own scrapers.
curl -X GET 'https://api.parse.bot/scraper/2681d69f-48c3-45f1-b935-d6053f4e33fa/get_heroes_overview?view=winning' \ -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 dotabuff-com-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.
from parse_apis.dotabuff_hero_statistics_api import Dotabuff, HeroView, Lane, HeroNotFound
dotabuff = Dotabuff()
# List top winning heroes
for hero_summary in dotabuff.heros.list(view=HeroView.WINNING, limit=5):
print(hero_summary.hero_name, hero_summary.win_rate, hero_summary.pick_rate)
# Drill into a specific hero's full details from a summary
top_hero = next(iter(dotabuff.heros.list(view=HeroView.PLAYED, limit=1)))
hero = top_hero.details()
print(hero.name, hero.roles)
print(hero.attributes.strength, hero.attributes.agility, hero.attributes.intelligence)
for item in hero.popular_items:
print(item.name, item.matches, item.win_rate)
# Get mid lane performance stats
for lane_stat in dotabuff.lanestats.list(lane=Lane.MID, limit=5):
print(lane_stat.hero, lane_stat.presence, lane_stat.win_rate, lane_stat.kda, lane_stat.gpm)
# Browse meta trends
for trend in dotabuff.trends.list(limit=3):
print(trend.hero, trend.win_rate.current, trend.win_rate.change, trend.pick_rate.current)
Retrieve an overview of all heroes with statistics like win rate, pick rate, and ban rate. The view parameter selects the statistical dimension: winning (default) shows heroes sorted by win rate, played by pick rate, facets by hero facets with tier and rates, lanes by lane presence, damage by damage output, economy by gold metrics. Returns all ~127 heroes in a single page.
| Param | Type | Description |
|---|---|---|
| view | string | The statistical view to fetch. |
{
"type": "object",
"fields": {
"view": "string indicating the selected view",
"heroes": "array of hero objects with hero_slug, hero_name, win_rate, pick_rate, and values",
"total_heroes": "integer count of heroes returned"
},
"sample": {
"data": {
"view": "winning",
"heroes": [
{
"values": [
"Spectre",
"54.71%",
"11.38%"
],
"win_rate": "54.71%",
"hero_name": "Spectre",
"hero_slug": "spectre",
"pick_rate": "11.38%",
"extra_stat": "4.14"
}
],
"total_heroes": 127
},
"status": "success"
}
}About the Dotabuff API
Hero Overview and Views
The get_heroes_overview endpoint accepts an optional view parameter with six accepted values: winning, played, facets, lanes, damage, and economy. Each view returns an array of hero objects with hero_slug, hero_name, win_rate, pick_rate, and a values field whose contents vary by view. The response also includes a total_heroes count. Omitting the view parameter returns the default overview.
Per-Hero Detail
get_hero_details takes a hero_slug string (e.g., axe, storm-spirit, outworld-destroyer) and returns the hero's display name, role array, base attribute stats with growth values for strength, agility, and intelligence, and a popular_items array. Each item entry includes name, matches, and win_rate, making it useful for identifying high-confidence item builds at scale.
Lane Statistics
get_lane_stats accepts a lane parameter — mid, off, safe, jungle, or roaming — and returns per-hero metrics for that lane: presence, win_rate, kda, gpm, and xpm. This allows direct lane-specific comparisons across all heroes, which is more granular than the aggregate views in get_heroes_overview.
Meta Trends
get_meta_trends takes no inputs and returns a ranked list of heroes ordered by the magnitude of recent change. Each entry in the trends array carries a win_rate object with start, current, and change fields, plus an equivalent pick_rate object. The total_trends integer confirms how many heroes are tracked in the current period.
The Dotabuff API is a managed, monitored endpoint for dotabuff.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dotabuff.com 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 dotabuff.com 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?+
- Build a hero tier list ranked by current win rate using
get_heroes_overviewwith thewinningview - Identify meta shifts by tracking
win_rate.changeandpick_rate.changefromget_meta_trends - Populate a draft assistant with role data and popular items from
get_hero_details - Compare lane-specific GPM and XPM across all heroes for a given lane using
get_lane_stats - Generate patch impact reports by comparing current vs. start win rates from the trends endpoint
- Display per-hero attribute growth (strength, agility, intelligence) in a hero reference app
- Rank heroes by presence in a specific lane to surface off-meta picks with positive win rates
| 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 | 100 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 Dotabuff have an official developer API?+
What does the `view` parameter in `get_heroes_overview` actually change in the response?+
values field on each hero object. For example, lanes surfaces lane-oriented breakdowns, while economy returns economy-related metrics. The hero_slug, hero_name, win_rate, and pick_rate fields are present across all views; only the values payload shifts.Does `get_hero_details` return skill builds or ability data?+
get_hero_details covers base attributes (strength, agility, intelligence with growth), roles, and popular items with match counts and win rates. It does not include skill build recommendations or ability descriptions. You can fork this API on Parse and revise it to add an endpoint targeting ability and skill-order data.Are player-level or match-level statistics available through this API?+
How current is the data returned by `get_meta_trends`?+
start and current values so you can see the window being compared, but the API does not expose a specific timestamp for when the underlying figures were last updated.