Schedules (Bereitschaftspläne)
Incident-Management-Bereitschaftspläne auflisten, lesen, anlegen und löschen, und wie die Rotationskadenz eines Schedules funktioniert.
Ein Schedule (Bereitschaftsplan) gehört zu einem Team und einer seiner Eskalationsstufen. Zeitzone, Gültigkeitszeitraum, Wochenfenster, Rotationskadenz und Rotationsgruppen bestimmen, wer wann Schicht hat. Ein Hintergrund-Worker macht daraus konkrete Schichten bis zu 90 Tage im Voraus; Alarmierung, Wer hat Bereitschaft und der Team-Kalender lesen diese Schichten. Diese Endpunkte verwalten die Definition, nicht die Schichten.
Die Rotation konfigurierst du mit Schedule aktualisieren, oder du legst einen fertig konfigurierten Schedule in einem Aufruf mit Schedule zu einer Stufe hinzufügen an. Schedule-Vorschau zeigt die entstehenden Schichten.
Authentifizierung
Basis-IM-Zugriff: eine IM-berechtigte Rolle (admin, editor oder responder) oder ein organisationsweiter API-Token, und Incident Management für die Organisation aktiviert. Auflisten und Lesen darf jeder mit diesem Zugriff. Anlegen und Löschen brauchen die Team-Schreibhürde für das Team des Schedules: Organisationsrolle admin, oder Team-Admin. Ein API-Token läuft mit der Rolle des Users, der ihn erstellt hat, also kommt nur ein Token durch, den ein Organisations-Admin erstellt hat.
Schedules auflisten
GET /api/im/schedules
Liefert jeden Schedule deiner Organisation, sortiert nach Name.
Query-Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
envelope | string | keiner | items: Antwort als { items, total, page, perPage }. Ab 18.01.2027 Standard. |
Beispiel (cURL)
curl -X GET "$BASE_URL/api/im/schedules?envelope=items" \
-H "Authorization: Bearer $TOKEN"Antwort (Response)
200 OK
{
"items": [
{
"id": 7,
"organizationId": 1,
"teamId": 3,
"teamName": "Platform Team",
"name": "Primary On-Call",
"timezone": "Europe/Berlin",
"tierId": 21,
"createdAt": "2026-06-02T08:00:00.000Z",
"updatedAt": "2026-09-14T10:12:00.000Z"
}
],
"total": 1,
"page": 1,
"perPage": 1
}Listenform: Mit envelope=items kommt die Liste als { items, total, page, perPage }. Ohne den Parameter antwortet der Endpunkt noch in der bisherigen Form (ein blankes Array derselben Schedules); sie ist veraltet, ab dem 18.01.2027 ist { items, ... } der Standard.
Schedule lesen
GET /api/im/schedules/:id
Liefert die vollständige Konfiguration des Schedules, sein Team und seine Overrides (gleiche Eintragsform wie unter Schedule-Overrides). rotations listet die Rotationsgruppen mit ihren Mitgliedern (mit userImage), in derselben Form wie schedules[].rotations beim Stufe lesen; sie sind außerdem Teil der Eskalationskette des Teams.
Beispiel (cURL)
curl -X GET "$BASE_URL/api/im/schedules/7" \
-H "Authorization: Bearer $TOKEN"Antwort (Response)
200 OK
{
"id": 7,
"organizationId": 1,
"teamId": 3,
"tierId": 21,
"name": "Primary On-Call",
"timezone": "Europe/Berlin",
"effectiveFrom": null,
"effectiveUntil": null,
"weeklySchedules": [],
"rotationMode": "explicit",
"rotationRepeats": "weekly",
"customRepeatUnit": null,
"customRepeatValue": null,
"autoRotationSize": null,
"roundRobinSize": 1,
"roundRobinCursor": 4,
"startsOnDayOfWeek": 1,
"startsOnDateOfMonth": null,
"startsOnTime": "09:00",
"createdAt": "2026-06-02T08:00:00.000Z",
"updatedAt": "2026-09-14T10:12:00.000Z",
"team": { "id": 3, "name": "Platform Team" },
"overrides": [],
"rotations": [
{
"id": 31,
"rotationOrder": 1,
"members": [
{ "userId": "usr_abc", "userName": "Alex Example", "userImage": null, "memberOrder": 1 }
]
}
]
}roundRobinCursor ist ein interner Zähler für die Round-Robin-Alarmierung und lässt sich nicht setzen.
Schedule erstellen
POST /api/im/schedules
Legt einen leeren Schedule unter einer Stufe an: 24/7, rotationMode: "none", keine Rotationsgruppen. Er alarmiert niemanden, bis du mit Schedule aktualisieren Rotationsgruppen hinzufügst.
Anfrage (Request Body)
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
teamId | number | Ja | Das besitzende Team. Muss zu deiner Organisation gehören. |
tierId | number | Ja | Eine Stufe dieses Teams. |
name | string | Ja | 1 bis 120 Zeichen nach dem Trimmen. |
timezone | string | Ja | IANA-Zone (z. B. Europe/Berlin). Jede Übergabe und jedes Wochenfenster wird in dieser Zone ausgewertet, auch über die Sommerzeit hinweg. |
Beispiel (cURL)
curl -X POST "$BASE_URL/api/im/schedules" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "teamId": 3, "tierId": 21, "name": "Primary On-Call", "timezone": "Europe/Berlin" }'Antwort (Response)
200 OK: der neue Schedule, dieselben Felder wie bei Schedule lesen, ohne team und overrides.
Schedule löschen
DELETE /api/im/schedules/:id
Löscht den Schedule samt Rotationsgruppen, Overrides und Schichten.
Beispiel (cURL)
curl -X DELETE "$BASE_URL/api/im/schedules/7" \
-H "Authorization: Bearer $TOKEN"Antwort (Response)
200 OK
{ "success": true }Rotationskadenz
Die Kadenz bestimmt, wie oft die Bereitschaft übergeben wird. Du setzt sie mit Schedule aktualisieren oder beim Hinzufügen eines Schedules zu einer Stufe.
| Feld | Typ | Beschreibung |
|---|---|---|
rotationMode | string | none (eine durchgehende Schicht, keine Übergabe), auto (der Mitgliederpool wird automatisch in Gruppen aufgeteilt) oder explicit (du definierst die Gruppen). Standard none. |
rotationRepeats | string | null | daily, weekly, biweekly, monthly oder custom. Muss bei none null sein, sonst Pflicht. |
customRepeatUnit | string | null | Pflicht bei custom: minutes, hours, days, weeks oder months. |
customRepeatValue | integer | null | Pflicht bei custom: 1 oder mehr, in der Einheit darüber. |
autoRotationSize | integer | null | Pflicht bei auto: Mitglieder pro automatisch gebildeter Gruppe, 1 oder mehr. |
roundRobinSize | integer | Wie viele Rotationsmitglieder gleichzeitig Bereitschaft haben, 1 oder mehr. Standard 1. |
startsOnTime | string | null | "HH:mm", Uhrzeit der Übergabe in der Zeitzone des Schedules. Pflicht, außer der Modus ist none. |
startsOnDayOfWeek | integer | null | ISO-Wochentag (1 = Montag bis 7 = Sonntag). Pflicht bei weekly, biweekly und custom mit weeks. |
startsOnDateOfMonth | integer | null | 1 bis 31, auf den letzten Tag des Monats begrenzt. Pflicht bei monthly und custom mit months. |
Die kürzeste mögliche Schicht ist eine Minute (customRepeatUnit: "minutes", customRepeatValue: 1). Übergabezeiten sind bei jeder Kadenz minutengenau.
Kadenzen unterhalb eines Tages (minutes, hours) schreiten in absoluter Zeit voran, nicht nach Wanduhr. Über eine Zeitumstellung hinweg übergeben sie deshalb weiterhin alle N Minuten in Echtzeit, statt eine Stunde voller Übergaben zu verdoppeln oder zu überspringen.
Wie weit im Voraus Schichten erzeugt werden
Schichten werden rollierend bis zu 90 Tage im Voraus erzeugt. Eine schnelle Kadenz wird weniger weit vorausberechnet, denn die Zahl der Schichtzeilen ist Horizont geteilt durch Kadenz: Eine Ein-Minuten-Rotation über 90 Tage wären 129.600 Schichten pro Mitglied. Ein solcher Schedule wird stattdessen rund 41 Stunden im Voraus gehalten und stündlich nachgefüllt.
Das ist keine Abdeckungsgrenze. Die Alarmierung liest die aktuell laufende Schicht, und der Materializer läuft weit häufiger, als der Horizont schrumpft. Nur eine Vorschau weit in die Zukunft fällt bei schneller Kadenz kürzer aus. Jede Kadenz ab einer Stunde behält die vollen 90 Tage.
Häufige Fehler
401 Unauthorized(unauthorized) wenn du nicht authentifiziert bist403 Forbidden(imAccessDenied) bei einem kunden-gescopten Token, oder wenn deine Session keine IM-berechtigte Rolle hat403 Forbidden(imNotEnabled) wenn Incident Management für die Organisation nicht aktiviert ist403 Forbidden(imTeamWriteDenied) beim Anlegen oder Löschen, wenn du weder Organisations-Admin noch Team-Admin des Teams bist404 Not Found(imScheduleNotFound) wenn:idnicht existiert oder zu einer anderen Organisation gehört404 Not Found(imTeamNotFound) beim Anlegen, wennteamIdnicht existiert oder zu einer anderen Organisation gehört400 Bad Request(invalidRequestBody) wenn:idkeine positive Ganzzahl ist, oder beim Anlegen, wennteamIdodertierIdfehlt oder keine positive Ganzzahl ist,tierIdkeine Stufe vonteamIdist,namefehlt oder länger als 120 Zeichen ist, odertimezonefehlt oder keine gültige IANA-Zone ist
Schedule-Vorschau
Die Schichten und Abdeckungslücken berechnen, die die gespeicherte Rotation eines Schedules in den nächsten vier Wochen ergibt, ohne etwas zu schreiben.
Dienste
Dienste Ihrer Organisation auflisten, anlegen, ändern und löschen (Dienst- und Asset-Inventar mit Kritikalität und verantwortlichem Team), und wie Vorfälle ihnen zugeordnet werden.