SofaScore API endpoint
Returns fixtures for one round of a competition season. Get `id` from search or category-tournaments, `season` from tournament-seasons, and the round values from tournament-rounds. Round numbers are not unique in cups, and knockout or named rounds return 404 unless the round's `slug` is passed (plus its `prefix` when tournament-rounds lists one): the UEFA Champions League has a qualifying and a league-phase round 1, and a playoff round 636 both with the `Qualification` prefix and without. Plain numbered league rounds need only `round`. `slug` is lowercase letters, digits, and hyphens (up to 64 characters); `prefix` is letters, digits, spaces, and hyphens (up to 64 characters) and is only valid together with `slug`.
/sofascore/round-eventsQuery parameters:
id: required. Numeric SofaScore unique-tournament (competition) id, e.g. 17 for the Premier League.season: required. Numeric SofaScore season id (from the tournament-seasons endpoint).round: required integer. Round number, e.g. 1.slug: optional. Round slug from tournament-rounds, e.g. round-of-16. Lowercase letters, digits, and single hyphens, up to 64 characters. Required for knockout and named cup rounds; leave it out for plain numbered rounds.prefix: optional. Round prefix from tournament-rounds, e.g. Qualification. Letters, digits, spaces, and hyphens, up to 64 characters, starting with a letter or digit. Only valid together with slug (a prefix without slug is rejected).Notable response behavior:
7, season 76953) has a qualifying round 1 (slug=qualification-round-1) and a bare league-phase round 1, and a playoff round 636 both with slug=playoff-round&prefix=Qualification and with slug=playoff-round only; each combination returns different fixtures. Knockout rounds such as the final (round=29&slug=final) return 404 without their slug.slug or prefix formats return an invalid-parameter error before any upstream request, and slug and prefix are echoed in the response when sent.events array is returned for a round with no scheduled fixtures.has_next_page indicates whether SofaScore paginates additional fixtures for this round.| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| id | 10 | |
| slug | 10 | |
| start_timestamp | 10 | 2025-08-15 to 2025-08-18 |
| start_time | 10 | 2025-08-15 to 2025-08-18 |
| status | 10 | |
| winner_code | 10 | |
| tournament | 10 | |
| home_team | 10 | |
| away_team | 10 | |
| home_score | 10 | |
| away_score | 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore unique-tournament (competition) id | 17 | |
| season | string | Yes | Numeric SofaScore season id | 76986 | |
| round | integer | Yes | Round number | 1 | |
| slug | string | No | Round slug from tournament-rounds, for example round-of-16; required for knockout and named cup rounds | round-of-16 | |
| prefix | string | No | Round prefix from tournament-rounds, for example Qualification; only valid together with slug | Qualification | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/round-events?id=17&season=76986&round=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"tournament_id": 17,
"season_id": 76986,
"round": 1,
"has_next_page": false,
"count": 1,
"source_url": "https://api.sofascore.com/api/v1/unique-tournament/17/season/76986/events/round/1",
"fetched_at": "2026-07-08T16:45:00Z",
"events": [
{
"id": 14025013,
"slug": "bournemouth-liverpool",
"start_timestamp": 1755288000,
"start_time": "2025-08-15T19:00:00Z",
"status": {
"code": 100,
"description": "Ended",
"type": "finished"
},
"tournament": {
"id": 52,
"name": "Premier League",
"category": "England",
"unique_tournament_id": 17,
"unique_tournament_name": "Premier League"
},
"home_team": {
"id": 60,
"name": "Bournemouth",
"short_name": "Bournemouth",
"slug": "bournemouth",
"country": "England"
},
"away_team": {
"id": 44,
"name": "Liverpool",
"short_name": "Liverpool",
"slug": "liverpool",
"country": "England"
},
"home_score": {
"current": 2
},
"away_score": {
"current": 4
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.roundEventsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.RoundEventsResponse | No | ||||
| data.count | integer | No | Number of events returned. | |||
| data.events | array | No | Fixtures in the round. | |||
| data.events[].away_score | object | No | Away side's score, when available. | |||
| data.events[].away_score.current | integer | No | Current score, which is the final score once the match is over. | |||
| data.events[].away_score.period1 | integer | No | Score in the first period. | |||
| data.events[].away_score.period2 | integer | No | Score in the second period. | |||
| data.events[].away_team | object | No | Away side. | |||
| data.events[].away_team.country | string | No | Spain | Country the team belongs to. | ||
| data.events[].away_team.id | integer | No | 2817 | SofaScore team id. Use it with the team endpoints. | ||
| data.events[].away_team.name | string | No | FC Barcelona | Full team name. | ||
| data.events[].away_team.national | boolean | No | True for a national team. | |||
| data.events[].away_team.short_name | string | No | Barcelona | Shortened team name. | ||
| data.events[].away_team.slug | string | No | barcelona | URL slug of the team on SofaScore. | ||
| data.events[].home_score | object | No | Home side's score, when available. | |||
| data.events[].home_score.current | integer | No | Current score, which is the final score once the match is over. | |||
| data.events[].home_score.period1 | integer | No | Score in the first period. | |||
| data.events[].home_score.period2 | integer | No | Score in the second period. | |||
| data.events[].home_team | object | No | Home side. | |||
| data.events[].home_team.country | string | No | Spain | Country the team belongs to. | ||
| data.events[].home_team.id | integer | No | 2817 | SofaScore team id. Use it with the team endpoints. | ||
| data.events[].home_team.name | string | No | FC Barcelona | Full team name. | ||
| data.events[].home_team.national | boolean | No | True for a national team. | |||
| data.events[].home_team.short_name | string | No | Barcelona | Shortened team name. | ||
| data.events[].home_team.slug | string | No | barcelona | URL slug of the team on SofaScore. | ||
| data.events[].id | integer | No | 14025013 | SofaScore event id. Use it with the event endpoints. | ||
| data.events[].slug | string | No | URL slug of the match on SofaScore. | |||
| data.events[].start_time | string | No | 2025-08-15T19:00:00Z | Start time in UTC (RFC 3339). | ||
| data.events[].start_timestamp | integer | No | Start time as a Unix timestamp in seconds. | |||
| data.events[].status | object | No | Current status of the match. | |||
| data.events[].status.code | integer | No | SofaScore's numeric status code, for example 0 for not started and 100 for ended. | |||
| data.events[].status.description | string | No | Ended | Status as displayed, for example "Ended". | ||
| data.events[].status.type | string | No | finished | Status group, for example `notstarted`, `inprogress` or `finished`. | ||
| data.events[].tournament | object | No | Tournament and parent competition the match belongs to. | |||
| data.events[].tournament.category | string | No | England | Category the tournament sits under, usually a country or region. | ||
| data.events[].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.events[].tournament.name | string | No | Premier League | Tournament name. | ||
| data.events[].tournament.slug | string | No | premier-league | URL slug of the tournament on SofaScore. | ||
| data.events[].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.events[].tournament.unique_tournament_name | string | No | Premier League | Name of the parent competition. | ||
| data.events[].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.fetched_at | string | No | Time the data was fetched, in UTC (RFC 3339). | |||
| data.has_next_page | boolean | No | True when more fixtures are available on a further page. | |||
| data.prefix | string | No | Qualification | Round prefix, set for stages such as Qualification. | ||
| data.round | integer | No | Round number. | |||
| data.season_id | integer | No | SofaScore season id. | |||
| data.slug | string | No | round-of-16 | Round slug, set for named rounds such as `round-of-16`. | ||
| data.source_url | string | No | SofaScore URL the data was read from. | |||
| data.tournament_id | integer | No | Id of the competition (the unique tournament id). | |||
| 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/round-events?id=17&season=76986&round=1" \
-H "x-api-key: $CRAWLORA_API_KEY"