Skip to main content

Overview

The V3 Routing API is a ground-up rewrite with a new, faster solver engine replacing Timefold. The V2 endpoint (/v2/vrp/sync/solve) remains available for backwards compatibility — internally it maps to V3 and back.

Endpoint change

V2 (OnRoute)V3 (Routing)
URLPOST /v2/vrp/sync/solvePOST /v3/routing/solve
AuthAuthorization: API_KEYAuthorization: API_KEY
Coordinate format{"latitude": 50.85, "longitude": 4.35}[4.35, 50.85] (GeoJSON: lon, lat)
Time formatISO 8601 stringsISO 8601 strings
Field namingcamelCasesnake_case

Request mapping

Vehicles (Resources → Vehicles)

{
  "name": "truck-1",
  "shifts": [
    {
      "from": "2026-04-01T08:00:00+02:00",
      "to": "2026-04-01T17:00:00+02:00",
      "start": { "latitude": 50.8503, "longitude": 4.3517 },
      "end": { "latitude": 50.8503, "longitude": 4.3517 }
    }
  ],
  "capacity": [100],
  "tags": ["refrigerated"]
}
Key differences:
  • nameid
  • shifts[].start/end (locations inside shift) → top-level start/end (shifts can override per-shift)
  • Coordinates: {latitude, longitude} object → [longitude, latitude] array (GeoJSON order)
  • tagsskills (note: V2 tags are not automatically mapped when using the V2 compat endpoint)
  • New: max_distance, max_duration for vehicle range constraints

Jobs

{
  "name": "delivery-1",
  "location": { "latitude": 50.8798, "longitude": 4.7005 },
  "duration": 300,
  "load": [10],
  "windows": [
    {
      "from": "2026-04-01T09:00:00+02:00",
      "to": "2026-04-01T12:00:00+02:00",
      "hard": true
    }
  ]
}
Key differences:
  • nameid
  • location: {latitude, longitude}[longitude, latitude]
  • durationservice_duration
  • loaddemand
  • windowstime_windows (no hard flag — all time windows are hard in V3)
  • New: skills (required vehicle capabilities), committed_vehicle (lock job to a specific vehicle)

Relations

Relations map directly — same type and jobs fields in both versions.
{
  "type": "SEQUENCE",
  "jobs": ["job-A", "job-B", "job-C"],
  "resource": "truck-1"
}
Note: V2’s resource field (pin relation to a specific vehicle) is not yet mapped in V3.

Options

{
  "solvingTime": 30
}
Key differences:
  • solvingTime (seconds) → time_limit_ms (milliseconds)
  • New: seed for reproducible results
  • New: minimize — choose "time" or "distance" as primary objective
  • New: matrix — supply custom distance/duration matrices (bypasses Solvice Maps)
  • New: job_proximity_radius_m, job_proximity_weight — soft proximity constraint

Response mapping

{
  "trips": [
    {
      "resource": "truck-1",
      "visits": [
        {
          "job": "delivery-1",
          "arrival": "2026-04-01T09:30:00+02:00",
          "location": { "latitude": 50.8798, "longitude": 4.7005 }
        }
      ],
      "travelTime": 3600,
      "distance": 30000
    }
  ],
  "unserved": ["delivery-3"],
  "unservedReasons": {
    "delivery-3": ["Time window violated"]
  },
  "totalTravelTimeInSeconds": 3600,
  "totalTravelDistanceInMeters": 30000
}
Key differences:
  • tripsroutes, resourcevehicle_id
  • visitsstops (job stops only, no depot entries)
  • V3 stops are richer: job_id, arrival, departure, wait_time, travel_time, service_time, load_after
  • V3 routes include: shift_from/shift_to, load, n_stops, start_time/end_time
  • unserved (string list) → unassigned (objects with job_id and reason)
  • New summary block with solve stats (elapsed_ms, iterations, vehicles_used)
  • Coordinates in response are [longitude, latitude] arrays

V2 features not mapped via compat endpoint

When using the V2 endpoint (/v2/vrp/sync/solve), the following V2 fields are silently dropped during conversion:
  • resources[].tags — V2 skill tags are not forwarded to the V3 solver
  • relations[].resource — pinning a relation to a specific vehicle is ignored
  • windows[].hard — soft time window flag has no V3 equivalent yet
  • Per-visit serviceTime, travelTime, distance — not populated in the V2 response

Feature parity

V3 currently implements a subset of V2’s features. The rest are on the roadmap.
FeatureV2V3Notes
Capacity (single dimension)
Time windows (hard, single)
Skills / tags
Sequence / precedence
First-job constraint
Vehicle range (max distance/duration)
Committed vehicle
Custom distance matrix
Auto distance matrix (Solvice Maps)
Multi-dimensional capacity🔜End Q2 2026
Multiple time windows per job🔜End Q2 2026
Driver breaks🔜End Q2 2026
Job priority🔜End Q2 2026
Soft time windows🔜End Q2 2026
Skill levels / proficiency🔜End Q2 2026
Job relations (same route, etc.)🔜End Q2 2026
Break management🔜End Q2 2026
Tag ranking🔜End Q2 2026
Inherited location🔜End Q2 2026
Pickup & delivery pairing🔜End Q3 2026
Workload balancing / fairness🔜End Q3 2026
Rules engine🔜End Q3 2026
Multi-day planning🔜End Q3 2026
Real-time re-optimization🔜End Q3 2026
SSE streaming progressNew in V3
Job proximity constraintNew in V3
V3 is under active development. The V2 endpoint (/v2/vrp/sync/solve) remains available and internally maps to the V3 solver — you get V3’s performance with the V2 API contract.