SofaScore API endpoint
Returns what the tournament-player-statistics table of a football competition season can be filtered by: the season's teams (ids for the `team` filter), the nationality codes (for the `nationality` filter; SofaScore uses `EN`, `SX`, `WA` and `NX` for the home nations), the position codes `G`, `D`, `M` and `F` (for the `position` filter), and the statistic columns of each `group` value (`summary`, `attack`, `defence`, `passing`, `goalkeeper`). Other sports answer 404. Get `id` from search and `season` from tournament-seasons.
/sofascore/tournament-statistics-infoQuery parameters:
id: required. Numeric SofaScore unique-tournament (competition) id of a football competition, e.g. 17 for the Premier League, 7 for the UEFA Champions League.season: required. Numeric SofaScore season id from sofascore/tournament-seasons, e.g. 96668.Notable response behavior:
teams are the teams whose id the team filter of sofascore/tournament-player-statistics accepts. nationalities lists the code values its nationality filter accepts, sorted by code. SofaScore uses its own codes for the home nations: EN England, SX Scotland, WA Wales, NX Northern Ireland. The set belongs to the season (the 2026/27 Premier League lists 57 and the 2025/26 Champions League 81), so read it per season. A code not in the list returns no rows.positions lists the position filter codes: G goalkeeper, D defender, M midfielder, F forward. SofaScore does not publish this list; the four codes were verified against the Premier League table (each returned only that position, and any other code returned no rows).groups maps each group value of the table to its statistic columns: summary, attack, defence, passing, goalkeeper. detailed_groups lists the further statistic names SofaScore tracks per area (attack, defence, and so on); the table accepts them neither as group nor as order values, so they are reference only.Example response (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"season_id": 96668,
"teams": [ { "id": 42, "name": "Arsenal", "short_name": "Arsenal", "slug": "arsenal" } ],
"nationalities": [ { "code": "AR", "name": "Argentina" }, { "code": "EN", "name": "England" } ],
"positions": [
{ "code": "G", "name": "Goalkeeper" },
{ "code": "D", "name": "Defender" },
{ "code": "M", "name": "Midfielder" },
{ "code": "F", "name": "Forward" }
],
"groups": {
"summary": ["goals", "expectedGoals", "successfulDribbles", "tackles", "assists", "accuratePassesPercentage", "rating"],
"goalkeeper": ["saves", "cleanSheet", "penaltySave", "savedShotsFromInsideTheBox", "runsOut", "rating"]
},
"detailed_groups": { "attack": ["goals", "expectedGoals", "bigChancesMissed", "rating"] },
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/season/96668/statistics/info",
"fetched_at": "2026-10-07T14:00:00Z"
}
}
| Field | Filled in, of 57 checked | Values in the sample |
|---|---|---|
| code | 57 | |
| name | 57 | “Argentina” and 56 other values |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore unique-tournament (competition) id of a football competition | 17 | |
| season | string | Yes | Numeric SofaScore season id | 96668 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/tournament-statistics-info?id=17&season=96668" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"season_id": 96668,
"teams": [
{
"id": 42,
"name": "Arsenal",
"short_name": "Arsenal",
"slug": "arsenal"
}
],
"nationalities": [
{
"code": "AR",
"name": "Argentina"
},
{
"code": "EN",
"name": "England"
}
],
"positions": [
{
"code": "G",
"name": "Goalkeeper"
},
{
"code": "D",
"name": "Defender"
},
{
"code": "M",
"name": "Midfielder"
},
{
"code": "F",
"name": "Forward"
}
],
"groups": {
"summary": [
"goals",
"expectedGoals",
"successfulDribbles",
"tackles",
"assists",
"accuratePassesPercentage",
"rating"
],
"goalkeeper": [
"saves",
"cleanSheet",
"penaltySave",
"savedShotsFromInsideTheBox",
"runsOut",
"rating"
]
},
"detailed_groups": {
"attack": [
"goals",
"expectedGoals",
"bigChancesMissed",
"rating"
]
},
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/season/96668/statistics/info",
"fetched_at": "2026-10-07T14:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.tournamentStatisticsInfoResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.TournamentStatisticsInfoResponse | No | ||||
| data.detailed_groups | object | No | DetailedGroups lists the further per-area statistic names the season tracks (upstream's "detailed" group); the table does not take them as `group` or `order` values. | |||
| data.fetched_at | string | No | ||||
| data.groups | object | No | Groups lists the statistic columns of each `group` value. | |||
| data.nationalities | array | No | Nationalities are the codes the `nationality` filter accepts. SofaScore uses its own codes for the home nations (EN England, SX Scotland, WA Wales, NX Northern Ireland). | |||
| data.nationalities[].code | string | No | EN | |||
| data.nationalities[].name | string | No | England | |||
| data.positions | array | No | Positions are the codes the `position` filter accepts. The set is fixed by this API (verified: G, D, M and F each filter the table; any other code returns no rows). | |||
| data.positions[].code | string | No | EN | |||
| data.positions[].name | string | No | England | |||
| data.season_id | integer | No | ||||
| data.source_url | string | No | ||||
| data.teams | array | No | Teams are the teams whose id the `team` filter accepts. TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.tournament_id | integer | No | ||||
| 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-statistics-info?id=17&season=96668" \
-H "x-api-key: $CRAWLORA_API_KEY"