Destinations
GET
/v1/destinationsEvery place held inside a country, from regions down to named cities, with its newest nights and the country's own nights for the same period, joined by place and period.
Developer plan and upKey requiredJSON or CSVCached until the next release
Parameters
| Name | Type | Description |
|---|---|---|
| isorequired | string path | ISO 3166 two-letter country code e.g. CL |
| freqoptional | M | A query | Monthly or annual places only e.g. A |
| periodoptional | period query | One period; defaults to the latest finished one e.g. 2026-08 |
| leveloptional | region | nuts3 | city query | Only places of one kind: regions (NUTS 1 and 2, or the country's own), NUTS 3 regions, or named cities e.g. city |
| placeoptional | string query | Part of a place name e.g. Barcelona |
| limitoptional | integer query | Rows per page, 1 to 1000 e.g. 100 |
Request
# Destinations: regions and cities with their country
curl "https://api.tourismapi.com/v1/destinations?iso=ES&level=city&limit=10" \
-H "X-API-Key: $TOURISM_API_KEY"const res = await fetch("https://api.tourismapi.com/v1/destinations?iso=ES&level=city&limit=10", {
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/destinations?iso=ES&level=city&limit=10",
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/destinations?iso=ES&level=city&limit=10");
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_fa14e9b9f2",
"data_as_of": "2026-11-07T04:51:40Z",
"count": 10,
"country": "ES",
"measure": "nights",
"places": 98,
"levels": {
"city": 98
},
"joined": "Each place is joined to its country by place and period: country_nights is ES's own nights for the same period and frequency (/v1/nights?country=ES), share_pct the place's part of it where both count all tourist accommodation."
},
"data": [
{
"place": "Madrid (greater city)",
"code": "ES001C",
"level": "city",
"basis": "all tourist accommodation",
"series": "sr_pyat785j",
"freq": "A",
"period": "2025",
"nights": 33969574,
"country_nights": 512892979,
"share_pct": 6.62,
"first": "2020",
"last": "2025"
},
{
"place": "Barcelona (greater city)",
"code": "ES002C",
"level": "city",
"basis": "all tourist accommodation",
"series": "sr_zygne4m7",
"freq": "A",
"period": "2025",
"nights": 31532448,
"country_nights": 512892979,
"share_pct": 6.15,
"first": "2020",
"last": "2025"
},
{
"place": "Benidorm",
"code": "ES044C",
"level": "city",
"basis": "all tourist accommodation",
"series": "sr_a2esvvaa",
"freq": "A",
"period": "2025",
"nights": 21648514,
"country_nights": 512892979,
"share_pct": 4.22,
"first": "2020",
"last": "2025"
}
]
}Response fields
| Field | Type | Example |
|---|---|---|
| place | string | Madrid (greater city) |
| code | string | ES001C |
| level | string | city |
| basis | string | all tourist accommodation |
| series | string | sr_pyat785j |
| freq | string | A |
| period | string | 2025 |
| nights | number | 33969574 |
| country_nights | number | 512892979 |
| share_pct | number | 6.62 |
| first | string | 2020 |
| last | string | 2025 |