SofaScore API endpoint
Returns the events SofaScore lists for a stage sport around a UTC date: Grand Prix weekends, NASCAR race weekends, rallies and cycling races, each with its country, competition, every session start time (`session_start_timestamps`) and the session SofaScore highlights (`session`: the live, next or latest one). The list is not a strict one-day filter. It holds the events in progress on the date plus the next upcoming ones, and a quiet date still returns the next events; use `on_date`, which is true when a session of the event starts inside the requested UTC day, to separate them. Schedule rows carry no event status or winner: use `session.status`, or pass the event `id` to stage for the event detail and to stage-substages for its sessions. `date` must be a real calendar date written `YYYY-MM-DD`. An empty `stages` list is valid when nothing is in progress or scheduled nearby. The `sport` enum accepts `motorsport` and `cycling`.
/sofascore/stage-scheduleQuery parameters:
sport: required enum. Allowed values: motorsport, cycling. Every other sport uses the match-based endpoints (see sofascore/sports).date: required. UTC calendar date written YYYY-MM-DD, for example 2026-10-04. An impossible date such as 2026-02-30 returns an invalid-parameter error.Notable response behavior:
on_date is true when at least one session of the event starts inside the requested UTC day; filter on it for a strict day view.session_start_timestamps lists every session start of the event (Unix seconds). session is the session SofaScore highlights: the live one, otherwise the next or the latest. Schedule rows carry no event status, winner or start_timestamp; read the session status, or pass the event id to sofascore/stage or sofascore/stage-substages.stages list is valid: no event is in progress or scheduled nearby (for example a date in the off season such as 2026-01-01, or 1999-01-01).sport is validated here instead of passed through.Example response (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"sport": "motorsport",
"date": "2026-10-04",
"count": 1,
"source_url": "https://api.sofascore.com/api/v1/stage/sport/motorsport/scheduled/2026-10-04",
"fetched_at": "2026-10-07T14:00:00Z",
"stages": [
{
"id": 214260,
"name": "Singapore GP",
"slug": "singapore-gp",
"type": {
"id": 2,
"name": "Event"
},
"country": "Singapore",
"country_code": "SG",
"competition": {
"id": 40,
"name": "Formula 1",
"slug": "formula-1",
"sport": "motorsport",
"category_id": 36,
"category_name": "Formula 1"
},
"session_start_timestamps": [
1791534600,
1791540060,
1791549000,
1791622800,
1791626400,
1791637200,
1791720000
],
"on_date": false,
"session": {
"id": 214261,
"name": "Practice 1",
"slug": "practice-1",
"type": {
"id": 3,
"name": "Practice"
},
"status": {
"type": "notstarted",
"description": "Not started"
},
"start_timestamp": 1791534600
}
}
]
}
}
| Field | Filled in, of 6 checked | Values in the sample |
|---|---|---|
| id | 6 | |
| name | 6 | “Grand Prix of Spain” and 3 other values |
| slug | 6 | |
| type | 6 | |
| country | 6 | USA (5), Spain (1) |
| country_code | 6 | |
| competition | 6 | |
| session_start_timestamps | 6 | median 1 entry |
| on_date | 6 | true in 0 of 6 |
| session | 6 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| sport | string | Yes | Stage sport key Allowed values: motorsport, cycling. | motorsport | |
| date | string | Yes | UTC calendar date, YYYY-MM-DD | 2026-10-04 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/stage-schedule?sport=motorsport&date=2026-10-04" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"sport": "motorsport",
"date": "2026-10-04",
"count": 1,
"source_url": "https://api.sofascore.com/api/v1/stage/sport/motorsport/scheduled/2026-10-04",
"fetched_at": "2026-10-07T14:00:00Z",
"stages": [
{
"id": 214260,
"name": "Singapore GP",
"slug": "singapore-gp",
"type": {
"id": 2,
"name": "Event"
},
"country": "Singapore",
"country_code": "SG",
"competition": {
"id": 40,
"name": "Formula 1",
"slug": "formula-1",
"sport": "motorsport",
"category_id": 36,
"category_name": "Formula 1"
},
"session_start_timestamps": [
1791534600,
1791540060,
1791549000,
1791622800,
1791626400,
1791637200,
1791720000
],
"on_date": false,
"session": {
"id": 214261,
"name": "Practice 1",
"slug": "practice-1",
"type": {
"id": 3,
"name": "Practice"
},
"status": {
"type": "notstarted",
"description": "Not started"
},
"start_timestamp": 1791534600
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.stageScheduleResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.StageScheduleResponse | No | ||||
| data.count | integer | No | ||||
| data.date | string | No | 2026-10-04 | |||
| data.fetched_at | string | No | ||||
| data.source_url | string | No | ||||
| data.sport | string | No | motorsport | |||
| data.stages | array | 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. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/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-schedule?sport=motorsport&date=2026-10-04" \
-H "x-api-key: $CRAWLORA_API_KEY"