GET
/v1/placesEvery place the API names in one shape: countries, first-level regions, NUTS regions, EU cities, airports and venues, each with its code, the place it sits in and its Wikidata id where one is known, so figures keyed on ISO, NUTS, an EU city code, ICAO or Wikidata join to one another. Filter by country, kind, parent, words in the name or a Wikidata id.
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 |
| kindoptional | string query | One kind of place: country, region, nuts, city, airport or venue e.g. airport |
| parentoptional | string query | Places inside this one, by its code (NUTS, ISO 3166-2 or country) e.g. AT-3 |
| qoptional | string query | Words in the place name e.g. Wien |
| wikidataoptional | string query | A Wikidata id, to find the place it belongs to e.g. Q32999 |
| limitoptional | integer query | Rows per page, 1 to 1000 e.g. 100 |
| cursoroptional | string query | The next value from the previous page |
Request
# The place register
curl "https://api.tourismapi.com/v1/places?iso=AT&kind=airport" \
-H "X-API-Key: $TOURISM_API_KEY"const res = await fetch("https://api.tourismapi.com/v1/places?iso=AT&kind=airport", {
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/places?iso=AT&kind=airport",
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/places?iso=AT&kind=airport");
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_8a50899dba",
"data_as_of": "2026-11-07T04:51:40Z",
"count": 6,
"register_built": "2026-11-02T05:48:04Z",
"note": "code is the place's own key within its kind: ISO alpha-2 for a country, ISO 3166-2 for a first-level region, the NUTS code, the EU city code, the ICAO code for an airport, the Wikidata id for a venue. parent_kind and parent_code name the place it sits in. wikidata_id, where known, joins to any dataset keyed on Wikidata; a place with none was never matched by name alone."
},
"data": [
{
"kind": "airport",
"code": "LOWG",
"name": "Graz Airport",
"country": "AT",
"level": null,
"parent_kind": "region",
"parent_code": "AT-6",
"wikidata_id": "Q178162",
"lat": 46.99306,
"lon": 15.43917
},
{
"kind": "airport",
"code": "LOWI",
"name": "Innsbruck Airport",
"country": "AT",
"level": null,
"parent_kind": "region",
"parent_code": "AT-7",
"wikidata_id": "Q694434",
"lat": 47.26028,
"lon": 11.34389
},
{
"kind": "airport",
"code": "LOWK",
"name": "Klagenfurt Airport",
"country": "AT",
"level": null,
"parent_kind": "region",
"parent_code": "AT-2",
"wikidata_id": "Q694404",
"lat": 46.64278,
"lon": 14.33722
}
]
}Response fields
| Field | Type | Example |
|---|---|---|
| kind | string | airport |
| code | string | LOWG |
| name | string | Graz Airport |
| country | string | AT |
| level | null | null |
| parent_kind | string | region |
| parent_code | string | AT-6 |
| wikidata_id | string | Q178162 |
| lat | number | 46.99306 |
| lon | number | 15.43917 |