LIVCK Cloud

API-Endpunkte Ab Team-Plan

Überblick über die verfügbaren API-Endpunkte -- keine vollständige Referenz, sondern eine Orientierungshilfe zum Aufbau der API.

Endpunkte nach Bereich

Referenzdaten (nur lesend)

Metadaten, die du brauchst, um gültige Service-Payloads zusammenzustellen -- z.B. welche Standorte und welche Check-Typen es gibt.

AktionMethodeEndpunkt
Aktive Monitoring-Standorte auflistenGET/v1/probes
Check-Typen-Katalog abrufenGET/v1/meta/check-types

GET /v1/probes liefert die aktiven Monitoring-Standorte (Location-Codes). GET /v1/meta/check-types liefert den Katalog aller Check-Typen inklusive ihrer Konfigurations- und Bedingungs-Felder -- praktisch, um beim Anlegen oder Bearbeiten eines Services eine gültige Payload zu bauen. Beide sind reine Lese-Endpunkte und erfordern die Berechtigung Services anzeigen.

Services

AktionMethodeEndpunkt
Alle Services auflistenGET/v1/services
Service-Details abrufenGET/v1/services/{id}
Service erstellenPOST/v1/services
Service bearbeitenPUT / PATCH/v1/services/{id}
Service löschenDELETE/v1/services/{id}
Service pausierenPOST/v1/services/{id}/pause
Service fortsetzenPOST/v1/services/{id}/resume

Mit ?tag= filterst du die Liste auf einen Tag, z.B. GET /v1/services?tag=kunde:4711.

Tags zuweisen. Im Feld tags gibst du die Tags eines Services als ID oder als Name an, auch gemischt. kunde:4711 und kunde=4711 meinen denselben Tag. Beim Schlüssel spielt Groß- und Kleinschreibung keine Rolle, der Wert muss exakt stimmen. Gibt es einen Namen noch nicht, legt die API den Tag an. Ein Eintrag, der wie eine Tag-ID aussieht (21 Zeichen aus Buchstaben, Ziffern, _ oder -, darunter mindestens ein Großbuchstabe), wird aber nie neu angelegt: Gibt es keinen Tag mit dieser ID oder diesem Namen, antwortet die API mit 422 am Eintrag (z.B. tags.2) und speichert nichts. Beim Bearbeiten ersetzt tags alle Tags des Services. Tags, die der Server-Agent setzt, bleiben.

{
  "name": "Onlineshop",
  "check_type": "http",
  "target": "https://shop.example.com",
  "tags": ["kunde:4711", "env=prod", "kritisch"]
}

Überwachung einrichten. Wie ein Service geprüft wird, legst du im Block settings fest. Schickst du ihn beim Anlegen mit, ist settings.interval_seconds Pflicht, das Prüfintervall in Sekunden. Optional kommen assigned_probes (Standort-Codes aus GET /v1/probes), timeout_seconds, retries und config dazu. Die Felder von config je Check-Typ liefert GET /v1/meta/check-types. Ohne settings legt die API einen Service vom Typ http, tcp, dns, icmp oder ssl zwar an, prüft ihn aber nicht. Die Antwort zeigt dann is_configured: false. Du kannst settings später per PUT oder PATCH nachreichen. Beim Bearbeiten genügt ein Teil von settings, weggelassene Werte bleiben erhalten.

Geheime Werte. Header-Werte und die Zugangsdaten unter config.auth gibt die API nie zurück. An ihrer Stelle steht der Platzhalter __LIVCK_KEEP_UNCHANGED__. Schickst du beim Bearbeiten genau diesen Platzhalter, bleibt der gespeicherte Wert unverändert. Sendest du headers oder auth mit, ersetzt das den ganzen Block. Nimm also alle Header auf, die bleiben sollen, und setze bei ihnen den Platzhalter als Wert ein. Ist für ein Feld noch kein Wert gespeichert, antwortet die API auf den Platzhalter mit 422.

