How To Actually Get Your League Of Legends Match History Without Wasting Three Hours

Most people trying to pull their match history stumble right away because the API changed a while back and everyone's tutorial is outdated. The current system requires an API key from the developer dashboard, and the data comes back messy. Here's the straightforward way to do it.

Go to developer.riotgames.com and log in with your Riot account. Generate an API key under "My API Keys." This key only works on dev.riotgames.com domains locally, which trips people up constantly. You'll hit 100 requests per 10 minutes with that free key. If you need more, the process is a separate form submission that rarely gets approved quickly. The endpoint you want is v5/matches/by-summoner/{encryptedSummonerId}. It returns the last 20 matches. That's it. There's no pagination, no infinite scroll, nothing fancy. You can chain requests by using the "endTime" parameter if you want older matches, but the API only goes back roughly two years depending on your region and queue type. I ran into a specific problem recently that took me about four hours to resolve. I was building a tool to analyze my own match history for a coaching client, and the API started returning 429 errors aggressively even though I was respecting the rate limit. The issue wasn't my request frequency — it was that the account/v4/accounts/by-summoner lookup and the v5/matches call were both counting against the same rate bucket, and they had different limits. One allowed 100 requests per 10 minutes, the other 500 per 10 minutes. When I was making both calls in a tight loop, the lower-limit endpoint was choking first. The workaround was simple: cache the summoner ID locally after the first lookup and only fetch the match history endpoint going forward. This cut my processing time from around 45 minutes per 100 matches down to maybe 12 minutes on a reasonable connection.

Here's the actual request structure if you're doing this in code or even just testing in Postman: GET https://americas.api.riotgames.com/lol/match/v5/matches/by-summoner/{encryptedSummonerId}?queue=420 Replace the summoner ID with your encrypted one. The queue parameter is optional but recommended — 420 is ranked solo, 430 is blind draft, 450 is normal draft. Without queue filters you get everything mixed together and it's useless for any serious analysis.

Once you get the response, the match ID is nested under platformId and matchId. You then need to call v5/matches/{matchId} to get the full details. This is the second API call that eats your rate limit. Doing this sequentially for even 50 matches is slow. I wrote a script that batches requests with delays of 200 milliseconds between calls, which keeps you safely under the limit without being absurdly slow. Processing 100 matches this way takes about 8 to 10 minutes. There's a tool most people don't know about that makes this whole process trivial if you just want raw data rather than building something yourself. Porofessor.io and op.gg show match history in their UI, but they don't export it. The real shortcut is a third-party tool called Blitz.gg's match export feature if you have their browser extension installed. It pulls your recent matches and lets you download them as JSON. It's not perfect — it sometimes misses matches from queues you played in a while ago, and the export format is a bit mangled. But for a quick look at your last 50 matches, it saves you writing any code at all. Another thing beginners consistently miss: the data you get back doesn't include champion names, item IDs, or runes in human-readable form. Everything comes back as numeric IDs. You need to cross-reference those against the static data API (ddragon.bat or the Riot CDN) to map them to actual values. I wasted about a day once trying to figure out why my rune analysis showed numbers instead of names. Static data is versioned by patch. Make sure you're querying the latest version, otherwise you'll get empty fields or broken mappings.

Get the Full Details

Instructions to Author : Oriental Journal of Chemistry
Instructions to Author : Oriental Journal of Chemistry

The static data API endpoint is: https://ddragon.leagueoflegends.com/cdn/{version}/data/en_US/champion.json and the same pattern applies for items, runes, and summoner spells. Pull the version from https://ddragon.leagueoflegends.com/api/versions.json first. One more counter-intuitive detail: the match history API excludes some queue types entirely.ARAM, ULTRAKILL, and the occasional limited-time mode games simply don't appear. If you're wondering where your last 15 ARAM games went, they never hit the endpoint. Also, custom games require special flags and most people's accounts won't return them even if you request them. For anyone who just wants the data without any development work, there are Python libraries like RIOTWAPI and LeagueSharp that wrap all of this up. They handle the rate limiting, the static data lookups, and the response parsing automatically. The trade-off is you're trusting someone else's code to make API calls with your key. It works fine for personal use, but I wouldn't put a production tool together with a community library unless I really audited the source first.

If you're looking at this from a data analysis angle, the most useful field most people skip is timestamp. It's a Unix epoch in milliseconds. Convert it and you can see exactly when you played each match, which lets you correlate performance with patch changes, champion releases, or even your own playing schedule. I found that my win rate on a specific champion dropped consistently on Tuesdays, which turned out to be because I was playing tired after work instead of in the morning. The API data showed it clearly once I added the time dimension.