LoL Esports API endpoint
Returns per-player detail frames for one game: level, KDA, gold, creep score, kill participation, damage share, wards, attack damage, ability power, armor, magic resistance, final items, rune ids and skill order. Use participant ids from lolesports-game-window metadata. The same `starting_time` rule as lolesports-game-window applies.
/lolesports/game-detailsReturns per-player detail frames for one League of Legends game: stats, items, runes and skill order.
Header: x-api-key required.
Parameters:
game_id: required numeric game id from lolesports-event.starting_time: optional RFC 3339 UTC timestamp whose seconds are divisible by 10. Other values return 400.participant_ids: optional participant numbers 1 to 10 joined by underscores, for example 1_2_3; omit for all ten players.Notable response behavior:
items and rune_ids are Riot data-dragon ids.skill_order lists the ability letters in the order they were levelled.| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| timestamp | 10 | 2026-10-07 |
| participants | 10 | median 2 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| game_id | string | Yes | Numeric game id from lolesports-event | 117133816701918803 | |
| starting_time | string | No | RFC 3339 UTC timestamp whose seconds are divisible by 10; frames begin there | 2026-10-07T11:30:00.000Z | |
| participant_ids | string | No | Participant numbers 1 to 10 joined by underscores, for example 1_2_3 | 1_2 |
curl -X GET "https://api.crawlora.net/api/v1/lolesports/game-details?game_id=117133816701918803" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://feed.lolesports.com/livestats/v1/details/117133816701918803",
"fetched_at": "2026-10-27T10:00:00Z",
"game_id": "117133816701918803",
"count": 1,
"frames": [
{
"timestamp": "2026-10-07T10:53:11.481Z",
"participants": [
{
"participant_id": 1,
"level": 16,
"kills": 1,
"deaths": 5,
"assists": 0,
"total_gold_earned": 10852,
"creep_score": 251,
"kill_participation": 0.2,
"champion_damage_share": 0.19,
"wards_placed": 13,
"wards_destroyed": 5,
"attack_damage": 110,
"ability_power": 257,
"critical_chance": 0,
"attack_speed": 126,
"life_steal": 0,
"armor": 154,
"magic_resistance": 50,
"tenacity": 0,
"items": [
1056,
3340,
3047
],
"rune_style_id": 8200,
"rune_sub_style_id": 8400,
"rune_ids": [
8992,
8275
],
"skill_order": [
"E",
"Q",
"W"
]
}
]
}
]
}
}Request schema
No body schema
Response schema
Inline response schema
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | lolesports.GameDetailsResponse | No | ||||
| data.count | integer | No | 10 | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.frames | array | No | ||||
| data.frames[].participants | array | No | ||||
| data.frames[].participants[].ability_power | integer | No | 0 | |||
| data.frames[].participants[].armor | integer | No | 90 | |||
| data.frames[].participants[].assists | integer | No | 0 | |||
| data.frames[].participants[].attack_damage | integer | No | 110 | |||
| data.frames[].participants[].attack_speed | integer | No | 125 | |||
| data.frames[].participants[].champion_damage_share | number | No | 0.19 | |||
| data.frames[].participants[].creep_score | integer | No | 251 | |||
| data.frames[].participants[].critical_chance | number | No | 0 | |||
| data.frames[].participants[].deaths | integer | No | 5 | |||
| data.frames[].participants[].items | array | No | ||||
| data.frames[].participants[].kill_participation | number | No | 0.2 | |||
| data.frames[].participants[].kills | integer | No | 1 | |||
| data.frames[].participants[].level | integer | No | 16 | |||
| data.frames[].participants[].life_steal | integer | No | 0 | |||
| data.frames[].participants[].magic_resistance | integer | No | 60 | |||
| data.frames[].participants[].participant_id | integer | No | 1 | |||
| data.frames[].participants[].rune_ids | array | No | ||||
| data.frames[].participants[].rune_style_id | integer | No | 8200 | |||
| data.frames[].participants[].rune_sub_style_id | integer | No | 8400 | |||
| data.frames[].participants[].skill_order | array | No | Q | |||
| data.frames[].participants[].tenacity | number | No | 0 | |||
| data.frames[].participants[].total_gold_earned | integer | No | 10852 | |||
| data.frames[].participants[].wards_destroyed | integer | No | 5 | |||
| data.frames[].participants[].wards_placed | integer | No | 13 | |||
| data.frames[].timestamp | string | No | 2026-10-07T10:53:11.481Z | |||
| data.game_id | string | No | 117133816701918803 | |||
| data.source_url | string | No | https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US | |||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/lolesports/game-details?game_id=117133816701918803" \
-H "x-api-key: $CRAWLORA_API_KEY"