SofaScore API endpoint
Returns a match's best-rated players per side, the overall top-rated list, and the player of the match (each with team and value) from SofaScore. Covers football (value is the match rating, label `rating`) and ice hockey (label `pts`, value the points scored; a goalkeeper with no points has no numeric `value` and carries SofaScore's dash in `value_text`). The basketball, baseball and tennis matches checked returned no summary. Returns 404 when SofaScore has no best-players summary for the match, which includes matches that have not started, sports without one and fixtures without rated players.
/sofascore/event-best-playersQuery parameters:
id: required. Numeric SofaScore event (match) id of a football or ice hockey match, e.g. 16363867 (football) or 15950163 (ice hockey).Notable response behavior:
home_players and away_players are the best performers per side, top_players is the overall top list, and player_of_the_match is the single best player. Each entry has player, team, label (for example rating) and a numeric value.404 when SofaScore has no best-players summary for the match. This includes matches that have not started and fixtures without rated players.label rating and a numeric value (the match rating). Ice hockey entries (checked on NHL matches 15950163 and 15950219) have label pts and a value that is the points scored (for example 2); a player with no points, typically a goalkeeper, has no numeric value and carries SofaScore's en dash in value_text instead. value_text is only present when value is absent. Hockey matches have no player_of_the_match.404.Example response, ice hockey (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"event_id": 15950163,
"source_url": "https://api.sofascore.com/api/v1/event/15950163/best-players/summary",
"fetched_at": "2026-10-07T17:00:00Z",
"home_players": [
{
"player": {
"id": 898264,
"name": "Carter Hart",
"short_name": "C. Hart",
"slug": "hart-carter",
"position": "G",
"jersey_number": "79"
},
"team": {
"id": 257523,
"name": "Vegas Golden Knights",
"short_name": "Golden Knights",
"slug": "vegas-golden-knights"
},
"label": "pts",
"value_text": "–"
}
],
"away_players": [
{
"player": {
"id": 1458085,
"name": "Jackson Blake",
"short_name": "J. Blake",
"slug": "jackson-blake",
"position": "R",
"jersey_number": "53"
},
"team": {
"id": 3680,
"name": "Carolina Hurricanes",
"short_name": "Hurricanes",
"slug": "carolina-hurricanes"
},
"label": "pts",
"value": 2
}
],
"top_players": [
{
"player": {
"id": 1458085,
"name": "Jackson Blake",
"short_name": "J. Blake",
"slug": "jackson-blake",
"position": "R",
"jersey_number": "53"
},
"team": {
"id": 3680,
"name": "Carolina Hurricanes",
"short_name": "Hurricanes",
"slug": "carolina-hurricanes"
},
"label": "pts",
"value": 2
},
{
"player": {
"id": 305218,
"name": "Nikolaj Ehlers",
"short_name": "N. Ehlers",
"slug": "nikolaj-ehlers",
"position": "L",
"jersey_number": "27"
},
"team": {
"id": 3680,
"name": "Carolina Hurricanes",
"short_name": "Hurricanes",
"slug": "carolina-hurricanes"
},
"label": "pts",
"value": 1
}
]
}
}
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| player | 10 | |
| team | 10 | |
| label | 10 | rating in all 10 |
| value | 10 | 6.9 to 9.8, median 7.8 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore event (match) id | 16363867 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/event-best-players?id=16363867" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"event_id": 16363867,
"source_url": "https://api.sofascore.com/api/v1/event/16363867/best-players/summary",
"fetched_at": "2026-07-08T00:00:00Z",
"player_of_the_match": {
"player": {
"id": 910048,
"name": "Brian Brobbey",
"short_name": "B. Brobbey",
"slug": "brian-brobbey",
"position": "F",
"jersey_number": "9"
},
"team": {
"id": 41,
"name": "Sunderland",
"short_name": "Sunderland",
"slug": "sunderland"
},
"label": "rating",
"value": 9.8
},
"home_players": [
{
"player": {
"id": 934354,
"name": "Antoine Semenyo",
"short_name": "A. Semenyo",
"slug": "antoine-semenyo",
"position": "M",
"jersey_number": "42"
},
"team": {
"id": 17,
"name": "Manchester City",
"short_name": "Man City",
"slug": "manchester-city"
},
"label": "rating",
"value": 9.5
}
],
"away_players": [
{
"player": {
"id": 910048,
"name": "Brian Brobbey",
"short_name": "B. Brobbey",
"slug": "brian-brobbey",
"position": "F",
"jersey_number": "9"
},
"team": {
"id": 41,
"name": "Sunderland",
"short_name": "Sunderland",
"slug": "sunderland"
},
"label": "rating",
"value": 9.8
}
],
"top_players": [
{
"player": {
"id": 910048,
"name": "Brian Brobbey",
"short_name": "B. Brobbey",
"slug": "brian-brobbey",
"position": "F",
"jersey_number": "9"
},
"team": {
"id": 41,
"name": "Sunderland",
"short_name": "Sunderland",
"slug": "sunderland"
},
"label": "rating",
"value": 9.8
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.eventBestPlayersResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.EventBestPlayersResponse | No | ||||
| data.away_players | array | No | ||||
| data.away_players[].label | string | No | rating | |||
| data.away_players[].player | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.away_players[].team | sofascore.TeamRef | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.away_players[].value | number | No | 9.8 | |||
| data.away_players[].value_text | string | No | - | ValueText carries the upstream value verbatim when it is not a number, for example the en dash an ice hockey goalkeeper gets next to the `pts` label. It is omitted whenever Value is set. | ||
| data.event_id | integer | No | 16363867 | |||
| data.fetched_at | string | No | ||||
| data.home_players | array | No | ||||
| data.home_players[].label | string | No | rating | |||
| data.home_players[].player | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.home_players[].team | sofascore.TeamRef | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.home_players[].value | number | No | 9.8 | |||
| data.home_players[].value_text | string | No | - | ValueText carries the upstream value verbatim when it is not a number, for example the en dash an ice hockey goalkeeper gets next to the `pts` label. It is omitted whenever Value is set. | ||
| data.player_of_the_match | sofascore.BestPlayer | No | ||||
| data.player_of_the_match.label | string | No | rating | |||
| data.player_of_the_match.player | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.player_of_the_match.team | sofascore.TeamRef | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.player_of_the_match.value | number | No | 9.8 | |||
| data.player_of_the_match.value_text | string | No | - | ValueText carries the upstream value verbatim when it is not a number, for example the en dash an ice hockey goalkeeper gets next to the `pts` label. It is omitted whenever Value is set. | ||
| data.source_url | string | No | ||||
| data.top_players | array | No | ||||
| data.top_players[].label | string | No | rating | |||
| data.top_players[].player | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.top_players[].team | sofascore.TeamRef | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.top_players[].value | number | No | 9.8 | |||
| data.top_players[].value_text | string | No | - | ValueText carries the upstream value verbatim when it is not a number, for example the en dash an ice hockey goalkeeper gets next to the `pts` label. It is omitted whenever Value is set. | ||
| 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/event-best-players?id=16363867" \
-H "x-api-key: $CRAWLORA_API_KEY"