---
title: "Komponente erstellen"
description: "Fügt einer Status-Seite einen Monitor, einen Drittanbieter oder eine von Hand gepflegte Komponente hinzu."
---

`POST /api/status-pages/{id}/components`

## Zugriff

Organisations-`admin` und `editor`. Ein kundengebundener Nutzer oder API-Token erreicht nur Seiten eines Kunden in seinem Bereich; eine Seite ohne Kunde (`customerId: null`) beantwortet ihm `403` (`forbidden`). Eine Seite einer anderen Organisation antwortet `404` (`statusPageNotFound`). IDs im Pfad nehmen die numerische ID oder die `publicId`. Die Änderung steht im Audit-Protokoll der Organisation.

## Request-Body

| Feld | Typ | Pflicht | Standard | Beschreibung |
|------|-----|---------|----------|--------------|
| `sourceKind` | string | Ja | - | `monitor` (Zustand kommt von einem Monitor), `dependency` (Zustand kommt von einem Drittanbieter, den wir beobachten) oder `manual` (du setzt den Zustand). |
| `monitorType` | string | Bei `monitor` | - | `http`, `dns`, `icmp`, `smtp`, `ssh`, `tcp`, `ftp` oder `imap_pop`. Bei `manual` nicht erlaubt. |
| `monitorId` | number | Bei `monitor` | - | Numerische Monitor-ID. Seite mit Kunde: ein Monitor dieses Kunden. Seite ohne Kunde: jeder Monitor deiner Organisation. Bei `manual` nicht erlaubt. |
| `dependencySlug` | string | Bei `dependency` | - | Slug eines aktiven Anbieters aus `GET /api/public/dependencies`. Bei den anderen Arten nicht erlaubt. |
| `manualStatus` | string | Nein | `operational` | Nur `manual`: `operational`, `degraded`, `partial_outage`, `major_outage` oder `maintenance`. |
| `name` | string | Bei `manual` | Monitor- oder Anbietername | Anzeigename (1-120 Zeichen). |
| `description` | string\|null | Nein | `null` | Max. 1000 Zeichen. |
| `groupId` | number\|string\|null | Nein | `null` | ID oder `publicId` einer Gruppe dieser Seite. |
| `sort` | number | Nein | hinter der letzten Komponente | Position, 0-100000. |
| `showUptime` | boolean | Nein | `true` | Verfügbarkeitsbalken dieser Komponente anzeigen. |

Ein Monitor kann auf derselben Seite nur einmal Komponente sein. `hiddenMonitors` blendet nie eine ausdrückliche Komponente aus. Wird ein Monitor gelöscht, verschwinden seine Komponenten automatisch von jeder Status-Seite.

Eine `dependency`-Komponente zeigt den Gesamtstatus, den wir für diesen Anbieter in unserer öffentlichen Abhängigkeits-Überwachung veröffentlichen: `operational`, `degraded`, `partial_outage`, `major_outage`, `maintenance` oder `unknown`, solange wir den Anbieter nicht sehen (als Warnung gezeigt, zählt aber nicht zum Gesamtzustand der Seite). Ein offener, mit der Komponente verknüpfter Vorfall hebt ihren Zustand an. Ein Anbieter kann auf derselben Seite nur einmal Komponente sein; eine Verfügbarkeitsleiste gibt es nicht. Ändert sich der Status des Anbieters, werden die Abonnenten der Seite (oder dieser Komponente) benachrichtigt wie bei einem Monitor-Vorfall. Weder Monitor noch Kunde sind nötig.

## Beispiel (cURL)

```bash
BASE_URL="https://uptimeify.io"
TOKEN="<dein-api-token>"

curl -X POST "$BASE_URL/api/status-pages/1/components" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceKind": "monitor",
    "monitorType": "http",
    "monitorId": 101,
    "groupId": 3
  }'
```

Eine manuelle Komponente:

```bash
curl -X POST "$BASE_URL/api/status-pages/1/components" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceKind": "manual",
    "name": "Payment provider",
    "description": "Card payments at checkout"
  }'
```

Ein Drittanbieter:

```bash
curl -X POST "$BASE_URL/api/status-pages/1/components" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceKind": "dependency",
    "dependencySlug": "stripe"
  }'
```

## Antwort

`201 Created` mit der neuen Komponente:

```json
{
  "id": 7,
  "publicId": "0b6f3c1e-8d2a-4f5b-9c7e-1a2b3c4d5e6f",
  "statusPageId": 1,
  "groupId": 3,
  "sort": 0,
  "name": "Main Site",
  "description": null,
  "showUptime": true,
  "sourceKind": "monitor",
  "monitorType": "http",
  "monitorId": 101,
  "manualStatus": null,
  "dependencySlug": null,
  "createdAt": "2026-10-27T09:00:00.000Z",
  "updatedAt": "2026-10-27T09:00:00.000Z"
}
```

## Häufige Fehler

- `400 Bad Request` (`invalidRequestBody`), wenn ein Pflichtfeld fehlt oder ein Feld nicht zu `sourceKind` passt (zum Beispiel `manualStatus` an einer Monitor-Komponente); `data.issues` nennt das Feld
- `400 Bad Request` (`statusPageComponentMonitorCustomerMismatch`), wenn der Monitor einem anderen Kunden gehört als die Status-Seite
- `400 Bad Request` (`invalidIdentifier`), wenn eine ID im Pfad weder Zahl noch UUID ist
- `401 Unauthorized`, wenn du nicht angemeldet bist
- `403 Forbidden` (`forbidden`), wenn deine Rolle das nicht darf, oder für einen kundengebundenen Aufrufer auf einer Seite ohne Kunde oder eines anderen Kunden
- `403 Forbidden` (`statusPagesModuleDisabled`), wenn das Statusseiten-Modul nicht aktiviert ist
- `404 Not Found` (`statusPageNotFound`), wenn die Status-Seite nicht existiert oder zu einer anderen Organisation gehört
- `404 Not Found` (`monitorNotFound`), wenn der Monitor nicht existiert oder zu einer anderen Organisation gehört
- `404 Not Found` (`providerNotFound`), wenn `dependencySlug` kein aktiver Anbieter ist
- `404 Not Found` (`statusPageComponentGroupNotFound`), wenn `groupId` keine Gruppe dieser Seite ist
- `409 Conflict` (`statusPageComponentMonitorConflict`), wenn der Monitor schon Komponente dieser Seite ist
- `409 Conflict` (`statusPageComponentDependencyConflict`), wenn der Anbieter schon Komponente dieser Seite ist
- `409 Conflict` (`statusPageLimitReached`, mit `data.max`), wenn die Seite schon 100 Komponenten hat
