Uptimeify Docs

Maintenance Window erstellen

Erstellt ein neues Wartungsfenster. Unterstützt einen einzelnen Monitor (Legacy), mehrere Monitore, tag-basiertes (inkl. organisationsweit) oder kunden-weites Targeting.

POST /api/maintenance-windows

Body

{
  "name": "Datenbank-Migration",
  "startTime": "2026-07-10T22:00:00.000Z",
  "endTime": "2026-07-11T01:00:00.000Z",
  "targets": [
    { "type": "website", "id": "ef8a6564-0ccf-4f3f-a5ef-d2963176b3eb" },
    { "type": "icmp", "id": "3d005a18-fdd8-4dc7-9f26-1a9d409c1bc5" }
  ],
  "tagIds": [7],
  "description": "Geplante Schema-Migration",
  "isRecurring": false,
  "isActive": true
}

Pflichtfelder

  • name (string): Eine freundliche Bezeichnung für das Fenster.
  • startTime (ISO 8601 Datetime): Zeitpunkt, an dem das Fenster beginnt.
  • endTime (ISO 8601 Datetime): Zeitpunkt, an dem das Fenster endet. Muss nach startTime liegen.
  • Mindestens ein Zielfeld (siehe unten).

Zielauswahl (gegenseitig ausschließende Modi)

Genau ein Targeting-Modus muss verwendet werden. targets und tagIds können innerhalb des Multi-Monitor-Modus kombiniert werden.

FeldTypBeschreibung
websiteIdnumberLegacy: einzelner Website-Monitor
icmpMonitorIdnumberLegacy: einzelner ICMP-Monitor
smtpMonitorIdnumberLegacy: einzelner SMTP-Monitor
sshMonitorIdnumberLegacy: einzelner SSH-Monitor
ftpMonitorIdnumberLegacy: einzelner FTP-Monitor
imapPopMonitorIdnumberLegacy: einzelner IMAP/POP-Monitor
dnsMonitorIdnumberLegacy: einzelner DNS-Monitor
customerIpIdnumberLegacy: einzelne Kunden-IP
customerDomainIdnumberLegacy: einzelne Kunden-Domain
targets{ type, id }[]Multi-Monitor: type ist eines von website | dns | icmp | smtp | ssh | ftp | imap_pop | customer_domain | customer_ip. id ist die öffentliche ID des Monitors (UUID), dieselbe Kennung, die auch die einzelnen Alt-Felder annehmen; eine numerische Zeilen-ID wird weiterhin akzeptiert.
tagIdsnumber[]Tag-basiert: siehe Nur-Tag-Modus (organisationsweit)
customerIdnumberKunden-Ebene: deckt jeden Monitor dieses Kunden ab

Nur-Tag-Modus (organisationsweit)

Wird tagIds ohne customerId, targets oder Legacy-Felder gesendet, entsteht ein organisationsweites Wartungsfenster. Es deckt dynamisch jeden Monitor der gesamten Organisation ab, der aktuell die angegebenen Tags trägt, über alle Kunden hinweg.

{
  "name": "Infra-Tag-Freeze",
  "startTime": "2026-07-10T22:00:00.000Z",
  "endTime": "2026-07-11T01:00:00.000Z",
  "tagIds": [7]
}
  • Erfordert einen organisationsweiten Admin oder Editor: die Rolle UND einen uneingeschränkten Kunden-Scope. Ein kundengebundener Akteur (ein readonly-Benutzer, ein editor mit Kundenzuweisungen, ein Customer-Scoped Token) bekommt kein organisationsweites Fenster: Ist er genau einem Kunden zugeordnet, wird das Fenster an diesen Kunden gebunden und deckt nur dessen getaggte Monitore ab; ist er mehreren (oder keinem) zugeordnet, wird der Request mit 400 tagOnlyNeedsCustomer abgelehnt und er muss stattdessen Monitore oder einen Kunden auswählen. Siehe Rollen und der Kunden-Scope.
  • Die Tag-Zugehörigkeit wird live zur Prüfzeit aufgelöst: nach der Fenstererstellung getaggte Monitore werden automatisch abgedeckt.
  • Alle tagIds müssen zur selben Organisation gehören; das Mischen von Tags verschiedener Organisationen gibt 400 mixedTagOrganizations zurück.

Kombinationsregeln

  • Mindestens ein Zielfeld ist erforderlich. Das Weglassen aller Felder ist ein Zod-Validierungsfehler (Standard-400 mit Validierungsantwort, kein data.code-Fehler).
  • customerId (Kunden-Ebene-Modus) kann nicht mit targets, tagIds oder Legacy-Feldern kombiniert werden. Das Kombinieren ist ein Zod-Validierungsfehler (Standard-400).
  • Alle Monitore in targets müssen zum selben Kunden gehören; das Mischen von Kunden gibt { data: { code: "mixedCustomers" } } zurück.
  • Alle tagIds müssen zur selben Organisation gehören; das Mischen gibt { data: { code: "mixedTagOrganizations" } } zurück.

