For developers
TravelType API
A read-only public JSON API for places, cities and countries — no sign-up, CORS-open. This page covers how to call it; for the dataset, licence (CC-BY 4.0) and citation, see Open data.
At a glance
- Base URLhttps://traveltype.app
- Authenticationnone
- FormatJSON, UTF-8, CORS *
- Rate limit60 requests/min per IP
- Language?lang=en|de (EN canonical, falls back en→de)
Quick start
curl 'https://traveltype.app/api/public/pois/search?q=rooftop&city=berlin&limit=3'
Endpoints
- GETSearch places (prefix/tag/fuzzy ranking + popularity/geo boost)Params: q (≥2) or city, tags, limit (≤50), lang
/api/public/pois/search - GETPlace detail (by UUID or slug)Params: id, lang
/api/public/pois/{id} - GETSimilar places (tag-cosine)Params: id, limit (≤30), lang
/api/public/pois/{id}/similar - GETCities list, ordered by POI countParams: country, limit (≤100), offset
/api/public/cities - GETCity detail (top tags + sample places)Params: slug, lang
/api/public/cities/{slug} - GETCountries list (with city/POI counts)
/api/public/countries - GETCountry detail (cities, top 100)Params: iso2
/api/public/countries/{iso2}
Machine-readable spec: /openapi.json (OpenAPI 3.1)
Example response
{
"pois": [
{
"id": "6f1c0b2e-…",
"slug": "brandenburger-tor",
"name": "Brandenburg Gate",
"lat": 52.5163, "lng": 13.3777,
"city_slug": "berlin", "country_iso2": "DE",
"tags": ["landmark", "architecture", "neoclassical"],
"wikidata_qid": "Q82425",
"image_url": "https://traveltype.app/poi-images/…jpg",
"url": "https://traveltype.app/poi/brandenburger-tor"
}
],
"count": 1
}Errors
Errors return JSON with { error, message, trace_id } and the matching status code — for validation (422) instead { error, issues, trace_id }:
404Resource not found422Invalid parameters429Rate limit exceeded500Internal error
Fair use
Credit TravelType as the source (CC-BY 4.0 for the derived data — details under Open data). Please don't bulk re-host images; image rights follow each record's stated source (image_source). Stay within the rate limit.