Matches
List matches
Returns fixtures and results, 20 per page. Combine filters to get a team’s next match, a matchday, or every match between two dates.
Order: newest kickoff first by default (sort=-utc_date). Use sort=utc_date for soonest first.
Examples
- Next fixture for a team (first row is the next match):
GET /football/matches?team_id=tm_9145&status=scheduled&sort=utc_date&per_page=1 - Latest result for a team:
GET /football/matches?team_id=tm_9145&status=finished&per_page=1 - One day’s Premier League matches:
GET /football/matches?competition_id=comp_3039&date_from=2026-10-10&date_to=2026-10-10&sort=utc_date - One matchday:
GET /football/matches?competition_id=comp_3039&season_id=sn_8406098&matchday=6
There is no date parameter. For a single day, set date_from and date_to to the same date.
GET
/
football
/
matches
List matches
curl --request GET \
--url https://api.thestatsapi.com/api/football/matches \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.thestatsapi.com/api/football/matches', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.thestatsapi.com/api/football/matches"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "mt_838955483",
"competition_id": "comp_3039",
"season_id": "sn_6125938",
"matchday": 37,
"stage": "regular",
"stage_name": null,
"status": "finished",
"utc_date": "2026-05-15T19:00:00.000Z",
"home_team": {
"id": "tm_1002",
"name": "Aston Villa"
},
"away_team": {
"id": "tm_0406",
"name": "Liverpool"
},
"score": {
"home": 4,
"away": 2,
"final_score": null,
"regulation": {
"home": 4,
"away": 2
},
"after_extra_time": null,
"penalty_shootout": null,
"went_to_extra_time": false,
"went_to_penalties": false,
"winner": "home"
},
"group_label": null,
"is_neutral": false,
"live": null,
"home_manager": {
"id": "mgr_990303",
"name": "Unai Emery"
},
"away_manager": {
"id": "mgr_96180711",
"name": "Arne Slot"
},
"odds_available": true,
"live_odds_available": false,
"xg_available": true,
"shotmap_available": true,
"xg_quality": "full"
}
],
"meta": {
"page": 1,
"per_page": 20,
"total": 100,
"total_pages": 5
}
}Start here to get the
match_id that every other match endpoint needs. Recipes with code: Fixtures and results.Authorizations
Your API key, sent as Authorization: Bearer YOUR_API_KEY. Get one at https://www.thestatsapi.com/api-keys
Query Parameters
⌘I
List matches
curl --request GET \
--url https://api.thestatsapi.com/api/football/matches \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.thestatsapi.com/api/football/matches', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.thestatsapi.com/api/football/matches"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "mt_838955483",
"competition_id": "comp_3039",
"season_id": "sn_6125938",
"matchday": 37,
"stage": "regular",
"stage_name": null,
"status": "finished",
"utc_date": "2026-05-15T19:00:00.000Z",
"home_team": {
"id": "tm_1002",
"name": "Aston Villa"
},
"away_team": {
"id": "tm_0406",
"name": "Liverpool"
},
"score": {
"home": 4,
"away": 2,
"final_score": null,
"regulation": {
"home": 4,
"away": 2
},
"after_extra_time": null,
"penalty_shootout": null,
"went_to_extra_time": false,
"went_to_penalties": false,
"winner": "home"
},
"group_label": null,
"is_neutral": false,
"live": null,
"home_manager": {
"id": "mgr_990303",
"name": "Unai Emery"
},
"away_manager": {
"id": "mgr_96180711",
"name": "Arne Slot"
},
"odds_available": true,
"live_odds_available": false,
"xg_available": true,
"shotmap_available": true,
"xg_quality": "full"
}
],
"meta": {
"page": 1,
"per_page": 20,
"total": 100,
"total_pages": 5
}
}