---
title: "Update Shift Block"
method: PATCH
path: "/scheduling/shift-blocks/{shift_id}"
tags: ["scheduling"]
---

# Update Shift Block

`PATCH /scheduling/shift-blocks/{shift_id}`

## Request

- Base URL: `https://api.verdun.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.verdun.ai/scheduling/shift-blocks/{shift_id}`
- Auth: HTTP bearer

## Path parameters

- `shift_id` string, required

## Request body

- UpdateShiftBlockRequest: Move, resize, reseat or annotate an existing shift block. Every field is optional; omitted fields keep their stored value. The row is updated IN PLACE - `id` never changes across a move or a resize, because the calendar-invite work keys an iCalendar UID on it and a churned id reads as cancel-and-reinvite in every operator's calendar. Passing an empty `operator_ids` CLEARS the seats and keeps the shift (an unassigned block reads as a coverage gap). Deleting is DELETE. `notes` and `color` are nullable, so OMITTING the key and sending an explicit null mean different things: omit to keep the stored value, send null to clear it (for `color`, null resets the shift to its coverage group's color).
  - `shift_date` string, date, nullable: New center-local start date (omit to keep).
  - `start_minute` integer, nullable: New start, minutes after local midnight; multiple of 15.
  - `end_minute` integer, nullable: New end, minutes after local midnight of shift_date; multiple of 15.
  - `operator_ids` string[], nullable: Replacement seat list in seat order - index 0 is the PRIMARY. Omit to keep the current roster; pass [] to clear every seat.
  - `notes` string, nullable: New notes. OMIT the key to keep the stored value; send an explicit null to clear it. (Omitted and null are distinguished by the field's presence in the request body, not by its value.)
  - `color` string, nullable: New per-shift display color (hex). OMIT the key to keep the stored value; send an explicit null to reset the shift to its coverage group's color. (Omitted and null are distinguished by the field's presence in the request body, not by its value.)

## Response `200`

Successful Response

- ShiftBlockResponse
  - `block` ShiftBlockModel, required: One shift block: a center-local wall-clock range with an ordered roster.
    - `id` string, uuid, required: The shift ID. Stable across move and resize.
    - `group_id` string, uuid, required: The coverage group being scheduled.
    - `shift_date` string, date, required: Center-local calendar date the shift STARTS on.
    - `start_minute` integer, required: Minutes after local midnight of shift_date (0-1439, multiple of 15).
    - `end_minute` integer, required: Minutes after local midnight of shift_date. Exceeds 1440 for an overnight shift (1560 = 02:00 the next day); at most start_minute + 1440.
    - `start_time` string, required: start_minute as center-local HH:MM.
    - `end_time` string, required: end_minute as center-local HH:MM.
    - `end_day_offset` integer, required: 0 when the shift ends on shift_date, 1 when it runs past midnight.
    - `notes` string, nullable: Free-form notes about the shift.
    - `color` string, nullable: Optional per-shift display color (hex). Null = inherit the coverage group's color.
    - `seats` ShiftSeatModel[], required: Seated operators in seat order - index 0 is the PRIMARY. May be EMPTY: an unassigned block is a real product state (it reads as a coverage gap), not an error.
      - `id` string, uuid, required: The seat's own ID. Stable across reseats the operator survives - the calendar-invite work keys an iCalendar UID on it.
      - `operator_id` string, uuid, required: The seated operator.
      - `seat_order` integer, required: Position in the seat list, contiguous from 0. Seat 0 is the shift's PRIMARY, who bears a miss during the shift.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verdun/apis/verdun-api.md) - [All operations](https://skmtc.dev/verdun/apis/verdun-api/llms.txt) - [OpenAPI document](https://skmtc.dev/verdun/apis/verdun-api/revisions/35a2a6ebedda?raw)
