SofaScore API endpoint
Returns one page (10 seasons, newest first) of a competition's past winners: the year, the season id and the winning team or player. Follow `has_next_page` and pass `page` (zero-based) for older seasons; a page past the last one and an unknown competition both answer 404. Get `id` from search; the returned `season_id` works with every season-scoped endpoint.
/sofascore/tournament-winnersQuery parameters:
id: required. Numeric SofaScore unique-tournament (competition) id, e.g. 17 for the Premier League, 2480 for Roland Garros (men's singles).page: optional integer, 0 or more. Zero-based page number. Defaults to 0. A page holds 10 winners (fewer on the last page).Notable response behavior:
/winners and /winners/{n}); the Premier League has pages 0 to 3 (the last holds the earliest seasons) and has_next_page is false on the last page.year is SofaScore's year label for the season (the year it ended, 2026 for 2025/26). season_id is the season id to use with sofascore/tournament-teams, sofascore/tournament-player-of-the-season, sofascore/tournament-team-of-the-season, sofascore/standings and the other season endpoints. Some competitions skip years (the FIFA World Cup lists 2026, 2022, 2018).page is rejected with 400.Example response (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"page": 0,
"has_next_page": true,
"count": 10,
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/winners",
"fetched_at": "2026-10-07T14:00:00Z",
"winners": [
{ "year": 2026, "season_id": 76986, "winner": { "id": 42, "name": "Arsenal", "short_name": "Arsenal", "slug": "arsenal" } },
{ "year": 2025, "season_id": 61627, "winner": { "id": 44, "name": "Liverpool FC", "short_name": "Liverpool", "slug": "liverpool" } }
]
}
}
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| year | 10 | 2,017 to 2,026, median 2,021 |
| season_id | 10 | |
| winner | 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore unique-tournament (competition) id | 17 | |
| page | integer | No | 0 | Zero-based page number. Defaults to 0 Minimum: 0. | 0 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/tournament-winners?id=17&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"page": 0,
"has_next_page": true,
"count": 10,
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/winners",
"fetched_at": "2026-10-07T14:00:00Z",
"winners": [
{
"year": 2026,
"season_id": 76986,
"winner": {
"id": 42,
"name": "Arsenal",
"short_name": "Arsenal",
"slug": "arsenal"
}
},
{
"year": 2025,
"season_id": 61627,
"winner": {
"id": 44,
"name": "Liverpool FC",
"short_name": "Liverpool",
"slug": "liverpool"
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.tournamentWinnersResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.TournamentWinnersResponse | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.has_next_page | boolean | No | ||||
| data.page | integer | No | ||||
| data.source_url | string | No | ||||
| data.tournament_id | integer | No | ||||
| data.winners | array | No | ||||
| data.winners[].season_id | integer | No | 76986 | SeasonID is the season id to pass to tournament-seasons-based endpoints. | ||
| data.winners[].winner | sofascore.TeamRef | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.winners[].year | integer | No | 2026 | Year is the upstream year label of the season (the year it ended). | ||
| msg | string | No | OK |
| 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/sofascore/tournament-winners?id=17&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"