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

# Overrides & fixed shifts

When the rotation needs to bend — vacations, holiday coverage, last-minute swaps.

# Overrides & fixed shifts

Two ways to deviate from the rotation, with different priority:

| Mechanism | Priority | Scope | When to use |
|---|---|---|---|
| **Override** | Highest — beats fixed shifts and rotation | Schedule-wide (covers all layers) OR layer-specific | "Alice is covering for Bob this week — for everything." |
| **Fixed shift** | Wins over rotation, loses to overrides | Always layer-specific | "I'll take Saturday's shift on the secondary layer." |

## When to use which

**Override — vacation cover**

Bob is taking next week off. Alice is covering Bob's shifts.

    1. Click the **Overrides** button on the schedule card.
    2. Click **Add override**.
    3. Pick Alice as the user, set Mon 00:00 → next Mon 00:00.
    4. Save.

    During that window, Alice is shown as the on-call person on every layer Bob would have been on.

  **Fixed shift — weekend swap**

Carol normally has Sunday but is going to a conference. David volunteers to take that Sunday on the Primary layer.

    1. Click **Shifts** on the schedule card.
    2. Click **Add shift**.
    3. Pick the Primary layer, David as the user, Sunday 00:00 → Monday 00:00.
    4. Save.

    Carol's rotation is unchanged otherwise. David is on call for that single Sunday on the Primary layer only.

  **Override — sick day**

Same as vacation but shorter. Set start to "now", end to end-of-day.

  **Layer-specific override**

Override Layer 0 only — leave Layer 1 (secondary) untouched. From the API, set `layer_id` on the POST. Useful when Bob is sick but only on Primary; Secondary still rotates normally.

## Resolution priority

For a given layer at time T, Happy Uptime walks:

1. **Override active right now?** Yes → use the override's user.
2. **Fixed shift on this layer right now?** Yes → use the shift's user.
3. **Otherwise** — use the rotation winner.

Layer-specific overrides win over schedule-wide overrides. If both exist for the same layer at the same time, the layer-specific one wins.

## Calendar visibility

Both overrides and fixed shifts show up in:
- The **Calendar** modal (per-layer timeline view) with amber rings (override) or sky rings (fixed shift)
- The [iCal export](/integrations/calendar) — anyone subscribed to the schedule's `.ics` feed sees them
- The **Currently on call** banner with a badge

## API

```
POST /oncall/schedules/:id/overrides
  { user_id, start_at, end_at, reason?, layer_id? }

POST /oncall/schedules/:id/shifts
  { layer_id, user_id, start_at, end_at, reason? }
```

See [overrides API](/api/oncall/overrides) and [shifts API](/api/oncall/shifts).