Service löschen. DELETE /v1/services/{id} räumt auch die Vorfälle und Wartungen auf, die den Service betreffen. Betrifft ein Vorfall oder eine Wartung noch andere Services, entfernt LIVCK nur diesen Service daraus. Gehört ein offener Vorfall nur zu diesem Service, wird er mit einem öffentlichen Verlaufseintrag aufgelöst. Eine geplante oder laufende Wartung, die nur diesen Service betrifft, wird abgebrochen. Mit zwei Parametern löschst du sie stattdessen:

ParameterWirkungZusätzliche Berechtigung
delete_orphaned_incidents=trueLöscht die Vorfälle, die nur zu diesem Service gehören, auch bereits gelösteVorfälle löschen
delete_orphaned_maintenances=trueLöscht die Wartungen, die nur diesen Service betreffen, auch abgeschlosseneWartungen löschen

Fehlt dem Token die zusätzliche Berechtigung, antwortet die API mit 403.

Tags

Tags ordnen deine Services, etwa env:prod oder ein Tag pro Kunde wie kunde:4711. Ein Tag hat einen Schlüssel und optional einen Wert (kunde:4711) oder besteht nur aus einem Namen (kritisch).

AktionMethodeEndpunkt
Tags auflisten und filternGET/v1/tags
Tag-Details abrufenGET/v1/tags/{id}
Tag anlegenPOST/v1/tags
Tag finden oder anlegenPOST/v1/tags/ensure
Tag umbenennen oder umfärbenPUT / PATCH/v1/tags/{id}
Tag löschenDELETE/v1/tags/{id}

Filter für GET /v1/tags:

ParameterLiefertBeispiel
labelGenau diesen Tag?label=kunde:4711
keyAlle Tags mit diesem Schlüssel?key=kunde

Beim Schlüssel spielt Groß- und Kleinschreibung keine Rolle, der Wert muss exakt stimmen. Ein Name ohne Wert (?label=kritisch) findet nur den Tag ohne Wert. Gibt es keinen passenden Tag, ist die Liste leer. Die Tag-Liste liefert standardmäßig 50 Einträge pro Seite.

POST /v1/tags/ensure nimmt dieselben Felder wie das Anlegen (key, optional value und color) und liefert den Tag immer zurück:

StatuscodeBedeutung
201Der Tag war neu und wurde angelegt
200Den Tag gab es schon -- er kommt unverändert zurück, auch die Farbe

POST /v1/tags legt dagegen nur neu an und antwortet mit 422, wenn es den Tag schon gibt.

DELETE /v1/tags/{id} entfernt den Tag von allen Services, die Services selbst bleiben. Solange der Tag noch gebraucht wird, antwortet die API mit 422: wenn er eine Gruppe auf einer Statuspage füllt (sync_tag_id) oder wenn ein SLA-Ziel, ein Zugriffsbereich, eine Eskalationsrichtlinie oder eine Incident-Richtlinie auf ihm aufbaut. Tags, die der Server-Agent setzt (source: system), kannst du nicht löschen.

Ein Tag pro Kunde

Betreust du Kunden, gib jedem einen eigenen Tag, etwa kunde:4711. Seine Services legst du direkt mit diesem Namen im Feld tags an, und GET /v1/services?tag=kunde:4711 zeigt dir später genau seine Services. Die Tag-ID brauchst du für eine Gruppe, die sich selbst füllt (sync_tag_id): POST /v1/tags/ensure mit {"key": "kunde", "value": "4711"} liefert sie dir, egal ob der Kunde neu ist.

Service-Metriken (nur lesend)

AktionMethodeEndpunkt
Metriken abrufenGET/v1/services/{id}/metrics
Uptime abrufenGET/v1/services/{id}/uptime
Antwortzeiten abrufenGET/v1/services/{id}/response-times

Parameter:

ParameterEndpunktWerteStandard
rangemetrics, response-times1h, 6h, 24h, 7d, 30d24h
daysuptimeAnzahl Tage30

Verlauf eines Services (nur lesend)

