Skip to content

API-Übersicht ​

Mit der Hoppla REST-API steuerst du alles programmatisch: Monitore verwalten, Check-Ergebnisse abrufen, Vorfälle bearbeiten und dein Monitoring-Setup automatisieren. Alles, was im Dashboard geht, geht auch über die API.

Basis-URL ​

Alle API-Endpoints laufen unter:

https://app.hoppla.dev/api/v1

Authentifizierung ​

Authentifiziere dich mit einem Bearer-Token im Authorization-Header. Wie du ein Token erstellst, steht unter API-Tokens.

bash
curl -H "Authorization: Bearer YOUR_TOKEN" \
  https://app.hoppla.dev/api/v1/monitors

Tokens sind undurchsichtige Zeichenketten mit einem kurzen Präfix, das den Typ anzeigt -- persönliche API-Tokens beginnen mit sk-…. Behandle die gesamte Zeichenkette als Geheimnis und binde sie niemals in clientseitigen Code ein.

Anfragen ohne gültiges Token bekommen eine 401 Unauthorized-Antwort.

Scopes ​

Jedes Token trägt eine Reihe von Scopes, die bestimmen, was es darf. Scopes haben das Format resource:action und sind in Familien gruppiert:

  • monitors, checks, incidents, notifications, escalation, status-pages, maintenance, team, settings, billing

Jede Familie unterstützt :read, :write und -- wo sinnvoll -- :manage. Ein Token mit monitors:read kann zum Beispiel Monitore auflisten, aber nicht anlegen; mit monitors:write kannst du Monitore erstellen und aktualisieren.

Ein Token enthält in der Regel nur einen Teil aller Scopes -- wähl das Minimum, das deine Integration braucht. Jede Anfrage an einen Endpoint außerhalb der Scopes des Tokens wird mit 403 Forbidden abgelehnt.

Paginierung ​

Hoppla nutzt zwei Paginierungsarten -- je nach Endpoint.

Offset-Paginierung ​

Die meisten Listen-Endpoints paginieren nach Seitennummer. Du steuerst das mit diesen Query-Parametern:

ParameterStandardBeschreibung
page1Seitennummer
per_page15Einträge pro Seite (max. 100)

In der Antwort steckt ein meta-Objekt:

json
{
  "data": [...],
  "meta": {
    "current_page": 1,
    "last_page": 3,
    "per_page": 15,
    "total": 42
  }
}

Cursor-Paginierung ​

Endpoints mit großen Datenmengen (zum Beispiel Vorfälle) nutzen stattdessen Cursor-Paginierung -- das ist schneller und bleibt stabil, während sich die Daten ändern. Übergib dazu den Cursor aus der vorherigen Antwort:

ParameterBeschreibung
cursorUndurchsichtiger Cursor aus meta.next_cursor der vorherigen Seite
per_pageEinträge pro Seite (max. 100)

Die Antwort enthält die Cursor-Infos im meta-Objekt:

json
{
  "data": [...],
  "meta": {
    "next_cursor": "eyJpZCI6...",
    "prev_cursor": null,
    "has_more": true
  }
}

Frag so lange mit next_cursor weiter, bis has_more auf false steht.

Rate Limiting ​

Die Rate Limits hängen davon ab, wie die Anfrage authentifiziert ist:

AnfrageLimit
Nicht authentifiziert (pro IP)60 Anfragen/Minute
Authentifiziert300 Anfragen/Minute
Authentifiziert mit Team-Header (X-Tenant)600 Anfragen/Minute

Die aktuellen Limits findest du in jeder Antwort:

HeaderBeschreibung
X-RateLimit-LimitMaximale Anfragen pro Minute
X-RateLimit-RemainingVerbleibende Anfragen im aktuellen Zeitfenster

Überschreitest du das Limit, kommt eine 429 Too Many Requests-Antwort. Warte dann einfach, bis das Zeitfenster zurückgesetzt wird.

Fehlerformat ​

Fehler kommen immer als JSON mit einheitlicher Struktur:

json
{
  "message": "The given data was invalid.",
  "errors": {
    "url": ["The url field is required."]
  }
}

Die gängigen HTTP-Statuscodes:

StatusBedeutung
200Erfolg
201Ressource erstellt
204Erfolg, kein Inhalt (z. B. nach Löschungen)
401Nicht autorisiert (ungültiges oder fehlendes Token)
403Verboten (unzureichende Berechtigungen)
404Ressource nicht gefunden
422Validierungsfehler
429Rate Limit überschritten
500Serverfehler

Verfügbare Endpoints ​

