Matches
Get a match
Returns one match with its score breakdown, half-time score, venue, referee and managers. Flags such as odds_available, xg_available and shotmap_available tell you which other match endpoints have data, so check them first.
Example: GET /football/matches/mt_838955483
GET
/
football
/
matches
/
{match_id}
Get a match
curl --request GET \
--url https://api.thestatsapi.com/api/football/matches/{match_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.thestatsapi.com/api/football/matches/{match_id}', 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/{match_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"id": "mt_838955483",
"competition_id": "comp_3039",
"competition_name": "Premier League",
"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",
"half_time_home": 1,
"half_time_away": 0
},
"group_label": null,
"venue": {
"name": "Villa Park",
"city": "Birmingham"
},
"is_neutral": false,
"referee": {
"id": "ref_7264609",
"name": "Chris Kavanagh"
},
"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"
}
}Get the
match_id from List matches. 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
Path Parameters
⌘I
Get a match
curl --request GET \
--url https://api.thestatsapi.com/api/football/matches/{match_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.thestatsapi.com/api/football/matches/{match_id}', 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/{match_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"id": "mt_838955483",
"competition_id": "comp_3039",
"competition_name": "Premier League",
"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",
"half_time_home": 1,
"half_time_away": 0
},
"group_label": null,
"venue": {
"name": "Villa Park",
"city": "Birmingham"
},
"is_neutral": false,
"referee": {
"id": "ref_7264609",
"name": "Chris Kavanagh"
},
"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"
}
}