AktionMethodeEndpunkt
Vorfälle des ServicesGET/v1/services/{id}/incidents
Wartungen des ServicesGET/v1/services/{id}/maintenances
Check-Verlauf pro StandortGET/v1/services/{id}/checks

Vorfälle und Wartungen filterst du hier wie in den Listen /v1/incidents und /v1/maintenances (siehe unten). Jeder Vorfall enthält zusätzlich service_impact: wie stark er genau diesen Service getroffen hat (impact), ob der Service sich erholt hat (is_recovered) und wann (added_at, recovered_at).

Der Check-Verlauf zeigt die einzelnen Prüfungen, neueste zuerst: Zeitpunkt, Standort, Status, Antwortzeit, HTTP-Code, Fehlermeldung und die Zeiten für DNS, Verbindung, TLS und Gesamt. Inhalte der Antwort (Body, Header) sind nicht enthalten.

ParameterWirkung
probeNur diese Standorte, z. B. probe=ffm,nbg
statusNur diese Ergebnisse: up, down, degraded -- mehrere kommagetrennt, z.B. status=down,degraded
from, toZeitraum (ISO 8601), to ausschließlich
per_pageEinträge pro Seite, Standard 50, höchstens 100
cursorNächste Seite: den Wert aus meta.next_cursor übernehmen oder einfach links.next aufrufen

Ist meta.next_cursor leer, gibt es keine älteren Einträge. Der Verlauf reicht höchstens 90 Tage zurück, bei kürzerer Datenaufbewahrung in deinem Plan entsprechend weniger. Sind die Messdaten gerade nicht erreichbar, antwortet die API mit 503 und Retry-After -- nie mit einer leeren Liste, die wie „keine Ausfälle" aussähe.

Berechtigungen: Vorfälle brauchen Services anzeigen und Vorfälle anzeigen, Wartungen Services anzeigen und Wartungen anzeigen, der Check-Verlauf Services anzeigen.

Incidents

AktionMethodeEndpunkt
Alle Incidents auflistenGET/v1/incidents
Incident-Details abrufenGET/v1/incidents/{id}
Incident erstellenPOST/v1/incidents
Incident aktualisierenPUT / PATCH/v1/incidents/{id}
Incident löschenDELETE/v1/incidents/{id}
Verlaufseintrag postenPOST/v1/incidents/{id}/updates
Incident auflösenPOST/v1/incidents/{id}/resolve

Über POST /v1/incidents/{id}/updates postest du einen Eintrag in den Zeitverlauf des Incidents und kannst dabei den Status ändern.

Filter für GET /v1/incidents:

ParameterWirkung
service_idsNur Vorfälle, die mindestens einen dieser Services betreffen -- bis zu 100 IDs, kommagetrennt (service_ids=a,b) oder wiederholt (service_ids[]=a&service_ids[]=b)
resolvedtrue = gelöst, false = offen
is_publishedtrue = veröffentlicht, false = intern
from, toZeitraum (ISO 8601): Vorfälle, die in diesen Zeitraum fallen oder ihn überlappen; to ausschließlich
kindstandard, agent_liveness oder notice

Ohne Filter liefert die Liste alle Vorfälle, auch interne. Unbekannte oder fremde IDs in service_ids werden ignoriert; bleibt keine übrig, ist die Liste leer.

Leere Filter

Filter, die eine Liste nur eingrenzen, ignoriert die API, wenn du sie leer sendest: from, to, status, resolved, is_published, kind und probe. Anders die Filter, die festlegen, um welche Einträge es geht: service_ids bei Vorfällen und Wartungen, tag bei /v1/services, slug bei /v1/statuspages sowie label und key bei /v1/tags. Sendest du einen davon leer, ist die Liste leer. So bekommt ein Skript, dessen Variable leer geblieben ist, nie versehentlich alle Einträge.

Ein fehlerhaftes service_ids beantwortet die API mit 422, etwa eine ID im falschen Format oder mehr als 100 IDs. Mehrere Werte gibst du kommagetrennt (a,b) oder mit [] an (name[]=a&name[]=b). Ein einfaches name=a&name=b behält nur den letzten Wert.