KategorieEndpointsBeschreibung
MonitoreGET/POST/PATCH/DELETE /monitorsMonitore erstellen, lesen, aktualisieren, löschen
Monitor-TagsGET /monitors/tagsAlle über Monitore hinweg verwendeten Tags auflisten
Monitor-ChecksGET/POST/DELETE /monitors/{id}/checksChecks innerhalb eines Monitors verwalten
Check-AktionenPATCH /checks/{id}, POST /checks/{id}/request-run, POST /checks/{id}/snooze, POST /checks/{id}/unsnooze, POST /checks/{id}/enable, POST /checks/{id}/disableEinstellungen ändern, manuelle Läufe auslösen, snoozen/entsnoozen, einzelne Checks aktivieren/deaktivieren
Check-ErgebnisseGET /checks/{id}/results, GET /checks/{id}/timeseries, POST /checks/timeseries-batchCheck-Ergebnisse, Zeitreihen-Daten und Batch-Zeitreihen abrufen
Monitor-StatistikenGET /monitors/{id}/uptime, /performance, /certificate, /dns-history, /lighthouse, /domain-expiry, /health, /sitemap, /ping, /tcp, /security-headers, /robots-txt, /dnsbl, /redirect-chain, /mixed-content, /broken-links, /agentDetaillierte Statistiken pro Monitor und Check-Typ
Crawl-LäufeGET /monitors/{id}/crawl-runs, GET /monitors/{id}/crawl-runs/{runId}, GET /monitors/{id}/crawl-runs/{runId}/pagesErgebnisse von Broken-Link-Scans und betroffene Seiten
VorfälleGET/POST/PATCH/DELETE /incidents, POST /incidents/{id}/updates, POST /incidents/{id}/acknowledge, POST /incidents/{id}/snooze, POST /incidents/{id}/unsnooze, POST /incidents/{id}/archive, POST /incidents/{id}/unarchiveVollständiges Lifecycle-Management für Vorfälle
BenachrichtigungskanäleGET/POST/PATCH/DELETE /notification-channels, POST /notification-channels/{id}/testBenachrichtigungskanäle verwalten und Zustellung testen
BenachrichtigungsregelnGET/POST/PATCH/DELETE /notification-rulesFestlegen, welche Ereignisse welche Kanäle auslösen
Benachrichtigungs-LogsGET /notification-logs, GET /notification-logs/{id}Zustellverlauf der Benachrichtigungen einsehen
EskalationsrichtlinienGET/POST/PATCH/DELETE /escalation-policies, Schritt-VerwaltungMehrstufige Eskalationsketten mit Wartezeiten
BereitschaftspläneGET/POST/PATCH/DELETE /on-call-schedules, Rotations-Verwaltung, GET /on-call-schedules/{id}/currentRotationsbasierte Bereitschaftsplanung
WartungsfensterGET/POST/PATCH/DELETE /maintenance-windowsGeplante Ausfallzeiten einplanen, um Alarme zu unterdrücken
StatusseitenGET/POST/PATCH/DELETE /status-pages, Updates-Verwaltung, Verifizierung eigener DomainsÖffentliche Statusseiten mit eigenen Domains
Cron-MonitoreGET/POST/PATCH/DELETE /cron-monitors, POST /cron-monitors/{id}/rotate-urlCron-Heartbeat-Monitore mit URL-Rotation
Agent-MonitoreGET/POST/PATCH/DELETE /agent-monitors, POST /agent-monitors/{id}/rotate-token, GET /agent-monitors/{id}/metricsServer-Agent-Monitore mit Token-Rotation und Metriken
DashboardGET /dashboard/statsAggregierte Monitoring-Statistiken
ProfilGET/PATCH /profile, PUT /profile/password, GET /profile/export, DELETE /profileBenutzerprofil, Passwortänderung, DSGVO-Export, Kontolöschung
API-TokensGET/POST/DELETE /api-tokensPersönliche API-Tokens verwalten
TeammitgliederGET /team/members, PATCH /team/members/{id}, DELETE /team/members/{id}Teammitglieder verwalten
Team-EinladungenGET/POST /team/invitations, POST /team/invitations/{id}/resend, DELETE /team/invitations/{id}Team-Einladungen aussprechen und verwalten
BrandingGET/PATCH /brandingWhite-Label-Branding-Einstellungen
Eigenes SMTPGET/PATCH/DELETE /smtp-config, POST /smtp-config/testEigene SMTP-Konfiguration für E-Mails
SSO-KonfigurationGET/PATCH /sso/configOIDC-SSO-Einstellungen
Audit-LogGET /audit-log, GET /audit-log/filtersAudit-Verlauf des Teams und verfügbare Filterwerte einsehen
BadgesGET /badges/{uuid}, GET /badges/{uuid}/smallÖffentliche SVG-Uptime-Badges (keine Authentifizierung nötig)
MonatsberichteGET/PATCH /monthly-report/config, POST /monthly-report/previewKonfiguration und Vorschau der Monatsberichte
PlanGET /planAktuelle Plan-Limits und Nutzung
AbrechnungGET /billing, POST /billing/checkout, POST /billing/swap, POST /billing/cancel, POST /billing/resume, GET /billing/transactionsAbo-Verwaltung

Rate Limits nach Operationstyp

