Trip lookup
One box for anything a shipper types: a Navo trip ID or CMR, a truck or trailer plate (public carrier tracking where it exists), or a route like "Warsaw to Berlin" (answered as /route). coords trimmed in the example.
Query parameters
Trip ID, CMR, plate, or "from to to".
Response schema
27 fields
Derived from the example response, nested as the JSON is.
data
The payload. Everything an endpoint returns sits under this key.
from
Human-readable name.
Country name.
Latitude.
Longitude.
UN/LOCODE of the place.
carrier_event when a carrier filed it, trackingmcp_inference when we derived the step from surrounding events.
to
Human-readable name.
Country name.
Latitude.
Longitude.
UN/LOCODE of the place.
carrier_event when a carrier filed it, trackingmcp_inference when we derived the step from surrounding events.
Arrival time (ISO 8601) of the vessel (the ARRI event) at the port in destination_unlocode: planned until it arrives, actual after (see eta_is_estimated). It is not the discharge (DISC) and not the moment the cargo is ready for pickup. When a line files no arrival event, its discharge at that port stands in. Null when the carrier publishes none and we cannot predict one. When the line gave only a date, this reads 00:00 UTC on that date, which is padding, and some real ETAs also fall exactly on 00:00 UTC. On the detail answer (GET /v1/containers/{id}, and the refresh that returns it), eta_local tells them apart (a bare YYYY-MM-DD for a date, a time for a real ETA): take the day from it rather than converting this instant (west of UTC a padded date shows the day before). GET /v1/containers/lookup/{identifier} serves no eta_local.
Errors
A failure carries { "ok": false, "error": { "code", "message", "severity" } }. Branch on the code, and log the message.
No key in Authorization or x-api-key.
The key is unknown or revoked.
More than 40 requests in one minute from one client.
No trip, plate or route matches q.
curl 'https://api.navo24.com/v1/road/trip?q=Warsaw%20to%20Berlin' \
-H "Authorization: Bearer tmcp_YOUR_API_KEY"const res = await fetch("https://api.navo24.com/v1/road/trip?q=Warsaw%20to%20Berlin", {
headers: {
"Authorization": "Bearer tmcp_YOUR_API_KEY"
}
});
const data = await res.json();import requests
res = requests.get(
"https://api.navo24.com/v1/road/trip?q=Warsaw%20to%20Berlin",
headers={"Authorization": "Bearer tmcp_YOUR_API_KEY"},
)
data = res.json(){
"data": {
"from": {
"name": "Warsaw",
"cc": "PL",
"country": "Poland",
"lat": 52.22977,
"lng": 21.01178,
"locode": "PLWAW",
"kind": "city",
"tz": "Europe/Warsaw",
"q": "52.22977,21.01178"
},
"to": {
"name": "Berlin",
"cc": "DE",
"country": "Germany",
"lat": 52.52437,
"lng": 13.41053,
"locode": "DEBER",
"kind": "city",
"tz": "Europe/Berlin",
"q": "52.52437,13.41053"
},
"km": 573.9,
"driving_hours": 7.3,
"depart": "2026-11-02T06:50:00+00:00",
"eta": "2026-11-02T14:53:00+00:00",
"coords": [
[
21.01195,
52.22957
],
[
21.0122,
52.22991
]
],
"now": null
}
}