Fixed shifts

A fixed shift is a recurring or one-off coverage window assigned to a specific person on a specific layer. Fixed shifts win over rotations but lose to overrides.

Use cases:

  • "Carol covers every Friday afternoon"
  • "Manager layer is on call only during business hours"
  • Overflow coverage for a known-busy week

List shifts

GET /oncall/layers/{layer_id}/shifts

json
{ "data": [ { "id": "shf_abc", "layer_id": "lyr_p1", "user_id": "usr_carol", "starts_at": "2026-04-17T13:00:00Z", "ends_at": "2026-04-17T17:00:00Z", "recurrence": "weekly", "until": "2026-12-31T00:00:00Z" } ]}

Create shift

POST /oncall/layers/{layer_id}/shifts

user_idstringrequiredbody

Who's covering.

starts_atstringrequiredbody

ISO 8601 start time. For recurring shifts, this is the first occurrence.

ends_atstringrequiredbody

ISO 8601 end time of the first occurrence.

recurrencestringbody

none, daily, weekly, monthly. Default none.

untilstringbody

Stop generating occurrences after this date.

json
{ "user_id": "usr_carol", "starts_at": "2026-04-17T13:00:00Z", "ends_at": "2026-04-17T17:00:00Z", "recurrence": "weekly", "until": "2026-12-31T00:00:00Z"}

Update shift

PATCH /oncall/shifts/{id}

Delete shift

DELETE /oncall/shifts/{id}

Deleting a recurring shift removes all future occurrences. Past coverage is preserved in the timeline.

Ask a question... ⌘I