---
title: "Team-Bereitschaft und Statistik"
description: "Lesen, wer in einem Team gerade Bereitschaft hat, den Bereitschaftskalender des Teams für ein Zeitfenster und die Incident-Statistik des Teams."
---

Lesende Ansichten auf ein Team: die aktuelle Bereitschaft je Stufe, der Bereitschaftskalender und die Incident-Statistik. Die organisationsweite Ansicht steht unter [Wer hat Bereitschaft](/de/api/incident-management/on-call).

## 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. Eine Team-Rolle ist nicht nötig. Ein Team einer anderen Organisation antwortet mit `404`.

## Bereitschaft jetzt

`GET /api/im/teams/:id/on-call-now`

Ein Eintrag je Eskalationsstufe, in Stufenreihenfolge, mit allen, die in dieser Stufe gerade Bereitschaft haben. Overrides sind bereits angewendet. Eine Stufe ohne Bereitschaft (kein Schedule oder eine Lücke) hat ein leeres `users`-Array.

### Beispiel (cURL)

```bash
curl -X GET "$BASE_URL/api/im/teams/3/on-call-now" \
  -H "Authorization: Bearer $TOKEN"
```

### Antwort (Response)

`200 OK`

```json
[
  {
    "tierId": 21,
    "tierOrder": 1,
    "users": [{ "userId": "u_abc123", "userName": "Ada Lovelace", "userImage": null }]
  },
  { "tierId": 22, "tierOrder": 2, "users": [] }
]
```

## Kalender

`GET /api/im/teams/:id/calendar`

Bereitschaftszeiträume aller Stufen in einem Zeitfenster, als flache Liste sortiert nach Beginn. Team-Overrides sind bereits angewendet.

### Query-Parameter

| Parameter | Typ | Erforderlich | Beschreibung |
|-----------|------|----------|-------------|
| `from` | string | Ja | ISO-8601-Zeitstempel, Beginn des Fensters (inklusive). |
| `to` | string | Ja | ISO-8601-Zeitstempel, Ende des Fensters (exklusive). Muss nach `from` liegen. |
| `tier` | integer | Nein | Eine Stufen-ID dieses Teams: nur die Zeiträume dieser Stufe. Eine ID, die keine Stufe des Teams ist, liefert `[]`. |

### Beispiel (cURL)

```bash
curl -X GET "$BASE_URL/api/im/teams/3/calendar?from=2026-10-01T00:00:00Z&to=2026-11-01T00:00:00Z" \
  -H "Authorization: Bearer $TOKEN"
```

### Antwort (Response)

`200 OK`

```json
[
  {
    "scheduleId": 7,
    "tierOrder": 1,
    "userId": "u_abc123",
    "userName": "Ada Lovelace",
    "startsAt": "2026-09-28T07:00:00.000Z",
    "endsAt": "2026-10-05T07:00:00.000Z",
    "userImage": null
  },
  {
    "scheduleId": null,
    "tierOrder": 1,
    "userId": "u_def456",
    "userName": "Bob Fixit",
    "startsAt": "2026-10-10T18:00:00.000Z",
    "endsAt": "2026-10-12T08:00:00.000Z",
    "userImage": null,
    "isTeamOverride": true
  }
]
```

- Ein Zeitraum überlappt das Fenster, kann aber vor `from` beginnen oder nach `to` enden.
- `scheduleId: null` mit `isTeamOverride: true` markiert einen Zeitraum, der aus einem Team-Override stammt statt aus einem Schedule. Bei allen anderen Zeiträumen fehlt der Schlüssel.
- Ein Team ohne Stufen liefert `[]`.

## Incident-Statistik

`GET /api/im/teams/:id/incidents/stats`

Anzahl und Reaktionszeiten der Team-Incidents, die in einem Fenster ausgelöst wurden, dieselben Werte für das gleich lange Fenster direkt davor, und ein Datenpunkt pro Tag. Test-Incidents zählen nicht mit.

### Query-Parameter

