LoL Esports API endpoint
Returns the lolesports live-stats window for one game: patch, blue and red team and player metadata (champion, role, summoner name) and roughly ten seconds of frames with team gold, kills, towers, inhibitors, barons, dragons and per-player level, KDA, creep score and health. `game_state` is `in_game`, `paused` or `finished`. For a game in progress omit `starting_time` for the latest window; for a completed game pass a timestamp inside the game.
/lolesports/game-windowHeader: 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, for example 2026-10-07T10:20:00.000Z. Other values return 400.Notable response behavior:
starting_time while a game is live to get the latest frames. For a finished game pass a time inside the game; frames before the game start return an empty frames list.game_state has these values: in_game, paused, finished.participant_id values 1 to 5 are the blue side and 6 to 10 the red side; map them to players with blue.participants and red.participants.role in the player metadata has these values: top, jungle, mid, bottom, support.| Field | Filled in, of 26 checked | Values in the sample |
|---|---|---|
| timestamp | 26 | 2026-10-07 |
| game_state | 26 | in_game in all 26 |
| blue | 26 | |
| red | 26 |
| 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-07T10:20:00.000Z |
curl -X GET "https://api.crawlora.net/api/v1/lolesports/game-window?game_id=117133816701918803" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://feed.lolesports.com/livestats/v1/window/117133816701918803",
"fetched_at": "2026-10-27T10:00:00Z",
"game_id": "117133816701918803",
"match_id": "117133816701918802",
"patch": "16.18.819.1060",
"blue": {
"team_id": "111504538396430510",
"participants": [
{
"participant_id": 1,
"player_id": "102206337829139149",
"summoner_name": "SR Fudge",
"champion_id": "Sion",
"role": "top"
}
]
},
"red": {
"team_id": "98926509892121852",
"participants": []
},
"count": 1,
"frames": [
{
"timestamp": "2026-10-07T10:20:00.220Z",
"game_state": "in_game",
"blue": {
"total_gold": 3442,
"inhibitors": 0,
"towers": 0,
"barons": 0,
"total_kills": 0,
"dragons": [],
"participants": [
{
"participant_id": 1,
"total_gold": 635,
"level": 1,
"kills": 0,
"deaths": 0,
"assists": 0,
"creep_score": 3,
"current_health": 670,
"max_health": 795
}
]
},
"red": {
"total_gold": 3300,
"inhibitors": 0,
"towers": 0,
"barons": 0,
"total_kills": 0,
"dragons": [],
"participants": []
}
}
]
}
}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.GameWindowResponse | No | ||||
| data.blue | lolesports.TeamMetadata | No | ||||
| data.blue.participants | array | No | ||||
| data.blue.participants[].champion_id | string | No | Sion | |||
| data.blue.participants[].participant_id | integer | No | 1 | |||
| data.blue.participants[].player_id | string | No | 102206337829139149 | |||
| data.blue.participants[].role | string | No | top, jungle, mid, bottom, support | top | ||
| data.blue.participants[].summoner_name | string | No | SR Fudge | |||
| data.blue.team_id | string | No | 111504538396430510 | |||
| data.count | integer | No | 10 | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.frames | array | No | ||||
| data.frames[].blue | lolesports.TeamTotals | No | ||||
| data.frames[].blue.barons | integer | No | 0 | |||
| data.frames[].blue.dragons | array | No | infernal | |||
| data.frames[].blue.inhibitors | integer | No | 0 | |||
| data.frames[].blue.participants | array | No | ||||
| data.frames[].blue.participants[].assists | integer | No | 2 | |||
| data.frames[].blue.participants[].creep_score | integer | No | 54 | |||
| data.frames[].blue.participants[].current_health | integer | No | 640 | |||
| data.frames[].blue.participants[].deaths | integer | No | 0 | |||
| data.frames[].blue.participants[].kills | integer | No | 1 | |||
| data.frames[].blue.participants[].level | integer | No | 6 | |||
| data.frames[].blue.participants[].max_health | integer | No | 1100 | |||
| data.frames[].blue.participants[].participant_id | integer | No | 1 | |||
| data.frames[].blue.participants[].total_gold | integer | No | 3200 | |||
| data.frames[].blue.total_gold | integer | No | 15621 | |||
| data.frames[].blue.total_kills | integer | No | 4 | |||
| data.frames[].blue.towers | integer | No | 1 | |||
| data.frames[].game_state | string | No | in_game, paused, finished | in_game | ||
| data.frames[].red | lolesports.TeamTotals | No | ||||
| data.frames[].red.barons | integer | No | 0 | |||
| data.frames[].red.dragons | array | No | infernal | |||
| data.frames[].red.inhibitors | integer | No | 0 | |||
| data.frames[].red.participants | array | No | ||||
| data.frames[].red.participants[].assists | integer | No | 2 | |||
| data.frames[].red.participants[].creep_score | integer | No | 54 | |||
| data.frames[].red.participants[].current_health | integer | No | 640 | |||
| data.frames[].red.participants[].deaths | integer | No | 0 | |||
| data.frames[].red.participants[].kills | integer | No | 1 | |||
| data.frames[].red.participants[].level | integer | No | 6 | |||
| data.frames[].red.participants[].max_health | integer | No | 1100 | |||
| data.frames[].red.participants[].participant_id | integer | No | 1 | |||
| data.frames[].red.participants[].total_gold | integer | No | 3200 | |||
| data.frames[].red.total_gold | integer | No | 15621 | |||
| data.frames[].red.total_kills | integer | No | 4 | |||
| data.frames[].red.towers | integer | No | 1 | |||
| data.frames[].timestamp | string | No | 2026-10-07T10:20:00.000Z | |||
| data.game_id | string | No | 117133816701918803 | |||
| data.match_id | string | No | 117133816701918802 | |||
| data.patch | string | No | 16.18.819.1060 | |||
| data.red | lolesports.TeamMetadata | No | ||||
| data.red.participants | array | No | ||||
| data.red.participants[].champion_id | string | No | Sion | |||
| data.red.participants[].participant_id | integer | No | 1 | |||
| data.red.participants[].player_id | string | No | 102206337829139149 | |||
| data.red.participants[].role | string | No | top, jungle, mid, bottom, support | top | ||
| data.red.participants[].summoner_name | string | No | SR Fudge | |||
| data.red.team_id | string | No | 111504538396430510 | |||
| 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-window?game_id=117133816701918803" \
-H "x-api-key: $CRAWLORA_API_KEY"