Zum Inhalt springen

API, CLI und MCP

Wir bieten drei Möglichkeiten, auf dein Konto zuzugreifen, mit den gleichen Limits wie dein Tarif.

API

REST, aus einer Pipeline, einem Skript oder deinen eigenen Tools. Ein Token, das du selbst ausstellst und widerrufst.

Die API

CLI

Eine einfache Python-Datei, nichts zu installieren. Sie nutzt die API. Das kann von jemandem am Terminal verwendet werden: auflisten, was offline ist, Monitore hinzufügen oder aktualisieren.

Der Kommandozeilen-Client

MCP

Über den MCP-Server kannst du Claude oder alles, was das Protokoll spricht, den Agenten dein Konto lesen und Änderungen vornehmen lassen, als du, in einem Gespräch.

Für einen Assistant

Dein API-Token

Erstelle einen unter API-Tokens in deinem Konto. Er wird einmal angezeigt, wir speichern nur einen Fingerabdruck davon, und er gehört dir und nicht der Organisation: er kann nicht mehr als du und funktioniert nicht mehr, wenn du gehst oder sich deine Rolle ändert.

Sende es als Authorization: Bearer n404_... bei jedem Aufruf. Der erste, der sich lohnt, ist /api/v1/me, der beantwortet, für welche Organisation das Token gilt, welche Rolle es trägt und welchen der beiden Scopes es hat: eine Person mit zwei Konten hat zwei Tokens und keine andere Möglichkeit, zu erkennen, welches in einer Umgebungsvariable ist.

Was in Version 1 enthalten ist

Aufruf Was es macht
GET /api/v1/me Was dieses Token ist und für welche Organisation es gilt
GET /api/v1/monitors Jeder Monitor, der älteste zuerst
POST /api/v1/monitors Erstelle einen, nach den gleichen Regeln wie das Formular
GET /api/v1/monitors/{id} Ein Monitor
PATCH /api/v1/monitors/{id} Ändere seinen Namen, seine Adresse, sein Intervall oder seine Konfiguration, oder pausiere ihn
DELETE /api/v1/monitors/{id} Lösche ihn und seine Historie mit ihm
GET /api/v1/monitors/{id}/status Was es jetzt tut und seine Uptime über ein Zeitfenster
GET /api/v1/groups Jede Gruppe, mit der Anzahl der Monitore darin
POST /api/v1/groups Erstelle eine; ein existierender Name gibt die Gruppe zurück, die ihn hat
GET /api/v1/groups/{id} Eine Gruppe
PATCH /api/v1/groups/{id} Benenne sie um oder ändere ihre Beschreibung
DELETE /api/v1/groups/{id} Lösche sie. Ihre Monitore bleiben, ohne Gruppe
GET /api/v1/incidents Ausfälle, die neuesten zuerst, gefiltert nach Status, Monitor oder Zeitraum
GET /api/v1/incidents/{id} Ein Vorfall, mit den Probes, die ihn gesehen und bestätigt haben
GET /api/v1/maintenance Wartungsfenster und was sie abdecken
GET /api/v1/maintenance/{id} Ein Fenster, mit den Monitoren und Gruppen, die es abdeckt
POST /api/v1/maintenance Plane eines, nach der Uhr deiner Organisation, damit ein Deploy ein Fenster öffnen kann, bevor es startet
DELETE /api/v1/maintenance/{id} Lösche es. Was es bereits abgedeckt hat, bleibt abgedeckt
GET /api/v1/status-pages Jede Statusseite und ob sie eingeschaltet ist
GET /api/v1/status-pages/{id} Eine Seite und was darauf veröffentlicht ist
POST /api/v1/status-pages/{id}/monitors Setze einen Monitor auf die Seite, unter dem Namen, den das Publikum lesen soll
DELETE /api/v1/status-pages/{id}/monitors/{id} Nimm ihn von dieser Seite. Andere Seiten behalten ihn
POST /api/v1/status-pages/{id}/groups Setze eine Gruppe auf die Seite; die Monitore darin kommen mit
DELETE /api/v1/status-pages/{id}/groups/{id} Nimm die Überschrift weg. Ihre Monitore bleiben veröffentlicht

Jede id in einem Pfad oder Body ist die UUID. Schreiben erfordert ein Lese- und Schreib-Token und eine Rolle, die schreiben darf.

openapi.json

Das Dokument ist im OpenAPI 3.1-Format. Es beschreibt jeden Aufruf. Du kannst es verwenden, um einen Client mit openapi-generator, oapi-codegen zu generieren.

Version 1 wächst nur: Ein Feld kann hinzugefügt werden, keines wird entfernt oder umgetypt, und eine zweite Version wäre ein zweiter Pfad. So funktioniert ein generierter Client weiter, und durch Regenerieren holst du dir die Neuerungen.

Ein Client, falls du einen willst

Eine Datei, Python 3.9 oder neuer, keine Abhängigkeiten. Lade sie herunter und lege dein Token in die Umgebung. Sie macht alles, was die API macht, denn jeder Befehl ist ein Aufruf der oben genannten Routen.

nomore404.py

curl -O https://nomore404.com/api/nomore404.py
curl -s https://nomore404.com/api/nomore404.py.sha256 | sha256sum -c
chmod +x nomore404.py
export N404_TOKEN=n404_...

./nomore404.py monitors list
./nomore404.py monitors add --type https --target shop.example.com
./nomore404.py incidents --state open

Das Token kommt von N404_TOKEN oder aus einer nomore404.env-Datei neben dem Skript.

Für einen Assistant

Ein Assistant kann dieses Konto lesen und ändern, über das Model Context Protocol.

Eine Adresse, nichts zu installieren

Füge dies dort ein, wo dein Assistant nach einem benutzerdefinierten Connector fragt. Er wird dich hierher schicken, um dich anzumelden und zu sagen, für welche Organisation die Verbindung ist, und das ist die gesamte Einrichtung.

Es handelt als du: Deine Rolle wird bei jedem Call gelesen, sodass ein Assistant, der von jemandem verbunden wurde, der nur lesen darf, auch nur lesen kann. Es liest Monitore, Ausfälle, Uptime, Wartungsfenster und Gruppen und kann sie hinzufügen und ändern, einschließlich des Löschens eines Monitors und seiner Historie. Trenne es jederzeit von API-Tokens, wo es neben ihnen aufgelistet ist.

Fehler und lange Listen

Eine Fehlerform

Der Status sagt die Kategorie. Der Body sagt, welcher Fehler es war, mit einem Code zum Verzweigen und einem Satz zum Lesen. Der Satz kann in jeder Version umformuliert werden, daher sollte ihn nichts parsen.

{
  "error": {
    "code": "monitor_not_found",
    "message": "Nothing here with that id."
  }
}

Cursors, keine Offsets

Eine Liste antwortet mit items und next_cursor. Gib den Cursor zurück, um die nächste Seite zu bekommen, und höre auf, wenn er null ist. Vorfälle kommen an, während du sie liest, und ein Offset würde dir stillschweigend eine Zeile zweimal zeigen und die nächste nie.

GET /api/v1/incidents?limit=50
GET /api/v1/incidents?limit=50&cursor=...

Limits

Ein Token kann 120 Aufrufe pro Minute machen. Jede Antwort enthält RateLimit-Remaining und RateLimit-Reset, damit sich ein gut programmiertes Client selbst regulieren kann, statt das Limit durch ständiges Ausprobieren zu finden. Wenn das Konto das Limit überschreitet, siehst du eine 429-Antwort mit Retry-After.

Erstelle ein kostenloses Konto