SofaScore API endpoint
Returns a team's best players for every statistic category SofaScore ranks within the team and season (rating, goals, assists, expected goals, tackles, saves and more for football; points, rebounds and assists for basketball), each as a ranked list with player, team and value. The category set depends on the sport, so the response lists every category it holds. The `type` enum accepts `overall`, `regular_season` and `playoffs`: football competitions publish `overall`, the NBA publishes `regular_season` and `playoffs`, and a type the competition does not publish answers 404. Optional `limit` caps the rows per category (up to 50); the payload is large without it.
/sofascore/team-top-playersQuery parameters:
id: required. Numeric SofaScore team id, e.g. 17. Get it from sofascore-search or sofascore-team-events.tournament_id: required. Numeric SofaScore unique-tournament (competition) id from sofascore-team-player-statistics-seasons, e.g. 17.season: required. Numeric SofaScore season id from sofascore-team-player-statistics-seasons, e.g. 76986.type: optional enum. Allowed values: overall, regular_season, playoffs. Defaults to overall.limit: optional integer, 1 to 50. Caps the rows per category; omit it to return every row.Notable response behavior:
type is sport-defined: football competitions publish overall only (regular_season and playoffs returned 404), the NBA publishes regular_season and playoffs (overall returned 404). sofascore-team-player-statistics-seasons shows what a season offers.rank is the position in that list; a list is not always sorted by value (for example conceded-goal categories).value is the category's headline number and details holds secondary numbers. The payload is large (0.4 to 0.9 MB upstream), so pass limit to shrink the response.type or limit returns 400. Returns 404 when SofaScore has no top players of that type for the team, competition and season.| Field | Filled in, of 26 checked | Values in the sample |
|---|---|---|
| key | 26 | |
| count | 26 | 2 to 26, median 22 |
| players | 26 | median 22 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore team id | 17 | |
| tournament_id | string | Yes | Numeric SofaScore unique-tournament (competition) id from team-player-statistics-seasons | 17 | |
| season | string | Yes | Numeric SofaScore season id from team-player-statistics-seasons | 96668 | |
| type | string | No | Statistics scope Allowed values: overall, regular_season, playoffs. | ||
| limit | integer | No | Rows per category, 1 to 50. Omit to return every row Minimum: 1. Maximum: 50. | 5 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/team-top-players?id=17&tournament_id=17&season=96668&type=overall&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"team_id": 17,
"tournament_id": 17,
"season_id": 96668,
"type": "overall",
"sport": "football",
"category_count": 1,
"source_url": "https://api.sofascore.com/api/v1/team/17/unique-tournament/17/season/96668/top-players/overall",
"fetched_at": "2026-10-07T00:00:00Z",
"categories": [
{
"key": "goals",
"count": 1,
"players": [
{
"rank": 1,
"value": 5,
"appearances": 5,
"played_enough": true,
"player": {
"id": 839956,
"name": "Erling Haaland",
"short_name": "E. Haaland",
"slug": "erling-haaland",
"position": "F"
},
"team": {
"id": 17,
"name": "Manchester City",
"short_name": "Man City",
"slug": "manchester-city"
}
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.teamTopPlayersResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.TeamTopPlayersResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].count | integer | No | ||||
| data.categories[].key | string | No | goals | |||
| data.categories[].players | array | No | ||||
| data.categories[].players[].appearances | integer | No | 5 | |||
| data.categories[].players[].details | object | No | ||||
| data.categories[].players[].played_enough | boolean | No | ||||
| data.categories[].players[].player | sofascore.PlayerRef | No | ||||
| data.categories[].players[].player.country | string | No | Spain | Player's country. | ||
| data.categories[].players[].player.id | integer | No | 855833 | SofaScore player id. Use it with the player endpoints. | ||
| data.categories[].players[].player.name | string | No | Ferran Torres | Player's full name. | ||
| data.categories[].players[].player.position | string | No | F | Position code, for example G, D, M or F. | ||
| data.categories[].players[].player.short_name | string | No | F. Torres | Shortened name, for example "F. Torres". | ||
| data.categories[].players[].player.slug | string | No | ferran-torres | URL slug of the player on SofaScore. | ||
| data.categories[].players[].rank | integer | No | 1 | |||
| data.categories[].players[].team | sofascore.TeamRef | No | ||||
| data.categories[].players[].team.country | string | No | Spain | Country the team belongs to. | ||
| data.categories[].players[].team.id | integer | No | 2817 | SofaScore team id. Use it with the team endpoints. | ||
| data.categories[].players[].team.name | string | No | FC Barcelona | Full team name. | ||
| data.categories[].players[].team.national | boolean | No | True for a national team. | |||
| data.categories[].players[].team.short_name | string | No | Barcelona | Shortened team name. | ||
| data.categories[].players[].team.slug | string | No | barcelona | URL slug of the team on SofaScore. | ||
| data.categories[].players[].value | number | No | 5 | |||
| data.category_count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.season_id | integer | No | 96668 | |||
| data.source_url | string | No | ||||
| data.sport | string | No | football | |||
| data.team_id | integer | No | 17 | |||
| data.tournament_id | integer | No | 17 | |||
| data.type | string | No | overall | |||
| 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/team-top-players?id=17&tournament_id=17&season=96668&type=overall&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"