Skip to main content
POST
Suggest best insertions for the tasks outside the plan
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/suggest.

The same body as POST /v3/routing/evaluate, plus optional options. Given the committed plan over problem, ranks the feasible insertion positions for every task of problem that is not in plan — the tasks a solve would place and an evaluate would report as unassigned. Each task (or unit — a shipment, or tasks tied by one sequence/same_vehicle/ same_day/same_route relation) is ranked independently against the same committed plan; the plan is never modified.

plan
object
required

The committed plan. Never modified, never reordered. On suggest, locked_count keeps insertions after a route's dispatched prefix.

problem
object
required

Problem definition — identical to POST /v3/routing/solve. Every task of it that is not in plan is a task to place.

Example:
options
null | object

Suggest options. Absent: the defaults.

Example:

Response

Suggestions computed.

Response body for POST /v3/routing/suggest.

suggestions
object[]
required

One entry per unit of tasks outside plan, in problem order (jobs, then shipments; a relation group sorts at its first-listed member).

timings
object
required

Where the request's wall-clock time went. Only total_ms is set: suggest has no separate search figure.

Example:
truncated
boolean
required

true when options.time_limit_s cut the search short, a multi-member unit came back empty after the search had discarded candidates (an inconclusive "not found"; its reason.code is candidates_exhausted), or a crew lists fewer than max_insertions after a member's cheapest slot was refused and its other slots went untried. Lists may then be incomplete or missing the best insertion. A single visit's only level is never pruned, so its empty list is proof of infeasibility unless the budget cut it, and its reason.code is then time_limit.

warnings
object[]
required

Inputs the request carried that changed nothing, as on a solve response. Always present, empty when there are none; at most 100 are returned.

travel_estimated
boolean

true when travel times could not be fetched and the insertions were ranked on estimated travel, as summary.travel_estimated on a solve: straight-line distance × a detour factor, at a typical speed for the profile. Every delta, arrival and feasibility verdict holds only against it. Send options.travel_fallback: "fail" to get the error instead. Absent when travel came from the requested engine, straight_line included.