| Parameter | Typ | Erforderlich | Beschreibung |
|-----------|------|----------|-------------|
| `from` | string | Ja | ISO-8601-Zeitstempel, Beginn des Fensters (inklusive). |
| `to` | string | Ja | ISO-8601-Zeitstempel, Ende des Fensters (exklusive). Höchstens 400 Tage nach `from`. |
| `tz` | string | Nein | IANA-Zone für die Tageswerte. Fehlt sie oder ist sie ungültig, gilt die Zeitzone des Teams, dann `UTC`. |
| `severity` | string | Nein | Nur diese Schweregrade: `sev1` bis `sev4`. Wiederholbar (`?severity=sev1&severity=sev2`). |
| `status` | string | Nein | Nur diese Status: `triggered`, `acknowledged`, `investigating`, `identified`, `monitoring`, `resolved`, `merged`. Wiederholbar. |

### Beispiel (cURL)

```bash
curl -G "$BASE_URL/api/im/teams/3/incidents/stats" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "from=2026-10-01T00:00:00+02:00" \
  --data-urlencode "to=2026-10-08T00:00:00+02:00" \
  --data-urlencode "tz=Europe/Berlin"
```

### Antwort (Response)

`200 OK`

```json
{
  "from": "2026-09-30T22:00:00.000Z",
  "to": "2026-10-07T22:00:00.000Z",
  "comparisonFrom": "2026-09-23T22:00:00.000Z",
  "comparisonTo": "2026-09-30T22:00:00.000Z",
  "current": {
    "total": 12,
    "resolved": 10,
    "resolvedPct": 83.3,
    "open": 2,
    "mttaSeconds": 184,
    "ttaMedianSeconds": 95,
    "mttrSeconds": 2710,
    "ttrMedianSeconds": 1800
  },
  "previous": {
    "total": 8,
    "resolved": 8,
    "resolvedPct": 100,
    "open": 0,
    "mttaSeconds": 240,
    "ttaMedianSeconds": 150,
    "mttrSeconds": 3300,
    "ttrMedianSeconds": 2400
  },
  "timeSeries": [
    { "date": "2026-10-01", "count": 3, "resolvedCount": 3, "mttaSeconds": 120, "mttrSeconds": 1500 },
    { "date": "2026-10-02", "count": 0, "resolvedCount": 0, "mttaSeconds": null, "mttrSeconds": null }
  ]
}
```

- `open` zählt Incidents in `triggered`, `acknowledged`, `investigating`, `identified` oder `monitoring`. `merged`-Incidents stecken in `total`, aber weder in `resolved` noch in `open`.
- `resolvedPct` ist `null`, wenn `total` `0` ist. MTTA/MTTR sind Sekunden, Mittelwerte und Mediane über die bestätigten bzw. gelösten Incidents; `null`, wenn es keine gibt.
- `timeSeries` hat einen Punkt pro Kalendertag des Fensters in `tz`, auch für Tage ohne Incidents.

## Häufige Fehler

- `401 Unauthorized` (`unauthorized`) wenn du nicht authentifiziert bist
- `403 Forbidden` (`imAccessDenied`) bei einem kunden-gescopten Token, oder wenn deine Session keine IM-berechtigte Rolle hat
- `403 Forbidden` (`imNotEnabled`) wenn Incident Management für die Organisation nicht aktiviert ist
- `404 Not Found` (`imTeamNotFound`) wenn das Team nicht existiert oder zu einer anderen Organisation gehört
- `400 Bad Request` (`invalidRequestBody`) wenn `:id` keine positive Ganzzahl ist, oder (Statistik) ein Wert in `severity` oder `status` unbekannt ist
- `422 Unprocessable Entity` (`invalidRequestBody`) (Kalender) wenn `from` oder `to` fehlt oder kein gültiger Zeitstempel ist, `from` nicht vor `to` liegt, oder `tier` keine positive Ganzzahl ist
- `400 Bad Request` (`imReportRangeRequired`) (Statistik) wenn `from` oder `to` fehlt oder kein gültiger Zeitstempel ist
- `400 Bad Request` (`imReportRangeInvalid`) (Statistik) wenn `from` nicht vor `to` liegt
- `400 Bad Request` (`imReportRangeTooLarge`) (Statistik) wenn das Fenster länger als 400 Tage ist
