Fleet & logistics
Fleet & logistics
For delivery, field-service, and fleet products, Navvo offers multi-stop optimization, condition-aware route risk, and a two-way relationship with the traffic layer: your trips improve traffic, and live traffic improves your ETAs.
Scopes required: routing, traffic, telemetry (and geo/tiles as needed).
1. Optimize a multi-stop route
POST /routing/plan builds the route, optimizes stop order, applies vehicle constraints, and reports any logistics zones crossed — in one call.
const res = await fetch("https://navvo.io/api/v1/routing/plan", {
method: "POST",
headers: { "x-api-key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
locations: [
{ lon: 35.91, lat: 31.95, name: "Depot" },
{ lon: 35.95, lat: 31.99, name: "Stop A" },
{ lon: 35.88, lat: 31.97, name: "Stop B" },
{ lon: 35.93, lat: 31.93, name: "Stop C" },
],
costing: "truck",
preference: "fastest",
avoid: ["unpaved"],
optimize: true,
constraintsText: "Stop A must be before 11:00; avoid the old downtown.",
}),
});
const plan = await res.json();
const trip = plan.engine.data.trip; // route geometry + maneuvers
const zones = plan.logistics.matchedZones; // SLA / restricted zones crossed
const order = plan.constraints; // AI-parsed stop ordering/time windows
/plan automatically optimizes stop order. The logistics block tells you if the route enters restricted-access or high-congestion zones, with a costMultiplier you can fold into pricing.2. Score route risk before dispatch
POST /map/route-risk scores a route across traffic, weather, incidents, logistics zones, and enforcement assets:
const risk = await (await fetch("https://navvo.io/api/v1/map/route-risk", {
method: "POST",
headers: { "x-api-key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
routeId: "trip-42",
timeOffset: "+1h", // score against the forecast an hour out
geometry: { type: "LineString", coordinates: routeCoords }, // [[lng,lat], …]
}),
})).json();
console.log(risk.severity, risk.scores.overall); // "low", 24
risk.warnings.forEach((w) => console.log(w.type, w.title, w.location));
Use POST /map/route-enforcement for just the speed cameras / signals along the route.
3. Traffic-aware ETAs
Compute live ETAs with POST /traffic/route (see Directions & live ETAs). For dispatch decisions across many drivers, batch with POST /routing/matrix.
4. Contribute trips (and get better traffic back)
If your drivers' apps capture location, submit anonymized trips to POST /telemetry/trips. Navvo map-matches them and folds the speeds into the live/typical traffic layers — improving ETAs for your whole fleet.
await fetch("https://navvo.io/api/v1/telemetry/trips", {
method: "POST",
headers: { "x-api-key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
metadata: { consentCaptured: true },
points: gpsTrace.map((p) => ({
lat: p.lat, lng: p.lng,
speed: p.speedMps, // meters/second
capturedAt: p.timestampIso, // ISO-8601
})),
}),
});
The loop
Plan
POST /routing/plan — optimized, constraint-aware multi-stop route.
Assess
POST /map/route-risk — traffic, weather, incidents, zones, enforcement.
Drive
POST /traffic/route — live ETAs; POST /telemetry/trips — contribute probe data.
Improve
Your trips sharpen the traffic layer that powers the next plan.