Bookings›Commit a schedule-board job move
Commit a schedule-board job move
Applies the move previewed by /move/preview: places the job on the technician at the new time and pushes the displaced jobs back, atomically (per-tech advisory lock; the server recomputes the plan and fences each job on its status_version — drift since the preview returns 409 SCHEDULE_MOVE_PLAN_DRIFTED, re-preview). Same body as preview + optional `expected_version`. See SCHEDULE_BOARD_DESIGN.md. 409 NEXT STEPS: SCHEDULE_MOVE_PLAN_DRIFTED — the schedule changed since your preview (or expected_move_ids no longer match): re-preview, show the fresh plan, commit again. All other codes — same remedies as /move/preview.
Arguments
idstringpathrequired
Job request ID (UUID or short_code)
Idempotency-Keystringheaderoptional
Unique key making retries safe: a repeat send with the same key replays the original response (header Idempotent-Replayed: true) instead of re-running the operation. Reusing a key with a different body returns 422 IDEMPOTENCY_KEY_REUSE.
expected_member_idsarray<string>bodyoptional
ExpectedMemberIDs — crew moves only: the FULL member set the preview
staffed (echo data.members[].technician_id). If the commit's re-plan
would staff a DIFFERENT set (a previewed replacement got booked in the
meantime), the commit is rejected with SCHEDULE_MOVE_PLAN_DRIFTED —
crew swaps are never approved unseen. Omit to opt out.
expected_move_idsarray<string>bodyoptional
ExpectedMoveIDs — the displaced job IDs the preview returned (echo
data.days[].moves[].job_id). Optional but RECOMMENDED: if the schedule
changed so the commit would push a different set (e.g. a job booked onto
the target tech since the preview), the commit is rejected with
SCHEDULE_MOVE_PLAN_DRIFTED instead of silently pushing an unseen job.
expected_versionintegerbodyoptional
ExpectedVersion — the moved job's status_version from the preview
(0 = fence on the fresh plan-read value; negatives rejected).
modeenumbodyrequired
Cascade mode: overtime | next_day (must match the preview).
start_atstringbodyrequired
New start — business-local naive datetime, no offset. Must match the preview and be in the future.
technician_idstringbodyrequired
Target technician (must match the preview).
POST/v1/job-requests/{id}/move/commit
curl -X POST "https://api.crisphive.com/v1/job-requests/9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01/move/commit" \ -H "Authorization: Bearer chsk_test_4eC8xQ9mZ2pL7Ka0rT" \ -H "Content-Type: application/json" \ -d '{ "expected_member_ids": [ "9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01" ], "expected_move_ids": [ "9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01" ], "expected_version": 1, "mode": "overtime", "start_at": "2030-06-14T09:00:00", "technician_id": "9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01" }'
Request body
{
"expected_member_ids": [
],
"expected_move_ids": [
],
"expected_version": ,
"mode": ,
"start_at": ,
"technician_id":
}
Bearer