Match detail
F/v1/matches/{id}
One match, every field it carries
One match with everything the row carries: score, half-time score, both clubs' league position at kickoff, how far the away side travelled, the ground and its coordinates, and the exchange market. Fetching more than one? Do not call this in a loop: /v1/matches?ids= takes up to fifty match ids in a single request, separated by a dash, which is one round trip instead of fifty. See batch requests. Every match, here and on every list, carries team_figures: xG, shots, shots on target, corners, fouls, yellow and red cards and possession for each side, or null where the match had no statistics. xg is measured expected goals, held from 2022; xg_estimate is our own, worked out from the shots each side took (inside and outside the box, and on target) on every match with shot figures, so it reaches back years further. The full statistics block and the line-ups come back only here.
Plan
This endpoint needs Free key. It works on the free key, which reads yesterday, as one whole day.
Parameters
match_id
string
path
required
mt_1JK5QJ9
Returns
data.match_id
string
data.league_id
string
data.country_name
string
data.league_name
string
data.season_start_year
integer
data.kickoff_utc
integer
data.kickoff_date
string
data.kickoff_local_time
string
data.match_status
string
data.home_team_id
string
data.home_team_name
string
data.away_team_id
string
data.away_team_name
string
data.home_goals
integer
data.away_goals
integer
data.full_time_result
empty in this example
data.half_time_home_goals
integer
data.half_time_away_goals
integer
data.half_time_result
string
data.half_time_source
string
data.stoppage_minutes
empty in this example
data.is_kickoff_rescheduled
boolean
data.home_league_position
integer
data.away_league_position
integer
data.away_travel_km
integer
data.venue_name
string
data.city_name
string
data.latitude
number
data.longitude
number
data.location_precision
string
data.daylight_minutes
integer
data.sun_elevation_deg
number
data.public_holiday
empty in this example
data.referee_name
string
data.regular_time_home_goals
empty in this example
data.regular_time_away_goals
empty in this example
data.regular_time_result
empty in this example
data.extra_time_home_goals
empty in this example
data.extra_time_away_goals
empty in this example
data.shootout_home_goals
empty in this example
data.shootout_away_goals
empty in this example
data.betfair
object
data.betfair.home_kickoff_price
number
data.betfair.draw_kickoff_price
number
data.betfair.away_kickoff_price
number
data.betfair.home_half_time_price
empty in this example
data.betfair.matched_kickoff_volume
empty in this example
data.betfair.market_id
empty in this example
meta.data_as_of
string
meta.request_id
string
Request
curl "https://api.footballsoccerapi.com/v1/matches/mt_1JK5QJ9" \ -H "X-API-Key: $FSAPI_KEY"
const res = await fetch("https://api.footballsoccerapi.com/v1/matches/mt_1JK5QJ9", { headers: { "X-API-Key": process.env.FSAPI_KEY } }); const { data, meta } = await res.json();
import os, requests r = requests.get( "https://api.footballsoccerapi.com/v1/matches/mt_1JK5QJ9", headers={"X-API-Key": os.environ["FSAPI_KEY"]}, ) data = r.json()["data"]
$ch = curl_init("https://api.footballsoccerapi.com/v1/matches/mt_1JK5QJ9"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["X-API-Key: {$key}"], ]); $data = json_decode(curl_exec($ch), true)["data"];
Example response
A real row from the archive, fetched when this page rendered. Run it against your own key below.
{
"data": {
"match_id": "mt_28QVFGW",
"league_id": "lg_3JZKJSZ",
"country_name": "Colombia",
"league_name": "Primera A",
"season_start_year": 2026,
"kickoff_utc": 1793228400,
"kickoff_date": "2026-10-28",
"kickoff_local_time": "23:00",
"match_status": "finished",
"home_team_id": "tm_1HXBKY8",
"home_team_name": "Once Caldas",
"away_team_id": "tm_2DNYS20",
"away_team_name": "Alianza Valledupar",
"home_goals": 1,
"away_goals": 0,
"full_time_result": null,
"half_time_home_goals": 0,
"half_time_away_goals": 0,
"half_time_result": "draw",
"half_time_source": "feed",
"stoppage_minutes": null,
"is_kickoff_rescheduled": false,
"home_league_position": 7,
"away_league_position": 16,
"away_travel_km": 650,
"venue_name": "Estadio Palogrande",
"city_name": "Manizales",
"latitude": 5.056233,
"longitude": -75.489807,
"location_precision": "ground",
"daylight_minutes": 717,
"sun_elevation_deg": -4.6,
"public_holiday": null,
"referee_name": "Carlos Alberto Diaz Vargas",
"regular_time_home_goals": null,
"regular_time_away_goals": null,
"regular_time_result": null,
"extra_time_home_goals": null,
"extra_time_away_goals": null,
"shootout_home_goals": null,
"shootout_away_goals": null,
"betfair": {
"home_kickoff_price": 1.58,
"draw_kickoff_price": 3.7,
"away_kickoff_price": 6.25,
"home_half_time_price": null,
"matched_kickoff_volume": null,
"market_id": null
}
},
"meta": {
"data_as_of": "2026-10-29T04:32:57Z",
"request_id": "01J9QW3C7M4KX2VB"
}
}
Run it live
Paste your key and fire the real request. The key is kept in this browser only and never sent anywhere but the API.