SofaScore API endpoint
Returns one page (up to 30) of the matches played (`direction` `last`, newest page first) or scheduled (`next`) at a venue, as match summaries. Without `tournament` and `season` it lists every match at the venue, optionally narrowed by `sport` (`all`, or any key listed in the venue's `sports`, such as `football`, `rugby`, `basketball`, `mma`); with both it lists that competition season's matches at the venue and `sport` must be omitted. Hidden venues (see venue) have no venue-wide list and answer 404 without `tournament` and `season`. A direction with no matches, a sport the venue never hosted and a page past the last one also answer 404; follow `has_next_page`.
/sofascore/venue-eventsReturns one page (up to 30) of the matches played or scheduled at a venue, as match summaries with teams, status, score, competition and start time.
Query parameters:
id: required. Numeric SofaScore venue id, e.g. 624 for the Emirates Stadium.direction: required enum. Allowed values: next (upcoming matches), last (finished matches; page 0 holds the most recent 30 and higher pages go further back). Matches inside a page are in chronological order.sport: optional enum for the venue-wide list. Allowed values: all, american-football, aussie-rules, badminton, bandy, baseball, basketball, beach-volley, cricket, darts, esports, floorball, football, futsal, handball, ice-hockey, mma, minifootball, padel, rugby, snooker, table-tennis, tennis, volleyball, waterpolo. Defaults to all. Use a key listed in the venue's sports (from sofascore/venue); a sport the venue never hosted returns 404. Cannot be combined with tournament and season.page: optional integer, 0 or more. Zero-based page number. Defaults to 0.tournament and season: optional, only together. Numeric unique-tournament id and season id; restrict the list to that competition season's matches at the venue (the Premier League 2026/27 at the Emirates Stadium is tournament=17&season=96668).Notable response behavior:
/venue/{id}/events/{sport}/{direction}/{page}, sport from the venue or all) and the season-scoped list (/unique-tournament/{t}/season/{s}/venue/{id}/events/{direction}/{page}). Both use zero-based pages and report has_next_page.hidden true in sofascore/venue; every NBA arena) have no venue-wide list: both directions and every sport answer 404, while the season-scoped list works. Use sofascore/tournament-venues to get the venues and hidden flags of a season.next for a venue with no fixtures) and a page past the last one. The cases cannot be told apart, so all are reported as one 404; follow has_next_page to avoid walking past the end. A 200 with no events is treated as an upstream error.sport is echoed (all by default) for the venue-wide list and omitted for the season-scoped list, where tournament_id and season_id are echoed instead.Example response (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"venue_id": 624,
"direction": "last",
"sport": "all",
"page": 1,
"has_next_page": true,
"count": 30,
"source_url": "https://api.sofascore.com/api/v1/venue/624/events/all/last/1",
"fetched_at": "2026-10-07T14:00:00Z",
"events": [
{
"id": 12436489,
"slug": "arsenal-nottingham-forest",
"start_timestamp": 1732374000,
"start_time": "2024-11-23T15:00:00Z",
"status": { "code": 100, "description": "Ended", "type": "finished" },
"tournament": { "id": 1, "name": "Premier League", "slug": "premier-league", "category": "England", "unique_tournament_id": 17, "unique_tournament_name": "Premier League" },
"home_team": { "id": 42, "name": "Arsenal", "short_name": "Arsenal", "slug": "arsenal" },
"away_team": { "id": 14, "name": "Nottingham Forest", "short_name": "Forest", "slug": "nottingham-forest" },
"home_score": { "current": 3 },
"away_score": { "current": 0 }
}
]
}
}
| Field | Filled in, of 30 checked | Values in the sample |
|---|---|---|
| id | 30 | |
| slug | 30 | |
| start_timestamp | 30 | 2025-11-23 to 2026-10-10 |
| start_time | 30 | 2025-11-23 to 2026-10-10 |
| status | 30 | |
| winner_code | 30 | |
| tournament | 30 | |
| home_team | 30 | |
| away_team | 30 | |
| home_score | 30 | |
| away_score | 30 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore venue id | 624 | |
| direction | string | Yes | Upcoming matches or finished matches Allowed values: next, last. | last | |
| sport | string | No | all | Sport filter for the venue-wide list. Defaults to all Allowed values: all, american-football, aussie-rules, badminton, bandy, baseball, basketball, beach-volley, cricket, darts, esports, floorball, football, futsal, handball, ice-hockey, mma, minifootball, padel, rugby, snooker, table-tennis, tennis, volleyball, waterpolo. | football |
| page | integer | No | 0 | Zero-based page number. Defaults to 0 Minimum: 0. | 0 |
| tournament | string | No | Numeric unique-tournament id; with season, lists that competition season's matches at the venue | 17 | |
| season | string | No | Numeric season id; with tournament, lists that competition season's matches at the venue | 96668 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/venue-events?id=624&direction=last&sport=all&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"venue_id": 624,
"direction": "last",
"sport": "all",
"page": 1,
"has_next_page": true,
"count": 30,
"source_url": "https://api.sofascore.com/api/v1/venue/624/events/all/last/1",
"fetched_at": "2026-10-07T14:00:00Z",
"events": [
{
"id": 12436489,
"slug": "arsenal-nottingham-forest",
"start_timestamp": 1732374000,
"start_time": "2024-11-23T15:00:00Z",
"status": {
"code": 100,
"description": "Ended",
"type": "finished"
},
"tournament": {
"id": 1,
"name": "Premier League",
"slug": "premier-league",
"category": "England",
"unique_tournament_id": 17,
"unique_tournament_name": "Premier League"
},
"home_team": {
"id": 42,
"name": "Arsenal",
"short_name": "Arsenal",
"slug": "arsenal"
},
"away_team": {
"id": 14,
"name": "Nottingham Forest",
"short_name": "Forest",
"slug": "nottingham-forest"
},
"home_score": {
"current": 3
},
"away_score": {
"current": 0
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.venueEventsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.VenueEventsResponse | No | ||||
| data.count | integer | No | ||||
| data.direction | string | No | last | |||
| data.events | array | No | EventSummary record, 38 fields: away_score, away_team, home_score, home_team, id, slug, start_time, start_timestamp, status, tournament, winner_code. Described under SofaScore live events API. | |||
| data.fetched_at | string | No | ||||
| data.has_next_page | boolean | No | ||||
| data.page | integer | No | ||||
| data.season_id | integer | No | ||||
| data.source_url | string | No | ||||
| data.sport | string | No | all | |||
| data.tournament_id | integer | No | ||||
| data.venue_id | integer | No | ||||
| 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/venue-events?id=624&direction=last&sport=all&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"