Road trip and ETA
Road route on the Navo road graph (Distance & Time), driving hours and an ETA with EU driver rules (45 min break every 4.5 h, 11 h rest after 9 h). Send the truck position from a shared Google Maps, Apple Maps or OpenStreetMap link, or as lat,lng, and now{} says what is driven, what is left and the new ETA. coords trimmed in the example.
Query parameters
City, address, UN/LOCODE or lat,lng.
Same formats as from.
Instead of from/to: "Warsaw to Berlin".
Departure, ISO 8601. Default: now.
Truck position: a map share link or lat,lng.
Response schema
35 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.
now
Latitude.
Longitude.
Arrival time (ISO 8601). Null when the carrier publishes none and we cannot predict one.
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.
Neither from/to nor a q with "to".
A place could not be found.
No road route between the places.
More than 40 requests in one minute from one client.
A source did not answer. Retry in a minute.
curl 'https://road.navo24.com/v1/road/route?from=Warsaw&to=Berlin&q=Warsaw%20to%20Berlin&depart=2026-10-30T06%3A00%3A00Z&at=52.3%2C19.0' \
-H "Authorization: Bearer tmcp_YOUR_API_KEY"const res = await fetch("https://road.navo24.com/v1/road/route?from=Warsaw&to=Berlin&q=Warsaw%20to%20Berlin&depart=2026-10-30T06%3A00%3A00Z&at=52.3%2C19.0", {
headers: {
"Authorization": "Bearer tmcp_YOUR_API_KEY"
}
});
const data = await res.json();import requests
res = requests.get(
"https://road.navo24.com/v1/road/route?from=Warsaw&to=Berlin&q=Warsaw%20to%20Berlin&depart=2026-10-30T06%3A00%3A00Z&at=52.3%2C19.0",
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-10-29T21:24:00+00:00",
"eta": "2026-10-30T05:27:00+00:00",
"coords": [
[
21.01195,
52.22957
],
[
21.0122,
52.22991
]
],
"now": {
"lat": 52.3,
"lng": 19.0,
"index": 298,
"off_route_km": 27.3,
"done_km": 190.0,
"left_km": 383.9,
"left_hours": 4.9,
"eta": "2026-10-30T03:01:58+00:00"
}
}
}