LoL Esports API endpoint
Returns matches currently in progress across all leagues, in the same shape as lolesports-schedule events. An empty list is valid when no league is playing. Pair a returned match id with lolesports-event to get game ids, then lolesports-game-window for live frames.
/lolesports/liveReturns League of Legends matches that are in progress right now.
Header: x-api-key required.
Parameters:
hl: optional language for names and labels; defaults to en-US. Allowed values: cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW. Other values return 400.Notable response behavior:
events uses the same shape as lolesports-schedule. An empty list is a valid answer when no league is playing.state has these values: unstarted, inProgress, completed. Team outcome has these values: win, loss.| Field | In the sample | Value in the sample |
|---|---|---|
| count | Has a value | 0 |
| events | Empty |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| hl | string | No | en-US | Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US Allowed values: cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW. |
curl -X GET "https://api.crawlora.net/api/v1/lolesports/live?hl=cs-CZ" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://esports-api.lolesports.com/persisted/gw/getLive?hl=en-US",
"fetched_at": "2026-10-27T10:00:00Z",
"count": 0,
"events": []
}
}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.LiveResponse | No | ||||
| data.count | integer | No | 0 | |||
| data.events | array | No | ||||
| data.events[].block_name | string | No | Week 1 | |||
| data.events[].games | array | No | ||||
| data.events[].games[].id | string | No | 115548681803406276 | |||
| data.events[].games[].vods | array | No | ||||
| data.events[].games[].vods[].end_millis | integer | No | 2525000 | |||
| data.events[].games[].vods[].first_frame_time | string | No | 2026-10-15T18:00:26.487Z | FirstFrameTime is the UTC time of the recording's first frame, when the upstream knows it. | ||
| data.events[].games[].vods[].id | string | No | 117401850612643795 | |||
| data.events[].games[].vods[].locale | string | No | fr-FR | |||
| data.events[].games[].vods[].locale_name | string | No | French (France) | |||
| data.events[].games[].vods[].offset | integer | No | 0 | Offset is the upstream's alignment offset for the recording in milliseconds. | ||
| data.events[].games[].vods[].parameter | string | No | xtq9wDAT3zg | |||
| data.events[].games[].vods[].provider | string | No | youtube | |||
| data.events[].games[].vods[].start_millis | integer | No | 121000 | |||
| data.events[].league | lolesports.EventLeague | No | ||||
| data.events[].league.id | string | No | 98767991302996019 | |||
| data.events[].league.name | string | No | LEC | |||
| data.events[].league.slug | string | No | lec | |||
| data.events[].match | lolesports.Match | No | ||||
| data.events[].match.flags | array | No | hasVod | |||
| data.events[].match.id | string | No | 115548681803406275 | |||
| data.events[].match.strategy | lolesports.Strategy | No | ||||
| data.events[].match.strategy.count | integer | No | 3 | |||
| data.events[].match.strategy.type | string | No | bestOf | |||
| data.events[].match.teams | array | No | ||||
| data.events[].match.teams[].code | string | No | T1 | |||
| data.events[].match.teams[].game_wins | integer | No | 2 | |||
| data.events[].match.teams[].id | string | No | 98767991853197861 | |||
| data.events[].match.teams[].image_url | string | No | https://static.lolesports.com/teams/t1.png | |||
| data.events[].match.teams[].name | string | No | T1 | |||
| data.events[].match.teams[].outcome | string | No | win, loss | win | ||
| data.events[].match.teams[].record | lolesports.Record | No | ||||
| data.events[].match.teams[].record.losses | integer | No | 0 | |||
| data.events[].match.teams[].record.wins | integer | No | 9 | |||
| data.events[].match.teams[].slug | string | No | t1 | |||
| data.events[].start_time | string | No | 2026-07-24T14:30:00Z | |||
| data.events[].state | string | No | unstarted, inProgress, completed | completed | ||
| data.events[].type | string | No | match | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| 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 |
| 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/live?hl=cs-CZ" \
-H "x-api-key: $CRAWLORA_API_KEY"