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
Request mapping
Vehicles (Resources → Vehicles)
name→idshifts[].start/endmove to insideshifts[]as aPlace({ "coordinate": [lon, lat] }) — this is still inside the shift in both V2 and V3, but the coordinate format changes- Coordinates:
{ "latitude", "longitude" }object →{ "coordinate": [longitude, latitude] }Place (GeoJSON order, wrapped in object) capacity: array[100]→ named map{ "weight": 100 }(dimension names must match jobdemandkeys)tags→skills(note: V2 tags are not automatically mapped when using the V2 compat endpoint)- New:
limits.max_distance_m,limits.max_drive_time_sfor vehicle range constraints
Jobs
name→idlocation:{ "latitude", "longitude" }→ Place object{ "coordinate": [longitude, latitude] }duration→service_duration_s(still in seconds)loadarray →demandnamed map (e.g.[10]→{ "weight": 10 })windows→time_windows(nohardflag — all time windows are hard in V3 Phase 1)- Skills and committed vehicle:
skills: [{ "name": "refrigerated" }],eligible_vehicles: { "allowed": ["truck-1"] }— Coming soon (Phase 2)
Relations
V3 uses a tagged-union format withjob_ids (not jobs). V2 relation types map as follows:
resource field (pin relation to a specific vehicle) is not yet supported in V3. Use eligible_vehicles on individual jobs as a workaround — Coming soon.
Options
- V2’s
?millis=query parameter (already in milliseconds) →options.runtime.time_limit_msrequest body field (also milliseconds) - New:
options.runtime.seedfor reproducible results - New:
options.runtime.matrix— supply custom distance/duration matrices (bypasses Solvice Maps) - Objective tuning (minimize time vs. distance) is configured via the
objectivefield — Coming soon
Response mapping
trips→routes;resource→vehicleobject{ "type": "truck-1", "instance": 1 }visits→stops(typed:start,job,end, etc.)- V3 stops carry
type,id,arrival,departure,wait_s,service_s,travel_time_s,load_after(named map) - V3 routes use
distance_m/duration_s(not baredistance/duration) unserved(string list) →unassigned(objects withjob_idandreasons[])- New
summaryblock withjobs_assigned/jobs_unassigned,total_distance_m,total_duration_s,estimated_cost,elapsed_ms,iterations - Coordinates in response are bare
[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 solverrelations[].resource— pinning a relation to a specific vehicle is ignoredwindows[].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.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.