Skip to main content
TravelType

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

  • GET/api/public/pois/search
    Search places (prefix/tag/fuzzy ranking + popularity/geo boost)Params: q (≥2) or city, tags, limit (≤50), lang
  • GET/api/public/pois/{id}
    Place detail (by UUID or slug)Params: id, lang
  • GET/api/public/pois/{id}/similar
    Similar places (tag-cosine)Params: id, limit (≤30), lang
  • GET/api/public/cities
    Cities list, ordered by POI countParams: country, limit (≤100), offset
  • GET/api/public/cities/{slug}
    City detail (top tags + sample places)Params: slug, lang
  • GET/api/public/countries
    Countries list (with city/POI counts)
  • GET/api/public/countries/{iso2}
    Country detail (cities, top 100)Params: 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 found
  • 422Invalid parameters
  • 429Rate limit exceeded
  • 500Internal 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.