> ## Documentation Index
> Fetch the complete documentation index at: https://docs.happyuptime.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Fixed shifts

Schedule one-off coverage windows that win over the rotation.

# 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`

Who's covering.

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

ISO 8601 end time of the first occurrence.

`none`, `daily`, `weekly`, `monthly`. Default `none`.

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.