OP APIop.gg ↗
Access OP.GG summoner profiles, match history, champion stats, mastery, builds, and leaderboards via a structured REST API with 9 endpoints.
What is the OP API?
The OP.GG API exposes 9 endpoints covering League of Legends summoner data, from ranked profiles and match history to champion builds and regional leaderboards. The get_summoner_match_history endpoint returns up to 20 recent matches per call with KDA, items, runes, and team compositions, while get_champion_build surfaces pick rates, win rates, and recommended rune pages for any champion by position and tier.
curl -X GET 'https://api.parse.bot/scraper/a11058bd-d7ba-443d-b6b0-d28a13c48742/search_summoner?query=Faker®ion=na' \ -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 op-gg-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.
"""OP.GG SDK — League of Legends player statistics and champion builds."""
from parse_apis.op_gg_api import (
OPGG, Region, GameType, LeaderboardTier, Position, BuildRegion, SummonerNotFound
)
client = OPGG()
# Search for summoners by name
for summoner in client.summoners.search(query="Faker", region=Region.KR, limit=3):
print(summoner.game_name, summoner.tagline, summoner.ranked)
# Get a summoner's full profile
profile = client.summoners.get_profile(name="Faker", tag="1God", region=Region.KR)
print(profile.name, profile.tag, profile.level, profile.rank_summary)
# Get match history filtered by game type
for match in client.summoners.get_match_history(
name="never type", tag="1998", region=Region.NA, game_type=GameType.SOLORANKED, limit=3
):
print(match.champion.name, match.game_result, match.stats.kda.kill, match.stats.kda.death)
# Get leaderboard for a region
for entry in client.leaderboardentries.list(region=Region.NA, tier=LeaderboardTier.CHALLENGER, limit=5):
print(entry.name, entry.tag)
# Get champion build recommendations
try:
build = client.championbuilds.get(
champion="ahri", position=Position.MID, region=BuildRegion.KR
)
print(build.champion, build.position, build.win_rate, build.patch)
print(build.runes[0].primary_style, build.runes[0].primary_runes)
except SummonerNotFound as exc:
print(f"Not found: {exc}")
print("exercised: summoners.search / get_profile / get_match_history / leaderboardentries.list / championbuilds.get")
Full-text search for summoners by name and region. Returns matching summoner profiles with game name, tagline, rank, and thumbnail. Results are not paginated; server returns all matches.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword (summoner name or partial name) |
| region | string | Region code |
{
"type": "object",
"fields": {
"summoners": "array of summoner summary objects with gameName, tagline, href, ranked, thumbnail, teamInfo"
},
"sample": {
"data": {
"summoners": [
{
"href": "/summoners/kr/Faker-1God",
"ranked": "Level 152",
"tagline": "1God",
"gameName": "Faker",
"teamInfo": null,
"highlight": "<b>Faker</b>",
"thumbnail": "https://opgg-static.akamaized.net/meta/images/profile_icons/profileIcon6637.jpg"
}
]
},
"status": "success"
}
}About the OP API
Summoner Profiles and Ranked Data
The search_summoner endpoint accepts a partial name and optional region code, returning an array of matching summoner objects with gameName, tagline, ranked tier, and thumbnail. From there, get_summoner_profile and get_summoner_ranked_stats both accept a name and tag pair (e.g., name=Faker, tag=KR1) and return rank_summary, win_loss_summary, level, puuid, and a champions_summary string. Optional fields return null when OP.GG has no data for that summoner yet.
Match History and Champion Statistics
get_summoner_match_history returns up to 20 matches per request. Each match object includes champion, position, game_result, game_length, game_type, stats, items, runes, spells, and a created_at timestamp. Pass the ended_at cursor (an ISO timestamp from the last match's created_at) to paginate backward through older games. You can also filter by champion name or game_type. get_summoner_champion_stats returns per-champion aggregates for the current ranked season: play count, win_rate, kda, cs, and cs_per_min.
Champion Builds and Leaderboards
get_champion_build takes a champion string in lowercase-no-spaces format (e.g., leesin, drmundo) along with optional position, tier, and region filters. The response includes runes, core_builds, boots, ban_rate, win_rate, pick_rate, and the current patch version. Each rune page object contains primary_style, sub_style, primary_runes, sub_runes, and shards alongside aggregated games and win_rate. get_leaderboard returns up to 100 summoner name and tag pairs for a specified region and tier.
Mastery and Season History
get_summoner_mastery returns every champion a summoner has mastery on, with fields including level, points, tokens_earned, grades, champion_image_url, and last_played_at. get_summoner_season_history returns an ordered array of integer season IDs the summoner has data for, which can be used to scope historical queries.
The OP API is a managed, monitored endpoint for op.gg — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when op.gg 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 op.gg 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?+
- Track a summoner's ranked climb by polling get_summoner_profile for rank_summary and win_loss_summary over time.
- Build a champion-select helper that pulls get_champion_build rune pages and core_builds filtered by position and tier.
- Populate a post-game review tool with get_summoner_match_history KDA, items, and runes for each recent game.
- Generate champion pool reports from get_summoner_champion_stats win_rate and cs_per_min for a given player.
- Display regional top-100 leaderboards using get_leaderboard with configurable tier and region inputs.
- Show a player's mastery progression using get_summoner_mastery points, level, and last_played_at per champion.
- Identify ban-worthy champions in a given rank tier by sorting get_champion_build results by ban_rate.
| 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 OP.GG have an official developer API?+
How does pagination work in get_summoner_match_history?+
created_at value from the last match in the current response as the ended_at parameter in the next request. Repeat until the returned matches array is empty.Does the API cover TFT (Teamfight Tactics) player data?+
What does get_champion_build return for rune recommendations?+
runes array contains one object per rune page variant, each with primary_style, sub_style, primary_runes, sub_runes, and shards, plus aggregate pick_rate, win_rate, and games counts. Results reflect the specified position and tier filters, defaulting to aggregated data when those params are omitted.Does the API expose live in-game data or spectator feeds?+
get_summoner_match_history), ranked standings, champion builds, and mastery — all post-game or aggregated data. You can fork this API on Parse and revise it to add an endpoint for live game state if OP.GG exposes that view.