Catalog and categories
Copy link

What the API has, per country, and the category tree for pickers. The catalog is read off the data build itself, so it changes only when a country is rebuilt and says when that was; the tree's counts are places in the same build, single-source ones included, so they run higher than the catalog's records, which count what the Places routes return by default.

Questions this page answers: Which countries are served? · What data do we have, and how fresh is it? · Which categories exist?

Request headers
Copy link

Required authentication header. The same application id as the TravelTime API.

string

Required authentication header.

Data catalog
Copy link

GET /v1/catalog

Every country the API serves, in one answer. Read off the live data and rebuilt within five minutes of a data deploy. This route predates the shared shape: country codes are upper case (GB), layers are keyed by name, and there is no results or next_cursor.

One country here, from the UK build: the United Kingdom, tier A, read off the live data. Places come from Foursquare, OpenStreetMap and Overture, and 46 sources are named, 30 of them government registers with their checked match accuracy.

Request

curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
  "https://data.traveltimeapp.com/v1/catalog"
200 · 1 country, one page
NamenameCodecodeTiertierBboxbbox
United KingdomGBA-8.65, 49.84, 1.77 +1

All 1 shown

Takes nothing.

Each row: countries, one per country, sorted by name: {code, name, tier, bbox, last_refreshed, verified, layers}. tier is A for places and an environment layer, B for places alone, C for no places; bbox is [min_lng, min_lat, max_lng, max_lat]; last_refreshed is when the places index was built, where that can be read. layers holds places, gov_registers, land_cover, divisions, population, census, transport and environment, each {available, sources, records, not_deployed}, where records counts the records carrying each live source. verified is false when the country's live read failed: its tier and layers are then what the country is registered for, which may claim data that is not deployed. Top level: generated_at, when the answer was built, and sources, keyed by id, each {name, publisher, licence, vintage, homepage, match_accuracy}; a register's match_accuracy is {correct, lo, hi, sample, checked}, the share of a random sample of its matches judged the same place, with a 95% interval.

What the API has in one country
Copy link

GET /v1/catalog/{country}

The menu front ends build their pickers from, one country at a time.

The menu for the UK: 10 datasets, 897 operators and 674 fields a custom-score check can read. Places alone: 4,710,961 records, 30 government registers verifying them, updated 2026-10-18.

Parameters
Copy link

ParameterType · defaultWhat it doesExample
countrypath · —A country id. GET /v1/boundaries?type=country lists the countries./catalog/gb

Also takes nothing. The answer is one object, with next_cursor always null.

Each row: country {id, name, boundary_types, modes, operators [{id, name, line_count}]}: what type takes (and group_by, less the National Parks and National Landscapes), what mode takes and what operator takes, both biggest first. results, one per dataset: {id, routes, resolutions, fields [{name, unit, rollup, meaning}], countries} (no resolutions on roads and road-access), where countries.<country> is {available, source_ids, not_deployed, updated_at, records}, records counting what the dataset's routes serve and not_deployed the sources with no live records, plus verified_by_count on places; neighbourhood adds layers [{id, fields, countries}], open-spaces adds definitions (what counts as green cover, open space and a designation) and proximity adds targets, what within, beyond and covered_by take, as an id or {id, meaning}. custom_scores.fields: every field a check can read. downloads [{name, size_bytes, rows, url}]: country-wide files for anything too big to page; none are published yet, so the list is empty.

CodeHTTPWhen
not_found404No country with that id.

Category taxonomy
Copy link

GET /v1/categories

The category tree, with counts, for pickers: three levels, group, category and detail. Counts are places at the leaf, summed upward (a place carrying three details adds 3 to its group). An id from any level works in category on the Places routes; an id that exists at two levels (cafe is a category and one of its own details) means the broader one, and detail:cafe pins it to the leaf. This route predates the shared shape: the tree is groups rather than results, names are display_name, and its errors carry no param or doc_url.

The full tree for the UK: 16 groups over 4,710,961 places.

Parameters
Copy link

ParameterType · defaultWhat it doesExample
countrycountry id · —Counts for this country.country=gb

Also takes nothing. Cached: Cache-Control an hour fresh, 24 hours stale-while-revalidate.

Each row: groups, each {id, display_name, count, categories}; each category {id, display_name, count, detail}; each detail {id, display_name, count}. Top level: total_pois, every place in the country.

CodeHTTPWhen
country_required422No country.
—400No country with that id, as {"detail": "Unknown country code: XX"}.

One category group
Copy link

GET /v1/categories/{group}

One branch of the tree, for a picker that drills down: the group and everything under it, as the object itself rather than in an envelope.

Food and drink in the UK: 976,302 places in 11 categories.

Parameters
Copy link

ParameterType · defaultWhat it doesExample
grouppath · —A group id from the tree./food_and_drink
countrycountry id · —Counts for this country.country=gb

Also takes nothing. Cached as the tree is.

Each row: the group, {id, display_name, count, categories}, as above.

CodeHTTPWhen
—404No group with that id, as {"detail": "Category group 'nope' not found"}.
country_required422No country.
—400No country with that id, as {"detail": "Unknown country code: XX"}.

Request

curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
  "https://data.traveltimeapp.com/v1/catalog"
200 · 1 country, one page
NamenameCodecodeTiertierBboxbbox
United KingdomGBA-8.65, 49.84, 1.77 +1

All 1 shown