dpm APIdpm.lol ↗
Access League of Legends champion tier lists, per-lane builds, rune/item stats, and ranked leaderboards from dpm.lol via a structured JSON API.
What is the dpm API?
The dpm.lol API exposes 3 endpoints covering League of Legends champion statistics, optimized builds, and ranked leaderboard data. The get_champion_list endpoint returns every champion-lane combination in a single response with winrate, pickrate, banrate, and tier score. Build data from get_champion_build includes item slots, rune paths, summoner spells, and skill level-up orders — each option annotated with winrate and pickrate drawn from real match data.
curl -X GET 'https://api.parse.bot/scraper/e5096d45-f713-45db-aad7-6b41f5ad43fa/get_champion_list?tier=emerald_plus&game_mode=ranked&timeframe=16.13' \ -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 dpm-lol-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: dpm.lol SDK — champion stats, builds, and leaderboards."""
from parse_apis.dpm_lol_API import DpmLol, Tier, Lane, Platform, ParseError
dpm = DpmLol()
# List champion stats for the current patch at Emerald+ tier
for champ in dpm.champion_statses.list(tier=Tier.EMERALD_PLUS, limit=5):
print(champ.champion_name.name, champ.lane, champ.winrate, champ.pickrate)
# Drill into a specific champion's build via constructible Champion
build = dpm.champion("Ahri").build(lane=Lane.MIDDLE, tier=Tier.EMERALD_PLUS)
for boot in build.boots:
print(boot.item_id, boot.winrate, boot.pickrate)
# Fetch the EUW leaderboard
try:
board = dpm.leaderboards.fetch(platform=Platform.EUW1, page=1)
except ParseError as exc:
print(f"Error fetching leaderboard: {exc}")
else:
print(board.total, board.challenger_cutoff, board.grandmaster_cutoff)
for player in board.players[:3]:
print(player.display_name, player.kda, player.is_live)
print("exercised: champion_statses.list / champion.build / leaderboards.fetch")
Retrieves all champions with per-lane stats (winrate, pickrate, banrate, tier score) for a given patch and rank tier. Each champion-lane combination is a separate entry. Returns the full roster in a single page.
| Param | Type | Description |
|---|---|---|
| tier | string | Rank tier filter. |
| game_mode | string | Game mode. Currently only ranked is supported. |
| timeframe | string | Patch version (e.g. 16.13, 16.12, 16.11). When omitted, the current live patch is auto-detected. |
{
"type": "object",
"fields": {
"champions": "array of champion objects with championName, championId, lane, pickrate, winrate, banrate, tierScore, winrateVariance, count, and lanesPickrate"
},
"sample": {
"data": {
"champions": [
{
"lane": "BOTTOM",
"count": 123,
"banrate": 3.05,
"winrate": 57.72,
"pickrate": 0.003718,
"tierScore": 82.48,
"championId": 200,
"championName": "Belveth",
"lanesPickrate": {
"TOP": 1.68,
"BOTTOM": 0.21,
"JUNGLE": 97.21,
"MIDDLE": 0.48,
"UTILITY": 0.44
},
"winrateVariance": 13.94
}
]
},
"status": "success"
}
}About the dpm API
Champion Tier List
get_champion_list returns the full champion roster as an array of champion-lane objects. Each entry includes championName, championId, lane, winrate, pickrate, banrate, tierScore, winrateVariance, and count (number of games sampled). Filter by tier for rank-bracket-specific data (e.g. Diamond+, Platinum+), and by timeframe to pin results to a specific patch such as 16.3 or 16.2. Because each champion can appear across multiple lanes, a champion like Twisted Fate will have distinct entries for mid, support, and any other lane where they see meaningful play.
Per-Champion Build Data
get_champion_build takes a required champion_name (case-sensitive, matching the format returned by get_champion_list, e.g. RekSai) and a required lane. The response breaks down into boots, items (slots 1 through 5), runes (primary rune ID, secondary rune ID, and stat shards), summoners, coreBuilds (item-path combinations at different build stages), and skillLevelUp (ordered ability leveling sequences). Every option in each array carries its own winrate and pickrate, letting you rank alternatives by statistical performance rather than popularity alone.
Ranked Leaderboard
get_leaderboard returns up to 100 players per page ordered by LP, filtered by platform (region) and optionally by is_pro to isolate professional players. Each player object includes rank details, gameName, displayName, primary lane, championIds in their pool, kda, leaderboardPosition, and an isLive flag indicating active game status. The response also provides lanesPickrate for lane distribution across the leaderboard, plus challengerCutoff and grandmasterCutoff LP thresholds for the selected platform.
The dpm API is a managed, monitored endpoint for dpm.lol — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dpm.lol 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 dpm.lol 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 champion tier list dashboard filtered by rank tier and patch version using
winrate,banrate, andtierScorefields. - Recommend optimal rune pages for a given champion-lane pairing based on
primaryRuneId,secondaryRuneId, andperksStatfromget_champion_build. - Track LP cutoffs for Challenger and Grandmaster tiers per region using
challengerCutoffandgrandmasterCutofffromget_leaderboard. - Identify high-variance champions where
winrateVariancedeviates fromwinrate— useful for skill-dependent champion analysis. - Monitor pro-player champion pools and KDA trends using the
is_profilter onget_leaderboard. - Generate patch-over-patch winrate change reports by querying
get_champion_listacross consecutivetimeframevalues. - Surface the statistically best core build path for a champion at different game stages using
coreBuildsitem arrays.
| 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 dpm.lol have an official public developer API?+
What does get_champion_build return for items, and how are options ranked?+
get_champion_build returns item slots 1 through 5 as separate arrays (item1 through item5), each containing multiple options. Every option includes an item Id, winrate, pickrate, and games count. Options are not pre-ranked — you can sort by winrate or pickrate depending on your use case. The coreBuilds object provides multi-item path combinations for stages beyond the starter slot.Which game modes are supported by get_champion_list?+
ranked is supported as a game_mode value. ARAM, normals, and other modes are not covered by the endpoint. You can fork this API on Parse and revise it to add endpoints targeting other game modes if dpm.lol surfaces that data.Does the API return historical match-by-match data or individual player stats beyond the leaderboard?+
How do I paginate through the full leaderboard?+
get_leaderboard returns up to 100 players per page. Use the page parameter (1-based) to step through results. The total field in the response tells you the full count of ranked players, so you can calculate how many pages to fetch for a given platform.