Route optimization
The dispatch Board view's Optimize routes opens a preview for the whole day, a time window, or two selected jobs. Use All clients; the action is hidden when a client filter would omit other jobs that might move. Branch filtering limits the participating technicians. A proposal may reorder jobs, transfer jobs between technicians/trucks, or swap assignments. It shows current and proposed driving routes, estimated driving minutes, and each assignment/time change. Nothing changes until the dispatcher reviews and applies it.
POST /v1/office/dispatch/optimize accepts { "date": "2026-11-03", "scope": "day" }. Use scope: "window" with from and to in minutes after midnight, or scope: "pair" with exactly two jobIds. Optional personIds restricts both the selected jobs and destination technicians. The API supports owners and dispatchers with company-wide access, not platform keys or narrowed team/own scopes.
Only future flexible single-technician, single-day jobs in the company time zone are eligible. Started/completed work, fixed appointments, other time zones and multi-technician/multi-day jobs stay in place. At most 40 jobs can be optimized in one preview; use a time window or branch filter for larger days. Jobs stay within the selected day/window. The booking engine checks skills, working hours, calendar blocks, service areas, buffers, daylight restrictions and required CrewConnect credentials.
The planner searches feasible transfers and pair swaps; it does not claim a mathematically global optimum. A road provider must be connected. Estimated savings are displayed only when the road provider's proposed total is lower than the original total. Traffic can change. Preview maps show road geometry, never fabricated connecting curves.
POST /v1/office/dispatch/optimize/{id}/apply applies the reviewed changes in one transaction after checking the current schedule and availability. It sends the normal job-change notifications, respecting company/job messaging preferences. A stale or expired proposal returns 409 without applying changes. Successful retries return the prior result without duplicate moves or notifications. Proposals are private to their creator, expire after ten minutes, and are invalidated by a server restart. Generate a fresh preview after a restart.