Football V1
List Countries
Retrieve all available countries with game counts
GET
/
countries
Get All Countries
curl --request GET \
--url https://api.sportsapipro.com/v2/football/countries \
--header 'x-api-key: <api-key>'import requests
url = "https://api.sportsapipro.com/v2/football/countries"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sportsapipro.com/v2/football/countries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sportsapipro.com/v2/football/countries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sportsapipro.com/v2/football/countries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sportsapipro.com/v2/football/countries")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sportsapipro.com/v2/football/countries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_bodyEndpoint
GET https://api.sportsapipro.com/v1/football/countries
The API automatically determines the user’s language, timezone, and country based on request context. You can override
timezoneName with a specific timezone (e.g., America/New_York). All date/time fields use ISO 8601 format with a dynamic timezone offset.Parameters
number
default:"1"
Filter countries by sport ID. Use
1 for Football.number
For incremental updates, pass the
lastUpdateId from a previous response to get only changes since that point.Request
curl -X GET "https://api.sportsapipro.com/v1/football/countries?sports=1" \
-H "x-api-key: YOUR_API_KEY"
const response = await fetch(
'https://api.sportsapipro.com/v1/football/countries?sports=1',
{
headers: {
'x-api-key': 'YOUR_API_KEY'
}
}
);
const data = await response.json();
import requests
response = requests.get(
'https://api.sportsapipro.com/v1/football/countries',
params={'sports': 1},
headers={'x-api-key': 'YOUR_API_KEY'}
)
data = response.json()
Response
{
"lastUpdateId": 5494801907,
"requestedUpdateId": -1,
"ttl": 60,
"sports": [
{
"id": 1,
"name": "Football",
"nameForURL": "football",
"drawSupport": true,
"imageVersion": 1
},
{
"id": 2,
"name": "Basketball",
"nameForURL": "basketball",
"drawSupport": false,
"imageVersion": 1
}
],
"countries": [
{
"id": 65,
"name": "Ghana",
"totalGames": 0,
"liveGames": 0,
"nameForURL": "ghana",
"sportTypes": [1],
"imageVersion": 1,
"isInternational": false
},
{
"id": 1,
"name": "England",
"totalGames": 2,
"liveGames": 0,
"nameForURL": "england",
"imageVersion": 1
},
{
"id": 19,
"name": "Europe",
"totalGames": 18,
"liveGames": 0,
"nameForURL": "europe",
"imageVersion": 1,
"isInternational": true
},
{
"id": 54,
"name": "International",
"totalGames": 4,
"liveGames": 1,
"nameForURL": "international",
"imageVersion": 1,
"isInternational": true
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
lastUpdateId | number | Internal versioning ID for incremental updates |
requestedUpdateId | number | Update ID requested by client (-1 = latest data) |
ttl | number | Cache duration in seconds (60 seconds for this endpoint) |
sports | array | Available sports that have countries with competitions |
countries | array | List of countries with game availability |
Country Object
| Field | Type | Description |
|---|---|---|
id | number | Unique country identifier |
name | string | Country display name |
totalGames | number | Total number of games scheduled for this country today |
liveGames | number | Number of currently live games in this country |
nameForURL | string | URL-friendly country name slug |
sportTypes | array | Array of sport IDs available in this country |
imageVersion | number | Version number for country flag image |
isInternational | boolean | Whether this is an international/continental region (e.g., Europe, International) |
Sport Object
| Field | Type | Description |
|---|---|---|
id | number | Unique sport identifier |
name | string | Sport display name |
nameForURL | string | URL-friendly sport name slug |
drawSupport | boolean | Whether draws are possible in this sport |
imageVersion | number | Version number for sport icon |
Country Flag Images
Country flag images can be retrieved using:https://api.sportsapipro.com/v1/football/images/countries/{countryId}?version={imageVersion}
https://api.sportsapipro.com/v1/football/images/countries/1?version=1
International Regions
Countries withisInternational: true represent continental or international competitions:
| ID | Name | Description |
|---|---|---|
| 19 | Europe | European competitions (UEFA) |
| 44 | Africa | African competitions (CAF) |
| 47 | North America | CONCACAF competitions |
| 17 | South America | CONMEBOL competitions |
| 54 | International | FIFA international tournaments |
| 171 | Asia | AFC competitions |
| 208 | Oceania | OFC competitions |
Caching
This endpoint has a TTL of 60 seconds. The data updates frequently to reflect live game counts. Use the
lastUpdateId parameter for efficient incremental updates.Authorizations
Your SportsAPI Pro API key
Response
200
Football categories/countries
Last modified on June 29, 2026
Was this page helpful?
⌘I
Get All Countries
curl --request GET \
--url https://api.sportsapipro.com/v2/football/countries \
--header 'x-api-key: <api-key>'import requests
url = "https://api.sportsapipro.com/v2/football/countries"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sportsapipro.com/v2/football/countries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sportsapipro.com/v2/football/countries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sportsapipro.com/v2/football/countries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sportsapipro.com/v2/football/countries")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sportsapipro.com/v2/football/countries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body