SofaScore API endpoint
Returns one team of the week: the formation and the selected players with their SofaScore rating, team and, for round and weekly selections, the match the rating was earned in. Get the `period` id from sofascore-team-of-the-week-periods; a period that does not belong to the given competition season is rejected with 400.
/sofascore/team-of-the-weekQuery parameters:
id: required. Numeric SofaScore unique-tournament (competition) id, e.g. 17 for the Premier League.season: required. Numeric SofaScore season id from sofascore/tournament-seasons, e.g. 96668.period: required. Numeric period id from sofascore/team-of-the-week-periods, e.g. 29321.Notable response behavior:
period echoes the period's metadata (type is round, timespan or season). A period id that is not in the competition season's own period list is rejected with 400: SofaScore serves period ids globally, so an id from another competition would otherwise return that other competition's team.formation is SofaScore's formation string, for example 3-2-4-1 for football or 2-3 for the NBA. players are in selection order.rating is SofaScore's numeric rating (omitted if SofaScore sends none). event is the match behind the selection and is present for round and weekly periods; season-level selections have no event.Example response (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"season_id": 96668,
"period": { "id": 29321, "type": "round", "name": "round", "sequence": 5, "round": 5, "round_name": "5" },
"formation": "3-2-4-1",
"count": 1,
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/season/96668/team-of-the-week/29321",
"fetched_at": "2026-10-07T14:00:00Z",
"players": [
{
"order": 1,
"rating": 8.6,
"player": { "id": 964753, "name": "Senne Lammens", "slug": "senne-lammens", "position": "G" },
"jersey_number": "1",
"team": { "id": 35, "name": "Manchester United", "slug": "manchester-united" },
"event": {
"id": 16363652,
"slug": "fulham-manchester-united",
"status": { "code": 100, "description": "Ended", "type": "finished" },
"tournament": { "id": 1, "name": "Premier League", "unique_tournament_id": 17 },
"home_team": { "id": 43, "name": "Fulham" },
"away_team": { "id": 35, "name": "Manchester United" }
}
}
]
}
}
| Field | Filled in, of 11 checked | Values in the sample |
|---|---|---|
| order | 11 | 1 to 11, median 6 |
| rating | 11 | 8 to 9.8, median 8.2 |
| player | 11 | |
| jersey_number | 11 | 1 to 44, median 10 |
| team | 11 | |
| event | 11 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore unique-tournament (competition) id | 17 | |
| season | string | Yes | Numeric SofaScore season id | 96668 | |
| period | string | Yes | Numeric period id from sofascore-team-of-the-week-periods | 29321 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/team-of-the-week?id=17&season=96668&period=29321" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"season_id": 96668,
"period": {
"id": 29321,
"type": "round",
"name": "round",
"sequence": 5,
"round": 5,
"round_name": "5"
},
"formation": "3-2-4-1",
"count": 1,
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/season/96668/team-of-the-week/29321",
"fetched_at": "2026-10-07T14:00:00Z",
"players": [
{
"order": 1,
"rating": 8.6,
"player": {
"id": 964753,
"name": "Senne Lammens",
"slug": "senne-lammens",
"position": "G"
},
"jersey_number": "1",
"team": {
"id": 35,
"name": "Manchester United",
"slug": "manchester-united"
},
"event": {
"id": 16363652,
"slug": "fulham-manchester-united",
"status": {
"code": 100,
"description": "Ended",
"type": "finished"
},
"tournament": {
"id": 1,
"name": "Premier League",
"unique_tournament_id": 17
},
"home_team": {
"id": 43,
"name": "Fulham"
},
"away_team": {
"id": 35,
"name": "Manchester United"
}
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.teamOfTheWeekResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.TeamOfTheWeekResponse | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.formation | string | No | 3-2-4-1 | |||
| data.period | sofascore.TeamOfTheWeekPeriod | No | ||||
| data.period.created_at | string | No | ||||
| data.period.date_from | string | No | ||||
| data.period.date_to | string | No | ||||
| data.period.id | integer | No | 29321 | |||
| data.period.name | string | No | round | |||
| data.period.round | integer | No | ||||
| data.period.round_name | string | No | ||||
| data.period.sequence | integer | No | ||||
| data.period.type | string | No | round | |||
| data.players | array | No | ||||
| data.players[].event | sofascore.EventSummary | No | ||||
| data.players[].event.away_score | object | No | Away side's score, when available. | |||
| data.players[].event.away_score.current | integer | No | Current score, which is the final score once the match is over. | |||
| data.players[].event.away_score.period1 | integer | No | Score in the first period. | |||
| data.players[].event.away_score.period2 | integer | No | Score in the second period. | |||
| data.players[].event.away_team | object | No | Away side. | |||
| data.players[].event.away_team.country | string | No | Spain | Country the team belongs to. | ||
| data.players[].event.away_team.id | integer | No | 2817 | SofaScore team id. Use it with the team endpoints. | ||
| data.players[].event.away_team.name | string | No | FC Barcelona | Full team name. | ||
| data.players[].event.away_team.national | boolean | No | True for a national team. | |||
| data.players[].event.away_team.short_name | string | No | Barcelona | Shortened team name. | ||
| data.players[].event.away_team.slug | string | No | barcelona | URL slug of the team on SofaScore. | ||
| data.players[].event.home_score | object | No | Home side's score, when available. | |||
| data.players[].event.home_score.current | integer | No | Current score, which is the final score once the match is over. | |||
| data.players[].event.home_score.period1 | integer | No | Score in the first period. | |||
| data.players[].event.home_score.period2 | integer | No | Score in the second period. | |||
| data.players[].event.home_team | object | No | Home side. | |||
| data.players[].event.home_team.country | string | No | Spain | Country the team belongs to. | ||
| data.players[].event.home_team.id | integer | No | 2817 | SofaScore team id. Use it with the team endpoints. | ||
| data.players[].event.home_team.name | string | No | FC Barcelona | Full team name. | ||
| data.players[].event.home_team.national | boolean | No | True for a national team. | |||
| data.players[].event.home_team.short_name | string | No | Barcelona | Shortened team name. | ||
| data.players[].event.home_team.slug | string | No | barcelona | URL slug of the team on SofaScore. | ||
| data.players[].event.id | integer | No | 14025013 | SofaScore event id. Use it with the event endpoints. | ||
| data.players[].event.slug | string | No | URL slug of the match on SofaScore. | |||
| data.players[].event.start_time | string | No | 2025-08-15T19:00:00Z | Start time in UTC (RFC 3339). | ||
| data.players[].event.start_timestamp | integer | No | Start time as a Unix timestamp in seconds. | |||
| data.players[].event.status | object | No | Current status of the match. | |||
| data.players[].event.status.code | integer | No | SofaScore's numeric status code, for example 0 for not started and 100 for ended. | |||
| data.players[].event.status.description | string | No | Ended | Status as displayed, for example "Ended". | ||
| data.players[].event.status.type | string | No | finished | Status group, for example `notstarted`, `inprogress` or `finished`. | ||
| data.players[].event.tournament | object | No | Tournament and parent competition the match belongs to. | |||
| data.players[].event.tournament.category | string | No | England | Category the tournament sits under, usually a country or region. | ||
| data.players[].event.tournament.id | integer | No | SofaScore id of the tournament the match is filed under. The seasons, standings and round endpoints take `unique_tournament_id` instead. | |||
| data.players[].event.tournament.name | string | No | Premier League | Tournament name. | ||
| data.players[].event.tournament.slug | string | No | premier-league | URL slug of the tournament on SofaScore. | ||
| data.players[].event.tournament.unique_tournament_id | integer | No | 17 | Id of the parent competition. This is the tournament id the tournament-seasons, standings and round-events endpoints take. | ||
| data.players[].event.tournament.unique_tournament_name | string | No | Premier League | Name of the parent competition. | ||
| data.players[].event.winner_code | integer | No | Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided. | |||
| data.players[].jersey_number | string | No | ||||
| data.players[].order | integer | No | 1 | |||
| data.players[].player | sofascore.PlayerRef | No | ||||
| data.players[].player.country | string | No | Spain | Player's country. | ||
| data.players[].player.id | integer | No | 855833 | SofaScore player id. Use it with the player endpoints. | ||
| data.players[].player.name | string | No | Ferran Torres | Player's full name. | ||
| data.players[].player.position | string | No | F | Position code, for example G, D, M or F. | ||
| data.players[].player.short_name | string | No | F. Torres | Shortened name, for example "F. Torres". | ||
| data.players[].player.slug | string | No | ferran-torres | URL slug of the player on SofaScore. | ||
| data.players[].rating | number | No | 8.6 | |||
| data.players[].team | sofascore.TeamRef | No | ||||
| data.players[].team.country | string | No | Spain | Country the team belongs to. | ||
| data.players[].team.id | integer | No | 2817 | SofaScore team id. Use it with the team endpoints. | ||
| data.players[].team.name | string | No | FC Barcelona | Full team name. | ||
| data.players[].team.national | boolean | No | True for a national team. | |||
| data.players[].team.short_name | string | No | Barcelona | Shortened team name. | ||
| data.players[].team.slug | string | No | barcelona | URL slug of the team on SofaScore. | ||
| data.season_id | integer | No | ||||
| data.source_url | string | No | ||||
| 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/team-of-the-week?id=17&season=96668&period=29321" \
-H "x-api-key: $CRAWLORA_API_KEY"