Skip to main content
POST
Solve a vehicle routing problem
V3 is in beta. General availability (GA) is planned for January 2027.

Authorizations

Authorization
string
header
required

Query Parameters

validate_only
boolean

Check the request without fetching a matrix or searching. 200 {"valid": true, "warnings": []}, or a 400 for the problem, options and caps; plan is matched against the problem only by the real call, after the fetch (suggest's check that plan leaves a task to place does run here). Any other query parameter is rejected with a 400 unknown_field, as in the body: a misspelt validateOnly must not fall through to a billed solve.

Body

application/json

Request body for POST /v3/routing/solve.

problem
object
required

The problem: tasks, fleet, depots, relations, objective, travel.

Example:
options
null | object

Solve options.

Example:
plan
null | object

Warm start: the plan the search starts from instead of constructing from scratch (re-optimization). A result's plan goes in as it stands. See plan.routes[].locked_count for freezing a dispatched prefix.

A hint, not a guarantee: an unlocked stop that violates a hard constraint (e.g. capacity, skills, eligibility, limits.*, or a time window with no per_late_hour set) is left unassigned and the search reinserts it wherever it legitimately fits, or it surfaces in unassigned[] with a typed reason. An infeasible locked stop is a 400.

Response

Solution found. With ?validate_only=true: a ValidateOnlyResponse, {"valid": true, "warnings": []}, without a matrix fetch or a search, not billed.

The 200 body of solve, evaluate and suggest: the call's result, or with ?validate_only=true the validation verdict (ValidateOnlyResponse).

plan
object
required

The plan these routes follow, in the request's vocabulary: valid input to evaluate, suggest or a warm-started solve as it stands.

routes
object[]
required

One entry per non-empty route.

summary
object
required

Aggregate statistics for the solve run.

Example:
unassigned
object[]
required

Tasks that could not be feasibly assigned.