---
title: "Create Support Shift"
method: POST
path: "/scheduling/support-shifts"
tags: ["scheduling"]
---

# Create Support Shift

`POST /scheduling/support-shifts`

## 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`
- Auth: HTTP bearer

404 for an unknown operator id; 409 `{detail: {code:
"ineligible_operator"}}` when one is not a support or owner user; 422 for
duplicates or a bad range.

## Request body

- CreateSupportShiftRequest: Create one block on the support on-call rotation. Same wall-clock range contract as a shift block (see OperatorShifts' docstring). Overlapping another support shift is allowed - a handoff is two overlapping blocks, and the most-recently-started one is on call.
  - `shift_date` string, date, required: Center-local calendar date the shift STARTS on.
  - `start_minute` integer, required: Minutes after local midnight of shift_date; multiple of 15.
  - `end_minute` integer, required: Minutes after local midnight of shift_date; multiple of 15, greater than start_minute, and at most start_minute + 1440. Values above 1440 are the overnight case.
  - `notes` string, nullable: Free-form notes about the shift.
  - `operator_ids` string[]: People on call, in order: index 0 is the PRIMARY, 1 the backup, 2+ further backups. Each must be a support or owner user (409 ineligible_operator otherwise). May be empty: an unassigned block reads as a gap in the rotation.

## 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/35a2a6ebedda?raw)
