Statusseite abonnieren
Öffentlicher Endpunkt hinter dem Abo-Formular: E-Mail, Webhook, Slack oder Microsoft Teams, für die ganze Seite oder einzelne Komponenten. Double-Opt-in für jeden Kanal.
POST /api/status-pages/public/:slug/subscribe
Ohne Anmeldung. An diesen Endpunkt schickt das Abo-Formular einer öffentlichen Statusseite. Jedes Abo beginnt als pending und wird erst aktiv, wenn der Bestätigungslink geöffnet und bestätigt wurde: per Mail bei email, als erste Nachricht an das Ziel bei webhook, slack und teams. Jede Nachricht enthält einen Abmeldelink.
Die Seite muss veröffentlicht und öffentlich sein, Abos müssen eingeschaltet sein, und ihre Organisation braucht das Statusseiten-Modul und darf nicht gesperrt sein. Sonst antwortet der Endpunkt genauso mit { "ok": true } und speichert nichts.
Request-Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
channel | string | nein | email (Standard), webhook, slack oder teams |
email | string | bei email | Empfängeradresse |
targetUrl | string | bei URL-Kanälen | https-URL ohne Zugangsdaten, öffentlich erreichbar. Slack: eine Incoming-Webhook-URL. Teams: eine Incoming-Webhook- oder Workflows-URL, die Adaptive Cards annimmt |
componentIds | array | nein | Komponenten dieser Seite (numerische ID oder publicId), höchstens 100. Fehlt oder leer: die ganze Seite |
locale | string | nein | de... für deutsche, da... für dänische Nachrichten, sonst Englisch |
Ein URL-Abo wird verschlüsselt gespeichert. Sein Ziel wird nie vollständig ausgegeben, die Abonnentenliste zeigt nur den Ursprung.
Beispiel (cURL)
curl -X POST "https://uptimeify.io/api/status-pages/public/acme/subscribe" \
-H "Content-Type: application/json" \
-d '{"channel":"webhook","targetUrl":"https://example.com/hooks/status","componentIds":[12]}'Antwort
200 OK
{ "ok": true }Bei email kommt immer diese Antwort, auch für eine unbekannte Seite, eine schon bestätigte oder eine gedrosselte Adresse. So verrät der Endpunkt nicht, ob es eine Adresse oder Seite gibt.
Webhook-Payload
Jede Nachricht an ein webhook-Ziel ist ein POST mit Content-Type: application/json in dieser festen Form:
{
"event": "incident_open",
"page": { "slug": "acme", "name": "Acme Status", "url": "https://uptimeify.io/status/acme" },
"incident": {
"title": "Zahlungen gestört",
"body": "Wir prüfen das.",
"severity": "major",
"monitorName": null,
"occurredAt": "2026-10-27T10:00:00.000Z"
},
"components": [{ "id": 12, "name": "Zahlungen" }],
"url": "https://uptimeify.io/status/acme",
"unsubscribeUrl": "https://uptimeify.io/status/<seite>/unsubscribe?token=<token>"
}event ist eines von subscription_confirmation, incident_open, incident_update, incident_resolved, maintenance_scheduled, maintenance_completed, im_override_set, im_override_cleared. Bei Wartungen und Statushinweisen trägt incident den Hinweis. components nennt die betroffenen Komponenten der Seite; eine leere Liste heißt: die ganze Seite. Die Bestätigungsnachricht hat incident: null und zusätzlich confirmUrl. Slack bekommt denselben Inhalt als Block Kit, Teams als Adaptive Card.
Zustellung: ein Versuch je Ereignis, 10 Sekunden Timeout, Weiterleitungen nur zu öffentlichen Adressen, der Antwortkörper wird nicht gelesen. Nach 5 fehlgeschlagenen Zustellungen in Folge wird das Abo abgeschaltet (status: disabled in der Abonnentenliste); der Abonnent kann sich neu anmelden.
Häufige Fehler
400 Bad Request(invalidRequestBody), wennemailodertargetUrlfür den gewählten Kanal fehlt400 Bad Request(subscriptionTargetUrlInvalid), wenntargetUrlkeinehttps-URL ist oder Zugangsdaten enthält400 Bad Request(subscriptionTargetUrlRejected), wenntargetUrlauf eine Loopback-, private, Link-Local- oder sonst nicht öffentliche Adresse zeigt404 Not Found(statusPageComponentNotFound), wenn ein Eintrag incomponentIdskeine Komponente dieser Seite ist409 Conflict(statusPageLimitReached), wenn die Seite schon 50 Webhook-, Slack- und Teams-Abos hat429 Too Many Requestsbei zu vielen Anmeldungen von einer IP oder, bei URL-Kanälen, auf einer Seite