Wartungen

AktionMethodeEndpunkt
Alle Wartungen auflistenGET/v1/maintenances
Wartung-Details abrufenGET/v1/maintenances/{id}
Wartung erstellenPOST/v1/maintenances
Wartung aktualisierenPUT / PATCH/v1/maintenances/{id}
Wartung löschenDELETE/v1/maintenances/{id}
Wartung startenPOST/v1/maintenances/{id}/start
Wartung abschließenPOST/v1/maintenances/{id}/complete
Wartung verlängernPOST/v1/maintenances/{id}/extend
Wartung abbrechenPOST/v1/maintenances/{id}/cancel

Filter für GET /v1/maintenances:

ParameterWirkung
service_idsNur Wartungen, die mindestens einen dieser Services betreffen (wie bei Vorfällen, bis zu 100 IDs)
statusscheduled, in_progress, completed, cancelled -- mehrere kommagetrennt, z.B. status=scheduled,in_progress
from, toZeitraum (ISO 8601): Wartungen, die in diesen Zeitraum fallen; to ausschließlich. Laufende Wartungen zählen bis zu ihrem Abschluss, abgeschlossene bis zum tatsächlichen Ende

Lebenszyklus von Wartungen

Die Übergänge start, complete, extend und cancel sind nur in einem passenden Zustand möglich. Befindet sich die Wartung nicht im richtigen Status, antwortet die API mit 409 Conflict.

Statuspages

AktionMethodeEndpunkt
Alle Statuspages auflistenGET/v1/statuspages
Statuspage-Details abrufenGET/v1/statuspages/{id}
Statuspage erstellenPOST/v1/statuspages
Statuspage bearbeitenPUT / PATCH/v1/statuspages/{id}
Statuspage löschenDELETE/v1/statuspages/{id}
Veröffentlichen / zurückziehenPOST/v1/statuspages/{id}/publish, /unpublish
Komponenten verwaltenGET / POST / PUT / DELETE/v1/statuspages/{id}/components[/{component}]
Eigene Domains verwaltenGET / POST / DELETE/v1/statuspages/{id}/custom-domains[/{domain}]
Domain erneut prüfenPOST/v1/statuspages/{id}/custom-domains/{domain}/verify
Logo, Logo (dunkel), Favicon hochladen / entfernenPOST / DELETE/v1/statuspages/{id}/assets/{logo|logo-dark|favicon}

Die Statuspage eines Kunden findest du über ihren Slug: GET /v1/statuspages?slug=kunde-4711 liefert genau diese Seite oder eine leere Liste.

Jede Statuspage nennt in url ihre öffentliche Adresse: die eigene Domain, sobald sie verifiziert ist, sonst https://{slug}.statuspage.de. Hast du mehrere eigene Domains, zählt die zuerst angelegte. Auch eine unveröffentlichte Statuspage liefert ihre Adresse. Dort antwortet die Seite mit 404, bis du sie veröffentlichst.

Komponenten liefern neben status auch effective_status. Das ist der Status, den Besucher auf der Statuspage sehen. Er ergibt sich aus einer laufenden Wartung, einem offenen veröffentlichten Vorfall oder dem verknüpften Service, bei einer Gruppe aus den sichtbaren Komponenten darin. status ist nur ein gespeicherter Wert, den die Statuspage nicht anzeigt. Ist eine Komponente ausgeblendet oder liegt sie in einer ausgeblendeten Gruppe, ist effective_status leer (null).

Eine Komponenten-Gruppe mit sync_tag_id füllt sich selbst: Sie zeigt automatisch jeden Service mit diesem Tag, auch Services, die du später anlegst. So bekommt jeder Kunde eine Statuspage, die du nicht von Hand pflegen musst.

Beim Anlegen einer eigenen Domain liefert die Antwort die DNS-Einträge (CNAME und TXT), die du bei deinem DNS-Anbieter setzen musst. Die Prüfung läuft danach automatisch. Jede Domain nennt in statuspage_id die Statuspage, zu der sie gehört.

Beispiel-Anfrage

