Navvo
Guides

Fleet & logistics

Optimize multi-stop routes, score route risk, and contribute probe data.

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
With more than two locations, /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
    })),
  }),
});
Consent & privacy. Only submit trips you have consent to share. Consider trimming the first and last points to anonymize home/work locations. Trips feed aggregate traffic only and are never exposed as individual tracks through the API.

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.

Copyright © 2026