Make your first request in seconds.
OpenFootAPI exposes football fixtures, results, live events, confirmed lineups, Expected Goals (xG) and derived match intelligence through a clean REST interface.
No key required to start testing
Request any public-preview endpoint. Every payload arrives in a predictable envelope with execution metadata and stable IDs.
curl "https://openfootapi.com/v1/matches?date=2026-08-28" \
-H "Accept: application/json"Response
{
"data": [
{
"id": "match_olg_83156",
"competitionId": "comp_bundesliga_de",
"status": "scheduled",
"kickoffAt": "2026-08-28T18:30:00.000Z",
"homeTeam": { "id": "team_olg_40", "name": "FC Bayern München" },
"awayTeam": { "name": "VfB Stuttgart" }
}
],
"meta": {
"count": 1,
"environment": "beta",
"access": { "authenticated": false, "plan": "public" }
}
}Bearer API keys
A Developer API key unlocks paginated results, live events, lineups, xG shot maps and 25,000 measured requests per month. Raw keys start with fs_live_; OpenFootAPI stores only a SHA-256 hash.
Authorization: Bearer fs_live_your_api_keymatch_olg_83156.What is actually available
OpenLigaDB + ESPN · ODbL / OpenReal-time fixtures, lineups & commentary
Current fixtures, live score clocks, incident timelines (goals, cards, substitutions, VAR) and confirmed starting XI rosters.
Football-Data.co.uk · Free Open DataRomanian and expanded European match data
Superliga României, Eredivisie, Primeira Liga, Süper Lig, Belgium's Pro League and the Scottish Premiership, filtered by season.
Understat + Market BenchmarkExpected Goals (xG), shot maps & odds
Granular shot coordinates, individual shot expectancy, team xG totals, and implied fair win probabilities.
OpenFootball · CC0-1.0Four league archives
Premier League, La Liga, Serie A and Ligue 1 historical files with standardized team mappings.
Every relevant response includes source and license metadata.
Endpoints
/v1/healthAPI health
Current service, API version and active provider state.
/v1/competitionsCompetitions
Coverage flags, seasons, source and license for each competition.
/v1/standings?competition={id}League standings
Full league table with overall, home, away splits, goal difference, points, and recent 5-match form.
/v1/matchesMatches
Fixtures and results filtered by date, competition, team, status or season.
/v1/matches/{id}/contextMatch context
Derived form, Elo, rest, table position, venue record, head-to-head and freshness.
/v1/matches/{id}/eventsMatch events & commentary
Incident timeline (goals, cards, substitutions, penalties, VAR) and minute-by-minute text commentary.
/v1/matches/{id}/lineupsLineups & formations
Confirmed starting XI, substitutes, player positions, jersey numbers, and tactical formations.
/v1/matches/{id}/xgMatch shot map & xG
Granular shot locations (x, y coordinates), shot types, situations, individual xG values and team totals.
/v1/analytics/xg?league={league}League xG table
League-wide Expected Goals, expected points (xPTS), and performance tables across major European leagues.
/v1/odds?matchId={id}Odds & probabilities
Model fair-odds benchmarks and implied fair win probabilities.
/v1/search?q={query}Entity search
Resolve team and competition names to stable OpenFootAPI IDs.
Filter matches without learning provider IDs
Filters can be combined. Dates are interpreted as UTC calendar dates and entity filters use stable OpenFootAPI IDs returned by search.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | date | No | Kickoff date in YYYY-MM-DD. |
competition | string | No | Stable OpenFootAPI competition ID. |
team | string | No | Stable OpenFootAPI team ID. |
status | enum | No | scheduled, live, finished or postponed. |
season | string | No | Season label such as 2026/27. |
kickoffAt. Convert it to the viewer's timezone in the client.Use the same endpoint from any stack
Select any endpoint and programming language below to view production-ready boilerplate with authentication, error handling, and response processing.
Retrieve fixtures across 75+ global competitions with live scores and venue data.
// TypeScript / Modern Node.js (Fetch)
const url = "https://openfootapi.com/v1/matches?date=2026-08-28&status=scheduled";
const headers: Record<string, string> = {
"Accept": "application/json",
};
async function fetchFootballData() {
try {
const response = await fetch(url, { headers });
if (!response.ok) {
const err = await response.json();
throw new Error(err.error?.message || `HTTP ${response.status}`);
}
const payload = await response.json();
console.log("Success:", payload.data);
return payload.data;
} catch (error) {
console.error("API Request Error:", error);
}
}
fetchFootballData();One envelope across every endpoint
Successful requests return data and meta. Failed requests return error and a request ID that can be used for support and log tracing.
dataThe requested resourceAn object or array with normalized field types.metaHow the response was producedRequest ID, generation time, access tier, sources and count.errorA stable failure shapeMachine-readable code plus a human-readable message.200Request completed400Invalid filters401Invalid API key403Plan restriction404Resource missing429Quota exhausted502Source unavailableMatch context & Intelligence
The context and analytics endpoints compute an integration-ready snapshot from available match history, tactical models and live streams.
home.formUp to five completed matcheshome.eloDerived strength ratinganalytics.expectedGoalsxG models and goal expectancyanalytics.oddsBenchmarkProjected fair odds & win percentagesanalytics.momentumAttack pressure index and fatigue riskheadToHeadAvailable previous meetingsTyped, predictable errors
Errors use stable codes, including invalid_api_key, monthly_quota_exceeded, api_key_required and source_unavailable.
{ "error": { "code": "api_key_required", "message": "Use a Developer API key for this match context." } }Live API
Run a public-preview endpoint from this deployment and inspect the real JSON response.
/v1/matches/match_olg_83156/contextSelect an endpoint and run the request.