Optionale Felder

FeldTypBeschreibung
descriptionstringFreitext-Notizen (erscheinen in der Historie).
isRecurringbooleanStandard false. Auf true setzen, um recurrencePattern zu aktivieren.
recurrencePatternobjectErforderlich, wenn isRecurring true ist. Siehe Wiederholung.
isActivebooleanStandard true. Auf false setzen, um ein deaktiviertes Fenster zu erstellen.
timezonestringStandard "UTC". Die IANA-Zeitzone (z. B. "Europe/Berlin"), in der das Wiederholungsmuster interpretiert wird. Schreibweisen unabhängig von Groß-/Kleinschreibung sowie veraltete IANA-Linknamen (z. B. "gmt", "Zulu") werden akzeptiert und unter der kanonischen Bezeichnung des Laufzeitsystems gespeichert, "utc" und "Zulu" werden beide als "UTC" gespeichert. Ein reiner UTC-Offset (z. B. "+05:00") wird abgewiesen: Er enthält keine Sommerzeit-Regel und kann daher nicht leisten, was ein Zonenname leistet.

Wiederholung

{
  "frequency": "weekly",
  "interval": 1,
  "daysOfWeek": [1, 3],
  "dayOfMonth": null,
  "endRecurrenceDate": "2026-12-31"
}
FeldWerte
frequencydaily | weekly | monthly
intervalGanzzahl ≥ 1 (Wiederholung alle N Perioden)
daysOfWeekArray von 0-6 (0 = Sonntag); verwendet wenn frequency weekly ist
dayOfMonth1-31; verwendet wenn frequency monthly ist
endRecurrenceDateISO-Datumsstring; optional, beendet die Wiederholung nach diesem Datum

Dynamisches Tag-Verhalten

Die Tag-Abdeckung wird vom Monitoring-Worker live zum Zeitpunkt der Prüfung aufgelöst. Ein Monitor, der nach der Fenstererstellung getaggt wird, wird automatisch abgedeckt, ohne das Fenster zu aktualisieren. Das Entfernen eines Tags von einem Monitor beendet die Abdeckung sofort.

Beispiel (cURL)

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

curl -X POST "$BASE_URL/api/maintenance-windows" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Datenbank-Migration",
    "startTime": "2026-07-10T22:00:00.000Z",
    "endTime": "2026-07-11T01:00:00.000Z",
    "targets": [
      { "type": "website", "id": 101 }
    ]
  }'

Antwort (Response)

{
  "id": 42,
  "publicId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "organizationId": 10,
  "customerId": 1,
  "name": "Datenbank-Migration",
  "description": null,
  "startTime": "2026-07-10T22:00:00.000Z",
  "endTime": "2026-07-11T01:00:00.000Z",
  "isRecurring": false,
  "recurrencePattern": null,
  "isActive": true,
  "timezone": "UTC",
  "targets": [
    { "type": "website", "id": 101 }
  ],
  "tags": [],
  "websiteId": null,
  "icmpMonitorId": null,
  "smtpMonitorId": null,
  "sshMonitorId": null,
  "ftpMonitorId": null,
  "imapPopMonitorId": null,
  "dnsMonitorId": null,
  "customerIpId": null,
  "customerDomainId": null,
  "createdAt": "2026-06-29T10:00:00.000Z",
  "updatedAt": "2026-06-29T10:00:00.000Z"
}

Häufige Fehler

StatusBeschreibung
400 (Validierung)Kein Zielfeld angegeben, customerId mit anderen Zielfeldern kombiniert, oder timezone ist ein reiner UTC-Offset oder kein vom Laufzeitsystem erkannter Zonenname. Dies sind Zod-Validierungsfehler; der Response-Body ist ein Standard-Validierungsfehler, kein { data: { code } }.
400 { data: { code: "mixedCustomers" } }targets enthält Monitore verschiedener Kunden.
400 { data: { code: "mixedTagOrganizations" } }tagIds enthält Tags aus verschiedenen Organisationen.
401 UnauthorizedNicht angemeldet.
400 { data: { code: "tagOnlyNeedsCustomer" } }Nur-Tag-Request eines kundengebundenen Akteurs, der mehreren Kunden (oder keinem) zugeordnet ist: Monitore oder einen einzelnen Kunden auswählen.
403 ForbiddenKein Zugriff auf die Organisation, oder das Ziel liegt außerhalb des Bereichs (globale Support-Konten können keine Wartungsfenster erstellen).
404 { data: { code: "tagNotFound" } }Eine tagId existiert nicht in der Organisation.

Auf dieser Seite