Flashscore API endpoint
Returns every season of the competition that owns a tournament stage: season label, season tournament id, whether it is current, the winning participants and the stage ids of each season, plus the requested stage's names and page tabs (summary, odds, standings, results, fixtures, draw, news). Get a stage id from tournament_stage_id in the competition block of team, player and match event lists, then reuse the stage ids returned here for older seasons. Pass a stage id, not a season tournament id or a competition id: other ids can return an unrelated competition, so check the returned tournament name. An unknown stage id returns not found.
/flashscore/tournament-archive-seasonsReturns every season of the competition that owns a tournament stage: the season label, the season-level tournament id, whether the season is current, the winning participants and the stage ids of each season, plus the requested stage's names and page tabs. Unlike /api/v1/flashscore/tournament-seasons, which reads an archive page by competition path, this works from ids and returns ids you can chain.
Query parameters:
stage_id (required): eight-character tournament stage id. Get it from competition.tournament_stage_id in /api/v1/flashscore/team-results, /api/v1/flashscore/team-fixtures, /api/v1/flashscore/player-results and /api/v1/flashscore/player-fixtures, or from stage_ids of a season returned here. Do not pass a season tournament_id or a competition id: Flashscore ids from different id spaces can collide, so a wrong id can return an unrelated competition. Check stage.country, stage.tournament and tournament_template_id in the response. An unknown id returns 404.Response fields:
stage_id, tournament_template_id (the competition id), league_key (<country id>_<competition id>).stage: the requested stage: id, type_id, country, tournament, name (for example Main, League phase, Singles - Main), group, tabs, start_estimated and end_estimated (ISO times) and is_final. tabs lists the page tabs of the stage as {id, name}: SU (summary), OD (odds), TA (standings), RE (results), FI (fixtures), DR (draw) and NF (news). Knockout and tennis stages have DR instead of TA.season_count and seasons, newest first. Each season has tournament_id (the season-level id used by /api/v1/flashscore/tournament-outright-odds), season (2026/2027 or 2026), start_year, end_year, is_current, is_requested (true for the season of the stage you passed), winners ({id, name, slug}, empty for a season still in progress) and stage_ids (the season's stage ids; pass one back to this endpoint to inspect an older season's stage). Winners are team or player ids that work with the team and player endpoints.A Premier League stage returned 115 seasons back to 1901/1902 and a Champions League stage 56 seasons; a tennis tournament returned 15.
Example response (shortened):
{"code":200,"msg":"OK","data":{"source_url":"https://2.ds.lsapp.eu/pq_graphql?_hash=lph&projectId=2&tournamentStageId=CfoA8Dmm","stage_id":"CfoA8Dmm","tournament_template_id":"dYlOSQOD","league_key":"198_dYlOSQOD","stage":{"id":"CfoA8Dmm","type_id":2,"country":"England","tournament":"Premier League","name":"Main","tabs":[{"id":"SU","name":"summary"},{"id":"OD","name":"odds"}],"start_estimated":"2026-08-21T19:00:00Z","end_estimated":"2027-05-30T15:00:00Z","is_final":true},"season_count":115,"seasons":[{"tournament_id":"SY30SsKF","season":"2026/2027","start_year":"2026","end_year":"2027","is_current":true,"is_requested":true,"winners":[],"stage_ids":["CfoA8Dmm"]},{"tournament_id":"KKay4EE8","season":"2025/2026","start_year":"2025","end_year":"2026","is_current":false,"is_requested":false,"winners":[{"id":"hA1Zm19f","name":"Arsenal","slug":"arsenal"}],"stage_ids":["OEEq9Yvp"]}]}}
| Field | Filled in, of 115 checked | Values in the sample |
|---|---|---|
| tournament_id | 115 | |
| season | 115 | “2026/2027” and 114 other values |
| start_year | 115 | 1,901 to 2,026, median 1,969 |
| end_year | 115 | 1,902 to 2,027, median 1,970 |
| is_current | 115 | true in 1 of 115 |
| is_requested | 115 | true in 1 of 115 |
| winners | 114 | median 1 entry |
| stage_ids | 115 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| stage_id | string | Yes | Eight-character tournament stage id (tournament_stage_id of an event competition block) | CfoA8Dmm | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/flashscore/tournament-archive-seasons?stage_id=CfoA8Dmm" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://2.ds.lsapp.eu/pq_graphql?_hash=lph&projectId=2&tournamentStageId=CfoA8Dmm",
"stage_id": "CfoA8Dmm",
"tournament_template_id": "dYlOSQOD",
"league_key": "198_dYlOSQOD",
"stage": {
"id": "CfoA8Dmm",
"type_id": 2,
"country": "England",
"tournament": "Premier League",
"name": "Main",
"tabs": [
{
"id": "SU",
"name": "summary"
},
{
"id": "OD",
"name": "odds"
}
],
"start_estimated": "2026-08-21T19:00:00Z",
"end_estimated": "2027-05-30T15:00:00Z",
"is_final": true
},
"season_count": 115,
"seasons": [
{
"tournament_id": "SY30SsKF",
"season": "2026/2027",
"start_year": "2026",
"end_year": "2027",
"is_current": true,
"is_requested": true,
"winners": [],
"stage_ids": [
"CfoA8Dmm"
]
},
{
"tournament_id": "KKay4EE8",
"season": "2025/2026",
"start_year": "2025",
"end_year": "2026",
"is_current": false,
"is_requested": false,
"winners": [
{
"id": "hA1Zm19f",
"name": "Arsenal",
"slug": "arsenal"
}
],
"stage_ids": [
"OEEq9Yvp"
]
}
]
}
}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 | flashscore.TournamentArchiveSeasonsResponse | No | ||||
| data.league_key | string | No | ||||
| data.season_count | integer | No | ||||
| data.seasons | array | No | ||||
| data.seasons[].end_year | string | No | ||||
| data.seasons[].is_current | boolean | No | ||||
| data.seasons[].is_requested | boolean | No | ||||
| data.seasons[].season | string | No | ||||
| data.seasons[].stage_ids | array | No | ||||
| data.seasons[].start_year | string | No | ||||
| data.seasons[].tournament_id | string | No | TournamentID is the season-level tournament id (the tournament_id of event competition blocks), accepted by flashscore-tournament-outright-odds. | |||
| data.seasons[].winners | array | No | ||||
| data.seasons[].winners[].id | string | No | ||||
| data.seasons[].winners[].name | string | No | ||||
| data.seasons[].winners[].slug | string | No | ||||
| data.source_url | string | No | ||||
| data.stage | flashscore.ArchiveStage | No | ||||
| data.stage.country | string | No | ||||
| data.stage.end_estimated | string | No | ||||
| data.stage.group | string | No | ||||
| data.stage.id | string | No | ||||
| data.stage.is_final | boolean | No | ||||
| data.stage.name | string | No | ||||
| data.stage.start_estimated | string | No | ||||
| data.stage.tabs | array | No | ||||
| data.stage.tabs[].id | string | No | SU, OD, TA, RE, FI, DR, NF | |||
| data.stage.tabs[].name | string | No | ||||
| data.stage.tournament | string | No | ||||
| data.stage.type_id | integer | No | ||||
| data.stage_id | string | No | ||||
| data.tournament_template_id | string | No | ||||
| 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 |
| 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/flashscore/tournament-archive-seasons?stage_id=CfoA8Dmm" \
-H "x-api-key: $CRAWLORA_API_KEY"