---
title: "Schedule-Overrides"
description: "On-Call-Schedule-Overrides auflisten und hinzufügen: einmalige „X vertritt Y“-Zeitfenster zusätzlich zur regulären Rotation eines Schedules."
---

`GET /api/im/schedules/:id/overrides` · `POST /api/im/schedules/:id/overrides`

Ein **Override** ist ein einmaliges „X vertritt Y"-Zeitfenster auf einem [Schedule](./schedules): Ein User springt für einen festen Zeitraum ein, zusätzlich zu dem, was die reguläre Rotation sonst ergeben würde: ein Urlaubstausch oder eine Krankheitsvertretung, ohne die Rotation selbst zu bearbeiten. Overrides werden vom selben Hintergrund-Worker zu Schichten materialisiert, der auch die reguläre Rotation materialisiert.

## Authentifizierung

Erfordert den Basis-IM-Zugriff, den jeder Endpunkt dieser API benötigt (eine IM-berechtigte Rolle, oder einen organisationsweiten API-Token; Incident Management muss für die Organisation aktiviert sein). Das Auflisten steht jeder IM-berechtigten Rolle offen. Das **Hinzufügen** eines Overrides erfordert zusätzlich die Schreib-Hürde: Deine Rolle muss `admin` sein, oder du musst Team-Admin des Schedule-Teams sein.

## Overrides auflisten

`GET /api/im/schedules/:id/overrides`

Liefert die Overrides des Schedules, sortiert nach `id`. **Diese Reihenfolge ist zwingend**, nicht beiläufig. `im_schedule_override` hat keine Prioritätsspalte: Der Vorrang zwischen überlappenden Overrides wird durch die Erstellungsreihenfolge entschieden (der zuletzt erstellte gewinnt), und der Materializer liest sie in genau dieser Reihenfolge. Dieser Endpunkt kann kein Umsortieren anbieten, da es keinen Ort gibt, an dem eine umsortierte Rangfolge gespeichert werden könnte.

### Beispiel (cURL)

```bash
curl -X GET "$BASE_URL/api/im/schedules/7/overrides" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
```

### Antwort (Response)

`200 OK`

```json
[
  {
    "id": 12,
    "scheduleId": 7,
    "userId": "u_abc123",
    "userName": "Jane Doe",
    "startsAt": "2026-08-01T00:00:00.000Z",
    "endsAt": "2026-08-08T00:00:00.000Z",
    "createdAt": "2026-07-20T10:00:00.000Z"
  }
]
```

## Override hinzufügen

`POST /api/im/schedules/:id/overrides`

### Request Body

| Feld | Typ | Erforderlich | Beschreibung |
|-------|------|----------|--------------|
| `userId` | string | Ja | Der User, der in diesem Zeitfenster einspringt. Muss zu deiner Organisation gehören. |
| `startsAt` | ISO-8601-Datum/Zeit | Ja | Beginn des Zeitfensters. |
| `endsAt` | ISO-8601-Datum/Zeit | Ja | Ende des Zeitfensters. Muss echt nach `startsAt` liegen. |

### Beispiel (cURL)

```bash
curl -X POST "$BASE_URL/api/im/schedules/7/overrides" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "u_abc123",
    "startsAt": "2026-08-01T00:00:00.000Z",
    "endsAt": "2026-08-08T00:00:00.000Z"
  }'
```

### Antwort (Response)

`200 OK`: die neu erstellte Override-Zeile (gleiche Form wie oben in der Liste).

## Häufige Fehler

- `401 Unauthorized` wenn du nicht authentifiziert bist
- `403 Forbidden` (`imAccessDenied`) bei Verwendung eines kunden-gescopten Tokens, oder wenn deine Session keine IM-berechtigte Rolle hat
- `403 Forbidden` (`imNotEnabled`) wenn Incident Management für die Organisation nicht aktiviert ist
- `403 Forbidden` (`imTeamWriteDenied`) (nur beim Hinzufügen) wenn deine Rolle nicht `admin` ist und du kein Team-Admin des Schedule-Teams bist
- `404 Not Found` (`imScheduleNotFound`) wenn `:id` nicht existiert oder zu einer anderen Organisation gehört
- `400 Bad Request` (`invalidRequestBody`) (nur beim Hinzufügen) wenn `userId` fehlt, `startsAt`/`endsAt` fehlt oder kein gültiger Zeitstempel ist, oder `startsAt` nicht echt vor `endsAt` liegt
- `404 Not Found` (`userNotFound`) (nur beim Hinzufügen) wenn `userId` nicht zu deiner Organisation gehört
