Place search (autocomplete)
Forward geocoding and type-ahead over 5.9 million places in 568 languages. Matches names, alternate names and codes (UN/LOCODE, IATA, ICAO, UIC, ESR). Cities rank by size, so the first hit for a city name is the city the user means. The example is "Odesa".
Query parameters
Free text or a code. Two characters minimum.
Comma-separated place kinds: city, port, airport, rail, logistics, region, country. Omit for all kinds.
ISO 3166-1 alpha-2 country filter.
Results, 1 to 50. Default 10.
Preferred language for names, ISO 639-1.
Response schema
18 fields
Derived from the example response, nested as the JSON is.
The payload. Everything an endpoint returns sits under this key.
data[]
Stable identifier for the record. On the tracking endpoints this is the container UUID, except on a portfolio summary row, where it is the container number.
carrier_event when a carrier filed it, trackingmcp_inference when we derived the step from surrounding events.
Human-readable name.
ISO 3166-1 alpha-2 country code.
Country name.
Why the field stands where it does: resolved, contract_required, not_published, not_applicable or awaiting_carrier.
Latitude.
Longitude.
IANA time zone of the place. Null when we could not resolve the port.
UN/LOCODE of the place.
IATA code.
Errors
A failure carries { "ok": false, "error": { "code", "message", "severity" } }. Branch on the code, and log the message.
No Authorization: Bearer *** or X-API-Key header.
The key was not recognised.
q is missing or shorter than two characters.
More than 120 requests in one minute from one IP.
curl 'https://api.navo24.com/v1/geo/search?q=Odesa&kinds=city%2Cport&cc=UA&limit=2&lang=en' \
-H "Authorization: Bearer tmcp_YOUR_API_KEY"const res = await fetch("https://api.navo24.com/v1/geo/search?q=Odesa&kinds=city%2Cport&cc=UA&limit=2&lang=en", {
headers: {
"Authorization": "Bearer tmcp_YOUR_API_KEY"
}
});
const data = await res.json();import requests
res = requests.get(
"https://api.navo24.com/v1/geo/search?q=Odesa&kinds=city%2Cport&cc=UA&limit=2&lang=en",
headers={"Authorization": "Bearer tmcp_YOUR_API_KEY"},
)
data = res.json() {
"data": [
{
"id": 698740,
"kind": "city",
"name": "Odesa",
"country_code": "UA",
"country": "Ukraine",
"state": "Odesa",
"lat": 46.48572,
"lng": 30.74383,
"population": 1010537,
"timezone": "Europe/Kyiv",
"locode": "UAODS",
"iata": "ODS",
"geonameid": 698740,
"wikidata": "Q1874",
"feature": "PPLA",
"matched_name": "Odesa"
},
{
"id": 11361452,
"kind": "port",
"name": "Odesa",
"country_code": "UA",
"country": "Ukraine",
"state": "Odesa",
"lat": 46.48333,
"lng": 30.73333,
"timezone": "Europe/Kyiv",
"geonameid": 11361452,
"feature": "PRT",
"matched_name": "Odesa"
}
],
"took_ms": 21.4
}