SofaScore API endpoint
Returns every competitor's progress through a finished race or rally. For circuit races (Formula 1, MotoGP and similar) `laps` lists the position at the end of each lap, starting with lap 0 for the grid, plus the tyre compound and a `pit_stop` flag where published; the lap a driver retired has `retired` set and no position. For rallies `stage_positions` lists the overall position after each special stage. The response also repeats the stage itself. It is published for races and sprints of some series (verified for Formula 1, MotoGP and WRC) and not for practice, qualifying, NASCAR, cycling, events or seasons, which return 404. Returns 404 for an unknown id.
/sofascore/stage-driver-performanceQuery parameters:
id: required. Numeric SofaScore stage id of a finished race, sprint or rally event, for example 214258 (Azerbaijan Grand Prix) or 219196 (Rally Italia).Notable response behavior:
laps: the position at the end of each lap, starting with lap 0 for the starting grid, plus tyre_type where published (Formula 1) and pit_stop on the laps with a pit stop. The lap a competitor retired has retired: true and no position.stage_positions: the overall position after each special stage (stage is the special stage number). Exactly one of laps and stage_positions is present.stage. Lap times and gaps are not part of this payload; use sofascore/stage-standings for results.Example response (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"stage_id": 214258,
"stage": {
"id": 214258,
"name": "Grand Prix",
"slug": "grand-prix",
"type": {
"id": 6,
"name": "Race"
},
"status": {
"type": "finished",
"description": "Finished"
},
"year": "2026",
"start_timestamp": 1790420400,
"start_time": "2026-09-26T11:00:00Z",
"season_name": "Formula 1 2026",
"country": "Azerbaijan",
"country_code": "AZ",
"competition": {
"id": 40,
"name": "Formula 1",
"slug": "formula-1",
"sport": "motorsport",
"category_id": 36,
"category_name": "Formula 1"
},
"parent": {
"id": 214253,
"name": "Azerbaijan GP",
"slug": "azerbaijan-gp",
"start_timestamp": 1790239908
},
"info": {
"circuit": "Baku City Circuit",
"circuit_country": "Azerbaijan",
"laps": 51,
"laps_completed": 51,
"race_distance_m": 306049,
"circuit_length_m": 6003,
"weather": "sunny",
"track_condition": "Dry",
"air_temperature": 26.5,
"track_temperature": 40.1,
"humidity": 50.4,
"lap_record": "1:44.916",
"safety_car": true
},
"winner": {
"id": 271315,
"name": "George Russell",
"short_name": "G. Russell",
"code": "RUS",
"slug": "russell-george",
"kind": "individual",
"country": "United Kingdom",
"country_code": "GB",
"team": {
"id": 214910,
"name": "Mercedes",
"short_name": "Mercedes",
"code": "MER",
"country": "Germany"
}
}
},
"count": 2,
"source_url": "https://api.sofascore.com/api/v1/stage/214258/driver-performance",
"fetched_at": "2026-10-07T14:00:00Z",
"competitors": [
{
"competitor": {
"id": 4521,
"name": "Fernando Alonso",
"code": "ALO",
"slug": "alonso-fernando",
"team": {
"id": 214903,
"name": "Aston Martin",
"short_name": "Aston Martin",
"code": "ASM",
"country": "United Kingdom"
}
},
"start_number": 14,
"laps": [
{
"lap": 0,
"position": 21,
"tyre_type": "S"
},
{
"lap": 1,
"position": 20,
"tyre_type": "S"
},
{
"lap": 2,
"position": 21,
"tyre_type": "S"
}
]
}
]
}
}
| Field | Filled in, of 22 checked | Values in the sample |
|---|---|---|
| competitor | 22 | |
| start_number | 22 | 1 to 87, median 23 |
| laps | 22 | median 52 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore stage id of a finished race, sprint or rally | 214258 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/stage-driver-performance?id=214258" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"stage_id": 214258,
"stage": {
"id": 214258,
"name": "Grand Prix",
"slug": "grand-prix",
"type": {
"id": 6,
"name": "Race"
},
"status": {
"type": "finished",
"description": "Finished"
},
"year": "2026",
"start_timestamp": 1790420400,
"start_time": "2026-09-26T11:00:00Z",
"season_name": "Formula 1 2026",
"country": "Azerbaijan",
"country_code": "AZ",
"competition": {
"id": 40,
"name": "Formula 1",
"slug": "formula-1",
"sport": "motorsport",
"category_id": 36,
"category_name": "Formula 1"
},
"parent": {
"id": 214253,
"name": "Azerbaijan GP",
"slug": "azerbaijan-gp",
"start_timestamp": 1790239908
},
"info": {
"circuit": "Baku City Circuit",
"circuit_country": "Azerbaijan",
"laps": 51,
"laps_completed": 51,
"race_distance_m": 306049,
"circuit_length_m": 6003,
"weather": "sunny",
"track_condition": "Dry",
"air_temperature": 26.5,
"track_temperature": 40.1,
"humidity": 50.4,
"lap_record": "1:44.916",
"safety_car": true
},
"winner": {
"id": 271315,
"name": "George Russell",
"short_name": "G. Russell",
"code": "RUS",
"slug": "russell-george",
"kind": "individual",
"country": "United Kingdom",
"country_code": "GB",
"team": {
"id": 214910,
"name": "Mercedes",
"short_name": "Mercedes",
"code": "MER",
"country": "Germany"
}
}
},
"count": 2,
"source_url": "https://api.sofascore.com/api/v1/stage/214258/driver-performance",
"fetched_at": "2026-10-07T14:00:00Z",
"competitors": [
{
"competitor": {
"id": 4521,
"name": "Fernando Alonso",
"code": "ALO",
"slug": "alonso-fernando",
"team": {
"id": 214903,
"name": "Aston Martin",
"short_name": "Aston Martin",
"code": "ASM",
"country": "United Kingdom"
}
},
"start_number": 14,
"laps": [
{
"lap": 0,
"position": 21,
"tyre_type": "S"
},
{
"lap": 1,
"position": 20,
"tyre_type": "S"
},
{
"lap": 2,
"position": 21,
"tyre_type": "S"
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.stageDriverPerformanceResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.StageDriverPerformanceResponse | No | ||||
| data.competitors | array | No | ||||
| data.competitors[].competitor | sofascore.StageEntity | No | StageEntity record, 16 fields: code, country, country_code, id, kind, name, short_name, slug, team. Described under SofaScore Stage Standings API. | |||
| data.competitors[].laps | array | No | Laps is set for circuit races. | |||
| data.competitors[].laps[].lap | integer | No | 1 | |||
| data.competitors[].laps[].pit_stop | boolean | No | ||||
| data.competitors[].laps[].position | integer | No | 1 | Position is omitted on the lap a competitor retired. | ||
| data.competitors[].laps[].retired | boolean | No | ||||
| data.competitors[].laps[].tyre_type | string | No | M | |||
| data.competitors[].stage_positions | array | No | StagePositions is set for rallies. | |||
| data.competitors[].stage_positions[].position | integer | No | 3 | |||
| data.competitors[].stage_positions[].stage | integer | No | 1 | |||
| data.competitors[].start_number | integer | No | 63 | |||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.source_url | string | No | ||||
| data.stage | sofascore.Stage | No | Stage record, 103 fields: competition, country, country_code, end_timestamp, id, info, name, on_date, parent, parts, season_name, sequence and 9 more. Described under SofaScore Stage API. | |||
| data.stage_id | integer | No | 214258 | |||
| 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/stage-driver-performance?id=214258" \
-H "x-api-key: $CRAWLORA_API_KEY"