So listest du alle deine Services auf:

curl -X GET https://api.livck.cloud/v1/services \
  -H "Authorization: Bearer dein-api-token" \
  -H "Accept: application/json"

Antwort:

{
  "data": [
    {
      "id": "abc123",
      "name": "Unternehmens-Website",
      "status": "up",
      "check_type": "http",
      "target": "https://example.com"
    }
  ],
  "meta": { "current_page": 1, "last_page": 3, "total": 42 }
}

Paginierung

Endpunkte mit Listen sind paginiert:

ParameterBeschreibungStandardMaximum
pageWelche Seite abgerufen wird1--
per_pageEinträge pro Seite15100

Beispiel: GET /v1/services?page=2&per_page=25. Die Antwort enthält neben data die Objekte links (erste/letzte/vorherige/nächste Seite) und meta (aktuelle Seite, Gesamtanzahl, letzte Seite).

Fehlerbehandlung

Die API nutzt Standard-HTTP-Statuscodes:

StatuscodeBedeutungWas du tun kannst
200ErfolgreichAlles in Ordnung
201ErstelltRessource wurde erfolgreich angelegt
400Ungültige AnfragePrüfe deine gesendeten Daten und einen mitgesendeten Idempotency-Key
401Nicht autorisiertPrüfe deinen API-Token
402Plan-Limit erreichtSiehe upsell in der Antwort (unten)
403Keine Berechtigung oder Plan-Limit erreichtPrüfe die Rechte deines Tokens. Enthält die Antwort upsell, liegt es an deinem Plan
404Nicht gefundenDie angeforderte Ressource existiert nicht
409KonfliktÜbergang nicht möglich (z.B. Wartung im falschen Status) oder eine Anfrage mit demselben Idempotency-Key läuft noch
422ValidierungsfehlerPrüfe die Felder im errors-Objekt der Antwort
429Zu viele AnfragenWarte kurz und versuche es erneut
500ServerfehlerVersuche es später erneut oder kontaktiere den Support

Bei Fehlern enthält die Antwort immer ein message-Feld:

{
  "message": "The requested resource was not found."
}

Bei Validierungsfehlern (422) kommt zusätzlich ein errors-Objekt mit feldbezogenen Details hinzu:

{
  "message": "The name field is required.",
  "errors": {
    "name": ["The name field is required."]
  }
}

Fehlermeldungen sind immer englisch.

Liegt ein 403 oder 402 an deinem Plan, enthält die Antwort ein upsell-Objekt. Bei einem erreichten Limit steht in upsell.reason der Wert limit und in upsell.key das betroffene Limit. Wo vorhanden, nennen limit und usage dein Kontingent und deinen aktuellen Stand:

{
  "message": "Your plan's service limit has been reached.",
  "limit": 150,
  "usage": 150,
  "upsell": { "reason": "limit", "key": "services" }
}

Fehlt deinem Plan eine Funktion, steht in upsell.reason der Wert feature. Einige Limits meldet die API als Validierungsfehler 422 am betroffenen Feld, etwa die Zahl der Tags oder der veröffentlichten Statuspages.

Ratenbegrenzung

Pro Token sind 120 Anfragen pro Minute erlaubt. Die aktuellen Limits liefert jeder Response als Header mit:

HeaderBedeutung
X-RateLimit-LimitMaximale Anfragen pro Minute (120)
X-RateLimit-RemainingVerbleibende Anfragen in diesem Zeitfenster

Bei Statuscode 429

Wenn du das Limit überschreitest, antwortet die API mit 429 Too Many Requests. Warte kurz, bis sich das Zeitfenster zurücksetzt, bevor du weitere Anfragen sendest.

Vollständige API-Referenz

Interaktive Dokumentation

Diese Seite gibt dir einen Überblick. Die vollständige, interaktive API-Referenz mit allen Parametern, Feldbeschreibungen, Beispielen und einer "Try it"-Funktion findest du unter api.livck.cloud. Sie wird automatisch aus der API generiert und ist damit stets aktuell.

Weiterführende Themen