LoL Esports API endpoint
Returns the League of Legends esports calendar since 2011, newest first: every season with its splits (start and end time, region) and the tournaments played in each split with their league. Use a tournament `id` with lolesports-standings or lolesports-completed-events and a league `id` with lolesports-tournaments. `season_id` (taken from an earlier response) returns one season; `region` keeps only splits of one region and `league_id` keeps only that league's tournaments, both applied after the fetch. The unfiltered list is large (about 300 KB). A season id that does not exist returns not found.
/lolesports/seasonsHeader: x-api-key required.
Parameters:
hl: optional language for names and labels; 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. Defaults to en-US.season_id: optional numeric season id taken from an earlier response; returns that one season. An id that does not exist returns not found.region: optional, case-insensitive; keeps only the splits of one region. Allowed values: AMERICAS, BRAZIL, CHINA, COMMONWEALTH OF INDEPENDENT STATES, EMEA, EUROPE, GLOBAL, HONG KONG, MACAU, TAIWAN, INTERNATIONAL, JAPAN, KOREA, LATIN AMERICA, LATIN AMERICA NORTH, LATIN AMERICA SOUTH, NORTH AMERICA, OCEANIA, REGIONAL, SOUTHEAST ASIA, TURKEY, VIETNAM. Any other value returns an invalid-parameter error.league_id: optional numeric league id from lolesports-leagues; keeps only that league's tournaments and drops splits and seasons with none.Notable response behavior:
id, name, slug, start_time, end_time, split_count and splits; each split has id, name, slug, description, region, start_time, end_time and tournaments (id, name and the league with id, name, image_url). region takes the same values as the region parameter.region and league_id are applied after the fetch (the upstream has no such filters); a valid filter that matches nothing returns an empty seasons list. season_id is sent to the upstream, so it also makes the response much smaller than the unfiltered one (about 300 KB, 19 seasons on 2026-10-28).id with lolesports-standings or lolesports-completed-events.| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| id | 1 | |
| name | 1 | “lolesports_2026” |
| slug | 1 | |
| start_time | 1 | 2026-01-01 |
| end_time | 1 | 2026-12-31 |
| split_count | 1 | 6 |
| splits | 1 | median 6 entries |
| 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. | |
| season_id | string | No | Numeric season id from an earlier lolesports-seasons response; omit for every season | 115547545029543948 | |
| region | string | No | Split region, case-insensitive; one of AMERICAS, BRAZIL, CHINA, COMMONWEALTH OF INDEPENDENT STATES, EMEA, EUROPE, GLOBAL, HONG KONG, MACAU, TAIWAN, INTERNATIONAL, JAPAN, KOREA, LATIN AMERICA, LATIN AMERICA NORTH, LATIN AMERICA SOUTH, NORTH AMERICA, OCEANIA, REGIONAL, SOUTHEAST ASIA, TURKEY, VIETNAM | KOREA | |
| league_id | string | No | Numeric league id from lolesports-leagues; keeps only that league's tournaments | 98767991302996019 |
curl -X GET "https://api.crawlora.net/api/v1/lolesports/seasons?hl=cs-CZ" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://esports-api.lolesports.com/persisted/gw/getSeasons?hl=en-US&id=115547545029543948",
"fetched_at": "2026-10-28T10:00:00Z",
"season_id": "115547545029543948",
"region": "REGIONAL",
"count": 1,
"seasons": [
{
"id": "115547545029543948",
"name": "lolesports_2026",
"slug": "lolesports_2026",
"start_time": "2026-01-01T08:00:00Z",
"end_time": "2026-12-31T22:59:00Z",
"split_count": 1,
"splits": [
{
"id": "115548016979679447",
"name": "Split 3",
"slug": "split_3",
"region": "REGIONAL",
"start_time": "2026-07-19T22:00:00Z",
"end_time": "2026-10-05T22:00:00Z",
"tournaments": [
{
"id": "115548147890329817",
"name": "Split 3 2026",
"league": {
"id": "98767991310872058",
"name": "LCK",
"image_url": "http://static.lolesports.com/leagues/lck-color-on-black.png"
}
}
]
}
]
}
]
}
}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.SeasonsResponse | No | ||||
| data.count | integer | No | 2 | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.league_id | string | No | 98767991302996019 | |||
| data.region | string | No | ||||
| data.season_id | string | No | 115547545029543948 | |||
| data.seasons | array | No | ||||
| data.seasons[].end_time | string | No | 2026-12-31T22:59:00Z | |||
| data.seasons[].id | string | No | 115547545029543948 | |||
| data.seasons[].name | string | No | lolesports_2026 | |||
| data.seasons[].slug | string | No | lolesports_2026 | |||
| data.seasons[].split_count | integer | No | 6 | |||
| data.seasons[].splits | array | No | ||||
| data.seasons[].splits[].description | string | No | ||||
| data.seasons[].splits[].end_time | string | No | 2026-09-27T22:00:00Z | |||
| data.seasons[].splits[].id | string | No | 115548016979679447 | |||
| data.seasons[].splits[].name | string | No | Split 3 | |||
| data.seasons[].splits[].region | string | No | REGIONAL | |||
| data.seasons[].splits[].slug | string | No | split_3 | |||
| data.seasons[].splits[].start_time | string | No | 2026-07-19T22:00:00Z | |||
| data.seasons[].splits[].tournaments | array | No | ||||
| data.seasons[].splits[].tournaments[].id | string | No | 115548681802226458 | |||
| data.seasons[].splits[].tournaments[].league | lolesports.SeasonLeague | No | ||||
| data.seasons[].splits[].tournaments[].league.id | string | No | 98767991302996019 | |||
| data.seasons[].splits[].tournaments[].league.image_url | string | No | ||||
| data.seasons[].splits[].tournaments[].league.name | string | No | LEC | |||
| data.seasons[].splits[].tournaments[].name | string | No | Summer 2026 | |||
| data.seasons[].start_time | string | No | 2026-01-01T08: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 |
| 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/seasons?hl=cs-CZ" \
-H "x-api-key: $CRAWLORA_API_KEY"