Skip to main content
POST
Submit an async run
V3 is in beta. General availability (GA) is planned for January 2027.

Authorizations

Authorization
string
header
required

Body

application/json

Request body for POST /v3/routing/runs: the POST /v3/routing/solve body, with a longer options.time_limit_s.

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. On synchronous solve and stream, an infeasible locked or pinned stop is a 400. POST /v3/routing/runs checks the problem at submission, not the plan, so there the run ends failed with BAD_REQUEST instead.

Response

Run accepted. It is queued until a worker starts it.

One async run. status selects the variant: which timestamps and error are present follows from it.

id
string<uuid>
required

The run id. Use it in the paths of the other endpoints.

Example:

"d28568b1-34cc-4f89-b10b-dc24b26a8275"

status
enum<string>
required

queued.

Available options:
queued

Paths of the run, relative to the API host.