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/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

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

One async run.

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

Where a run is. queued until a worker claims it, then running. succeeded, failed and cancelled are final.

Available options:
queued,
running,
succeeded,
failed,
cancelled

Paths of the run, relative to the API host.

error
object

Present when status is failed.

started_at
string<date-time>

When a worker claimed the run, in UTC. Absent while the run is queued.

Example:

"2026-10-15T07:40:59Z"

finished_at
string<date-time>

When the run reached a final state, in UTC. Absent before then.

Example:

"2026-10-15T07:41:00Z"

expires_at
string<date-time>

When the run and its plan are deleted: finished_at plus 365 days. Absent before the run is final.

Example:

"2027-10-15T07:41:00Z"