SofaScore API endpoint
Returns a competition's metadata (name, sport, category, tier, title holder, most titles, current season dates, divisions above and below, linked competitions). When `season` is given it also returns that season's aggregates: number of competitors and, for football competitions, goals, home wins, away wins, draws, yellow and red cards and the promoted teams. Get `id` from search and `season` from tournament-seasons.
/sofascore/tournament-infoQuery parameters:
id: required. Numeric SofaScore unique-tournament (competition) id, e.g. 17 for the Premier League (find ids with sofascore/search).season: optional. Numeric SofaScore season id from sofascore/tournament-seasons, e.g. 96668. Omit it for competition metadata only.Notable response behavior:
tournament carries the name, sport, category, gender, tier, the current title_holder, title_holder_titles, most_titles with most_titles_teams, the current season's start and end, whether the competition has rounds, groups or playoff series, and related competitions: upper_divisions, lower_divisions and linked_tournaments (for the NBA these include its preseason and the G League).season appears only when season was requested. number_of_competitors is published for every sport; goals, home_team_wins, away_team_wins, draws, yellow_cards, red_cards and the newcomers_* lists are published for football competitions and are omitted (not zero) for other sports such as basketball.season is given.Example response (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"season_id": 96668,
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17",
"season_source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/season/96668/info",
"fetched_at": "2026-10-07T14:00:00Z",
"tournament": {
"id": 17,
"name": "Premier League",
"slug": "premier-league",
"sport": "football",
"category": "England",
"gender": "M",
"tier": 1,
"title_holder": { "id": 42, "name": "Arsenal", "short_name": "Arsenal", "slug": "arsenal", "country": "England" },
"title_holder_titles": 14,
"most_titles": 20,
"has_rounds": true,
"has_groups": false,
"has_playoff_series": false,
"lower_divisions": [{ "id": 18, "name": "Championship", "slug": "championship" }]
},
"season": {
"id": 96668,
"name": "Premier League 26/27",
"year": "26/27",
"number_of_competitors": 20,
"goals": 141,
"home_team_wins": 18,
"away_team_wins": 16,
"draws": 16,
"yellow_cards": 192,
"red_cards": 6
}
}
}
| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| id | 3 | |
| name | 3 | “Ipswich Town” and 2 other values |
| short_name | 3 | “Ipswich” and 2 other values |
| slug | 3 | |
| country | 3 | “England” |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore unique-tournament (competition) id | 17 | |
| season | string | No | Numeric SofaScore season id. Omit for competition metadata only | 96668 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/tournament-info?id=17" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"season_id": 96668,
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17",
"season_source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/season/96668/info",
"fetched_at": "2026-10-07T14:00:00Z",
"tournament": {
"id": 17,
"name": "Premier League",
"slug": "premier-league",
"sport": "football",
"category": "England",
"gender": "M",
"tier": 1,
"title_holder": {
"id": 42,
"name": "Arsenal",
"short_name": "Arsenal",
"slug": "arsenal",
"country": "England"
},
"title_holder_titles": 14,
"most_titles": 20,
"has_rounds": true,
"has_groups": false,
"has_playoff_series": false,
"lower_divisions": [
{
"id": 18,
"name": "Championship",
"slug": "championship"
}
]
},
"season": {
"id": 96668,
"name": "Premier League 26/27",
"year": "26/27",
"number_of_competitors": 20,
"goals": 141,
"home_team_wins": 18,
"away_team_wins": 16,
"draws": 16,
"yellow_cards": 192,
"red_cards": 6
}
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.tournamentInfoResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.TournamentInfoResponse | No | ||||
| data.fetched_at | string | No | ||||
| data.season | sofascore.SeasonInfo | No | ||||
| data.season.away_team_wins | integer | No | ||||
| data.season.draws | integer | No | ||||
| data.season.goals | integer | No | ||||
| data.season.home_team_wins | integer | No | ||||
| data.season.id | integer | No | 96668 | |||
| data.season.name | string | No | Premier League 26/27 | |||
| data.season.newcomers_lower_division | array | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.season.newcomers_other | array | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.season.newcomers_upper_division | array | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.season.number_of_competitors | integer | No | ||||
| data.season.red_cards | integer | No | ||||
| data.season.year | string | No | 26/27 | |||
| data.season.yellow_cards | integer | No | ||||
| data.season_id | integer | No | 96668 | |||
| data.season_source_url | string | No | ||||
| data.source_url | string | No | ||||
| data.tournament | sofascore.TournamentDetail | No | ||||
| data.tournament.category | string | No | England | |||
| data.tournament.current_season_end | string | No | 2027-05-23T00:00:00Z | |||
| data.tournament.current_season_start | string | No | 2026-08-21T00:00:00Z | |||
| data.tournament.gender | string | No | M | |||
| data.tournament.has_groups | boolean | No | ||||
| data.tournament.has_playoff_series | boolean | No | ||||
| data.tournament.has_rounds | boolean | No | ||||
| data.tournament.id | integer | No | 17 | |||
| data.tournament.linked_tournaments | array | No | ||||
| data.tournament.linked_tournaments[].id | integer | No | 18 | |||
| data.tournament.linked_tournaments[].name | string | No | Championship | |||
| data.tournament.linked_tournaments[].slug | string | No | championship | |||
| data.tournament.lower_divisions | array | No | ||||
| data.tournament.lower_divisions[].id | integer | No | 18 | |||
| data.tournament.lower_divisions[].name | string | No | Championship | |||
| data.tournament.lower_divisions[].slug | string | No | championship | |||
| data.tournament.most_titles | integer | No | ||||
| data.tournament.most_titles_teams | array | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.tournament.name | string | No | Premier League | |||
| data.tournament.slug | string | No | premier-league | |||
| data.tournament.sport | string | No | football | |||
| data.tournament.tier | integer | No | ||||
| data.tournament.title_holder | sofascore.TeamRef | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.tournament.title_holder_titles | integer | No | ||||
| data.tournament.upper_divisions | array | No | ||||
| data.tournament.upper_divisions[].id | integer | No | 18 | |||
| data.tournament.upper_divisions[].name | string | No | Championship | |||
| data.tournament.upper_divisions[].slug | string | No | championship | |||
| data.tournament_id | integer | No | 17 | |||
| 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-info?id=17" \
-H "x-api-key: $CRAWLORA_API_KEY"