Coverage and counts
GET
/v1/coverageEvery total behind the published numbers in one place (values, series, countries, collectors), what each one counts, and the checks that show they reconcile: values = served + withheld, served = country coverage + regional + transport, index = stored + derived. Rebuilt daily. Free.
On every plan, Free includedKey requiredJSON or CSVCached until the next release
Parameters
No parameters.
Request
# Coverage and counts
curl "https://api.tourismapi.com/v1/coverage" \
-H "X-API-Key: $TOURISM_API_KEY"const res = await fetch("https://api.tourismapi.com/v1/coverage", {
headers: { "X-API-Key": process.env.TOURISM_API_KEY }
});
if (!res.ok) throw new Error(`Tourism API ${res.status}`);
const { meta, data } = await res.json();
console.log(meta.data_as_of, data);import os, requests
r = requests.get(
"https://api.tourismapi.com/v1/coverage",
headers={"X-API-Key": os.environ["TOURISM_API_KEY"]},
timeout=10,
)
r.raise_for_status()
body = r.json()
print(body["meta"]["data_as_of"], body["data"])$ch = curl_init("https://api.tourismapi.com/v1/coverage");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: " . getenv("TOURISM_API_KEY")],
]);
$body = json_decode(curl_exec($ch), true);
print_r($body["data"]);
Example response
{
"meta": {
"request_id": "req_ff78af668e",
"data_as_of": "2026-11-07T04:49:21Z",
"count": 1,
"built_at": "2026-11-07T03:44:57Z"
},
"data": {
"totals": {
"cells": 93616015,
"values": 93476341,
"values_served": 93161424,
"values_withheld": 314917,
"values_country": 69953145,
"values_regional": 4017896,
"values_transport": 19108681,
"values_context": 81702,
"series_stored": 3121502,
"series_served": 3105653,
"series_indexed": 2494497,
"series_indexed_from_stored": 2381057,
"series_derived": 113440,
"headlines": 624,
"collectors": 102,
"countries": 161,
"countries_monthly": 124
},
"definitions": {
"cells": "every observation stored, with or without a value",
"values": "stored observations that hold a number",
"values_served": "values from sources that are served (not withheld for their licence)",
"values_country": "served values for a single country, in tourism tables (not regions, the world or transport-only tables)",
"values_context": "served values that are context beside the counts: consumer prices of hotels, air fares and package holidays",
"series_stored": "series holding at least one value: national series, each EU table x country x breakdown, and the daily border count",
"series_served": "stored series from served sources",
"series_indexed": "series in the API index: served stored series it lists plus the series it derives (quarters and years added up from months, foreign visitors from totals)",
"collectors": "publisher feeds that hold values"
},
"checks": [
{
"check": "coverage count = country coverage values",
"ok": true,
"left": 69946595,
"right": 69953145,
"means": "the coverage count sums the same country values (within 1%, as it is counted hourly)"
},
{
"check": "countries list values = served values",
"ok": true,
"left": 93149439,
"right": 93161424,
"means": "site.json shows the served values (within 1%, it is built hourly)"
},
{
"check": "countries list series = series served",
"ok": true,
"left": 3105653,
"right": 3105653,
"means": "site.json shows the served series (within 1%)"
}
],
"reconciled": true
}
}Response fields
| Field | Type | Example |
|---|---|---|
| totals | object | object |
| definitions | object | object |
| checks | array | 3 items |
| reconciled | boolean | true |