SofaScore API endpoint
Returns a football player's attribute scores (0 to 100) for the current year and up to three earlier years (`year_shift` 0 to 3), the average scores for the player's position, and the player's characteristics: playing positions plus strengths and weaknesses, each with SofaScore's numeric `code`, a `key` and `name` such as finishing or aerial duels, and a `rank`. Outfield players carry attacking, technical, tactical, defending and creativity scores; goalkeepers carry saves, anticipation, ball_distribution, aerial and tactical. Combines two SofaScore requests. Returns 404 for players without attribute overviews, which includes non-football players.
/sofascore/player-attributesReturns a football player's attribute scores, position averages and characteristics from SofaScore.
Query parameters:
id: required. Numeric SofaScore player id, e.g. 839956. Get it from sofascore-search or sofascore-team-players.Notable response behavior:
overviews holds attribute scores on a 0 to 100 scale; year_shift 0 is the current score and 1, 2, 3 are the scores that many years earlier. position_averages holds the average for the player's position. Outfield players carry attacking, technical, tactical, defending, creativity; goalkeepers carry saves, anticipation, ball_distribution, aerial, tactical.characteristics holds the playing positions plus strengths and weaknesses. Each entry has SofaScore's numeric code, a key and name such as finishing or Aerial duels (taken from the identifiers the SofaScore web client uses; a code the client does not name has no key or name) and a rank. A player with no characteristics has empty lists.404 for players without attribute overviews, which includes non-football players.| Field | Filled in, of 4 checked | Values in the sample |
|---|---|---|
| year_shift | 4 | 0 to 3, median 1 |
| position | 4 | F in all 4 |
| attributes | 4 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore player id | 839956 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/player-attributes?id=839956" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"player_id": 839956,
"sport": "football",
"source_url": "https://api.sofascore.com/api/v1/player/839956/attribute-overviews",
"characteristics_url": "https://api.sofascore.com/api/v1/player/839956/characteristics",
"fetched_at": "2026-10-07T00:00:00Z",
"overviews": [
{
"year_shift": 0,
"position": "F",
"attributes": {
"attacking": 87,
"technical": 66,
"tactical": 77,
"defending": 36,
"creativity": 53
}
}
],
"position_averages": [
{
"year_shift": 0,
"position": "F",
"attributes": {
"attacking": 61,
"technical": 54,
"tactical": 43,
"defending": 32,
"creativity": 45
}
}
],
"characteristics": {
"positions": [
"ST"
],
"strengths": [
{
"code": 5,
"key": "finishing",
"name": "Finishing",
"rank": 25
}
],
"weaknesses": [
{
"code": 6,
"key": "passing",
"name": "Passing",
"rank": 1776
}
]
}
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.playerAttributesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.PlayerAttributesResponse | No | ||||
| data.characteristics | sofascore.PlayerCharacteristics | No | ||||
| data.characteristics.positions | array | No | ||||
| data.characteristics.strengths | array | No | ||||
| data.characteristics.strengths[].code | integer | No | 5 | Code is SofaScore's numeric characteristic code. | ||
| data.characteristics.strengths[].key | string | No | finishing | Key is the identifier the SofaScore web client uses for the code (for example finishing); omitted for a code the client does not name. | ||
| data.characteristics.strengths[].name | string | No | Finishing | |||
| data.characteristics.strengths[].rank | integer | No | 25 | Rank is SofaScore's rank value for the characteristic. | ||
| data.characteristics.weaknesses | array | No | ||||
| data.characteristics.weaknesses[].code | integer | No | 5 | Code is SofaScore's numeric characteristic code. | ||
| data.characteristics.weaknesses[].key | string | No | finishing | Key is the identifier the SofaScore web client uses for the code (for example finishing); omitted for a code the client does not name. | ||
| data.characteristics.weaknesses[].name | string | No | Finishing | |||
| data.characteristics.weaknesses[].rank | integer | No | 25 | Rank is SofaScore's rank value for the characteristic. | ||
| data.characteristics_url | string | No | ||||
| data.fetched_at | string | No | ||||
| data.overviews | array | No | ||||
| data.overviews[].attributes | object | No | ||||
| data.overviews[].position | string | No | F | |||
| data.overviews[].year_shift | integer | No | 0 | YearShift is 0 for the current scores and N for the scores N years earlier. | ||
| data.player_id | integer | No | 839956 | |||
| data.position_averages | array | No | ||||
| data.position_averages[].attributes | object | No | ||||
| data.position_averages[].position | string | No | F | |||
| data.position_averages[].year_shift | integer | No | 0 | YearShift is 0 for the current scores and N for the scores N years earlier. | ||
| data.source_url | string | No | ||||
| data.sport | string | No | football | |||
| 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/player-attributes?id=839956" \
-H "x-api-key: $CRAWLORA_API_KEY"