Lese-Operationen (GET) teilen sich das Standard-Limit deines Accounts. Schreib-Operationen (POST/PATCH/DELETE) und Endpoints, die Checks auslösen (z. B. request-run), können niedrigere Limits haben. Die Rate-Limit-Header in jeder Antwort zeigen immer das für den jeweiligen Endpoint geltende Limit.

Badges (öffentlich) ​

Einbettbare SVG-Badges zeigen den Live-Uptime-Status eines Monitors. Diese Endpoints sind öffentlich -- keine Authentifizierung nötig. Badges spiegeln nur den Status des Uptime-Checks wider (nicht GEO, Security-Header etc.).

Standard-Badge ​

GET /api/badges/{monitor_uuid}

Liefert ein SVG-Badge im shields.io-Stil mit Label ("uptime") und Wert (Prozentzahl oder "down").

Kleines Badge ​

GET /api/badges/{monitor_uuid}/small

Liefert ein kompaktes SVG mit farbigem Punkt und Prozenttext.

Query-Parameter ​

ParameterStandardBeschreibung
label_color555Hex-Farbe für den Label-Hintergrund (z. B. 2d333b für Dark Mode)
text_colorfffHex-Farbe für den Badge-Text
styledefaultBadge-Stil: default (Verlauf) oder flat

Beispiel ​

html
<!-- Light Mode -->
<img src="https://app.hoppla.dev/api/badges/YOUR-MONITOR-UUID" alt="Uptime">

<!-- Dark Mode -->
<img src="https://app.hoppla.dev/api/badges/YOUR-MONITOR-UUID?label_color=2d333b&style=flat" alt="Uptime">

Caching ​

Badges werden auf CDN-Ebene (5 Minuten) und Browser-Ebene (1 Minute) gecacht. Rate-Limit: 120 Anfragen/Minute pro IP.


Audit-Log ​

Audit-Ereignisse auflisten ​

GET /api/v1/audit-log

Liefert eine paginierte Liste der Audit-Log-Einträge des aktuellen Teams.

Query-Parameter:

ParameterTypBeschreibung
actionstringNach Aktion(en) filtern. Mehrere durch Komma getrennt (z. B. check_snoozed,check_unsnoozed)
entity_typestringNach Entitätstyp filtern. Einer von: monitor, check, notification_channel, notification_rule, status_page, maintenance_window, incident, user, tenant, managed_tenant, personal_access_token, team_invitation, escalation_policy, escalation_step, on_call_schedule, on_call_rotation
entity_iduuidNach einer bestimmten Entitäts-ID filtern
user_iduuidNach dem Benutzer filtern, der die Aktion ausgeführt hat

Verfügbare Filter abrufen ​

GET /api/v1/audit-log/filters

Liefert die im Audit-Log deines Teams tatsächlich vorkommenden actions und entity_types -- praktisch, um dynamische Filter-Dropdowns zu bauen.

Antwort (200):

json
{
  "data": {
    "actions": ["check_snoozed", "check_unsnoozed", "monitor_created", "..."],
    "entity_types": ["check", "monitor", "incident", "..."]
  }
}

Check snoozen / entsnoozen ​

Einen Check snoozen ​

POST /api/v1/checks/{id}/snooze

Unterdrückt Benachrichtigungen für den Check für die angegebene Dauer.

Request-Body:

FeldTypErforderlichBeschreibung
minutesintegerjaDauer in Minuten (1–1440)

Einen Check entsnoozen ​

POST /api/v1/checks/{id}/unsnooze

Entfernt den Snooze sofort und aktiviert die Benachrichtigungen wieder.

Antwort (200): Liefert die aktualisierte Check-Ressource zurück.


OpenAPI-Spezifikation ​

Durchsuche die vollständige, interaktive API-Referenz — API-Referenz — oder lade die maschinenlesbare OpenAPI-3.1-Spezifikation herunter:

Importiere die Spezifikation in Postman, Insomnia oder jedes andere OpenAPI-kompatible Tool, um die Endpoints interaktiv zu erkunden und zu testen.

Self-Hosted ​

Bei einer selbstgehosteten Instanz werden beide von deiner eigenen Domain ausgeliefert (ohne externe Abhängigkeiten):

  • Interaktive Referenz: https://<deine-domain>/api/docs
  • OpenAPI-Spezifikation: https://<deine-domain>/api/v1/openapi.json

Die servers-URL der Spezifikation wird automatisch auf die Basis-URL deiner Instanz gesetzt.

MCP-Server (KI-Integration) ​

Du kannst KI-Assistenten wie Claude Desktop, Claude Code oder Cursor direkt mit deinen Hoppla-Daten verbinden -- über das Model Context Protocol. Frag einfach nach Monitoren, Vorfällen, Uptime-Statistiken und mehr in natürlicher Sprache. Alle Details findest du in der MCP-Server-Dokumentation.

Reseller-API ​

Bist du ein Hosting-Provider oder eine Agentur, die Kunden-Teams verwaltet? Die Reseller-API bietet dir zusätzliche Endpoints für die programmatische Bereitstellung und Verwaltung von Teams. Schau dir die Reseller-API-Referenz an.