---
title: "Update Support Shift"
method: PATCH
path: "/scheduling/support-shifts/{shift_id}"
tags: ["scheduling"]
---

# Update Support Shift

`PATCH /scheduling/support-shifts/{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/support-shifts/{shift_id}`
- Auth: HTTP bearer

All fields optional; `operator_ids` replaces the on-call list in order.
Same 404 / 409 ineligible_operator / 422 contract as create.

## Path parameters

- `shift_id` string, required

## Request body

- UpdateSupportShiftRequest: Move, resize, reseat or annotate a support shift, IN PLACE. Every field is optional; omitted fields keep their stored value. The merged range is re-checked (a 400 if one end crosses the other or the shift would exceed 24 hours). `operator_ids` REPLACES the roster in the order given (index 0 = primary); `[]` clears every seat and keeps the shift. `notes`: omit the key to keep the stored value, send an explicit null to clear it.
  - `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.
  - `notes` string, nullable: New notes. OMIT the key to keep the stored value; send an explicit null to clear it.
  - `operator_ids` string[], nullable: Replacement on-call list in order - index 0 is the PRIMARY. Omit to keep the current roster; pass [] to clear every seat. Each must be a support or owner user (409 ineligible_operator otherwise).

## Response `200`

Successful Response

- SupportShiftResponse
  - `shift` SupportShiftModel, required: One support on-call block: a center-local wall-clock range with an ordered on-call list.
    - `id` string, uuid, required: The support shift ID. Stable across move and resize.
    - `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; at most start_minute + 1440.
    - `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.
    - `seats` SupportShiftSeatModel[], required: On-call list in seat order - index 0 is the PRIMARY. May be EMPTY: an unassigned block reads as a gap in the rotation.
      - `id` string, uuid, required: The seat's own ID.
      - `shift_id` string, uuid, required: The support shift this seat belongs to.
      - `operator_id` string, uuid, required: The person on call in this seat.
      - `operator_name` string, required: Display name of the seated person, so a read-only viewer needs no GET /operator/ call to render the rotation.
      - `seat_order` integer, required: Position on call, contiguous from 0: 0 is the PRIMARY, 1 the backup, 2+ further backups.
    - `created_at` string, date-time, nullable: When the shift was created.
    - `updated_at` string, date-time, nullable: When the shift was last changed.

## 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/00252d8227c1?raw)
