football-data.org
api.football-data.org · Media
Structured football (soccer) data — live scores, standings, fixtures, player data, and results across Premier League, Champions League, Bundesliga, La Liga, and more. Free tier available.
Authentication
Sample Requests
Get current Premier League standings.
Hover any highlighted part to learn what it does
| X-Auth-Token | YOUR_API_KEY |
curl -X GET "https://api.football-data.org/v4/competitions/PL/standings" \ -H "X-Auth-Token: YOUR_API_KEY"
import requests
headers = {
"X-Auth-Token": "YOUR_API_KEY"
}
response = requests.get(
"https://api.football-data.org/v4/competitions/PL/standings",
headers=headers,
)
print(response.json())const url = 'https://api.football-data.org/v4/competitions/PL/standings';
const response = await fetch(url, {
headers: {
'X-Auth-Token': 'YOUR_API_KEY'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "https://api.football-data.org/v4/competitions/PL/standings"
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("X-Auth-Token", "YOUR_API_KEY")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.football-data.org/v4/competitions/PL/standings")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["X-Auth-Token"] = "YOUR_API_KEY"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.football-data.org/v4/competitions/PL/standings";
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"X-Auth-Token: YOUR_API_KEY"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Get upcoming Premier League fixtures.
Hover any highlighted part to learn what it does
| X-Auth-Token | YOUR_API_KEY |
curl -X GET "https://api.football-data.org/v4/competitions/PL/matches?status=SCHEDULED" \ -H "X-Auth-Token: YOUR_API_KEY"
import requests
params = {
"status": "SCHEDULED"
}
headers = {
"X-Auth-Token": "YOUR_API_KEY"
}
response = requests.get(
"https://api.football-data.org/v4/competitions/PL/matches",
params=params,
headers=headers,
)
print(response.json())const url = new URL('https://api.football-data.org/v4/competitions/PL/matches');
url.searchParams.set('status', 'SCHEDULED');
const response = await fetch(url, {
headers: {
'X-Auth-Token': 'YOUR_API_KEY'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.football-data.org/v4/competitions/PL/matches")
q := baseURL.Query()
q.Set("status", "SCHEDULED")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("X-Auth-Token", "YOUR_API_KEY")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.football-data.org/v4/competitions/PL/matches")
uri.query = URI.encode_www_form({
"status" => "SCHEDULED"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["X-Auth-Token"] = "YOUR_API_KEY"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.football-data.org/v4/competitions/PL/matches?" . http_build_query([
"status" => "SCHEDULED"
]);
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"X-Auth-Token: YOUR_API_KEY"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- Get a free API key at football-data.org
- Set header: X-Auth-Token: YOUR_KEY
- Try GET /v4/competitions/PL/standings
- Competition codes: PL (Premier League), CL (Champions League), BL1 (Bundesliga), PD (La Liga), SA (Serie A)
What can you build with football-data.org?
football-data.org is a Media API. Developers commonly use media APIs for:
- storing and delivering images, video, and audio
- building digital asset management and media libraries
- transcoding and optimising media for the web
- adding video streaming and playback to your app
- automating content tagging and metadata extraction
API Key authentication. You'll receive a key after signing up. Send it with every request — in a header or query parameter. Keep it out of client-side code and never commit it to version control. football-data.org is free to use up to a usage limit, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide