Direct naar inhoud

API, CLI en MCP

We bieden drie manieren om toegang te krijgen tot je account, met dezelfde limieten als je abonnement.

API

REST, vanuit een pipeline, een script of je eigen tools. Een token die je zelf uitgeeft en intrekt.

De API

CLI

Eén eenvoudig Python-bestand, niets te installeren. Het gebruikt de API. Dit kan worden gebruikt door iemand achter een terminal: lijst wat down is, voeg monitors toe of werk ze bij.

De command line client

MCP

Via de MCP-server kun je Claude of alles wat het protocol spreekt toestaan om je account te lezen en wijzigingen aan te brengen, als jij, in een gesprek.

Voor een assistent

Je API-token

Maak er een onder API-tokens in je account. Het wordt één keer getoond, we bewaren alleen een vingerafdruk ervan, en het hoort bij jou in plaats van bij de organisatie: het kan niet meer dan jij kunt, en het stopt met werken als je vertrekt of je rol verandert.

Stuur het als Authorization: Bearer n404_... bij elke call. De eerste die de moeite waard is, is /api/v1/me, die antwoordt voor welke organisatie de token werkt, welke rol het heeft en welke van de twee scopes het heeft: iemand met twee accounts heeft twee tokens en geen andere manier om te zien welke in een omgevingsvariabele zit.

Wat er in versie 1 zit

Aanroep Wat het uitvoert
GET /api/v1/me Wat deze token is, en voor welke organisatie het werkt
GET /api/v1/monitors Elke monitor, oudste eerst
POST /api/v1/monitors Maak er een, volgens dezelfde regels als het formulier volgt
GET /api/v1/monitors/{id} Eén monitor
PATCH /api/v1/monitors/{id} Wijzig de naam, het adres, het interval of de configuratie, of pauzeer het
DELETE /api/v1/monitors/{id} Verwijder het, en de geschiedenis ervan
GET /api/v1/monitors/{id}/status Wat het nu doet, en de uptime over een periode
GET /api/v1/groups Elke groep, met hoeveel monitors erin zitten
POST /api/v1/groups Maak er een; een naam die al bestaat geeft de groep terug die die naam heeft
GET /api/v1/groups/{id} Eén groep
PATCH /api/v1/groups/{id} Geef het een nieuwe naam, of pas de beschrijving aan
DELETE /api/v1/groups/{id} Verwijder het. De monitors blijven, zonder groep
GET /api/v1/incidents Storingen, nieuwste eerst, gefilterd op status, monitor of periode
GET /api/v1/incidents/{id} Eén incident, met de probes die het zagen en bevestigden
GET /api/v1/maintenance Onderhoudsvensters en wat ze dekken
GET /api/v1/maintenance/{id} Eén venster, met de monitors en groepen die het dekt
POST /api/v1/maintenance Plan er een in, op de klok van je organisatie, zodat een deploy een venster kan openen voordat het begint
DELETE /api/v1/maintenance/{id} Verwijder het. Wat het al dekte blijft gedekt
GET /api/v1/status-pages Elke statuspagina, en of die aan staat
GET /api/v1/status-pages/{id} Eén pagina, en wat erop gepubliceerd is
POST /api/v1/status-pages/{id}/monitors Zet een monitor op de pagina, onder de naam die het publiek moet zien
DELETE /api/v1/status-pages/{id}/monitors/{id} Haal het van deze pagina af. Andere pagina's houden het
POST /api/v1/status-pages/{id}/groups Zet een groep op de pagina; de monitors erin komen ook mee
DELETE /api/v1/status-pages/{id}/groups/{id} Haal de kop weg. De monitors blijven gepubliceerd

Elke id in een pad of body is de UUID. Schrijven vereist een read- en write-token en een rol die mag schrijven.

openapi.json

Het document is in het OpenAPI 3.1-formaat. Het beschrijft elke call. Je kunt het gebruiken om een client te genereren met openapi-generator, oapi-codegen.

Versie 1 groeit alleen maar: een veld kan worden toegevoegd, niets wordt verwijderd of hergetypt, en een tweede versie zou een tweede pad zijn. Dus een gegenereerde client blijft werken, en door hem opnieuw te genereren krijg je wat nieuw is.

Een client, als je er een wilt

Eén bestand, Python 3.9 of nieuwer, geen dependencies. Download het en zet je token in de omgeving. Het doet alles wat de API doet, want elke opdracht is één call naar de routes hierboven.

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

De token komt uit N404_TOKEN of uit een nomore404.env-bestand naast het script.

Voor een assistent

Een assistent kan dit account lezen en wijzigen via het Model Context Protocol.

Eén adres, niets te installeren

Plak dit waar je assistant vraagt om een aangepaste connector. Het stuurt je hierheen om in te loggen en aan te geven voor welke organisatie de verbinding is, en dat is de hele setup.

Het handelt als jij: je rol wordt bij elke oproep gelezen, dus een assistant die is verbonden door iemand die alleen mag lezen, kan alleen lezen. Het leest monitors, storingen, uptime, onderhoudsvensters en groepen, en het kan ze toevoegen en wijzigen, inclusief het verwijderen van een monitor en de geschiedenis ervan. Ontkoppel het wanneer je wilt via API-tokens, waar het naast hen wordt vermeld.

Fouten en lange lijsten

Eén foutvorm

De status geeft de categorie aan. Het lichaam geeft aan welke fout het was, met een code om op te vertakken en een zin om te lezen. De zin kan in elke release worden herschreven, dus niets mag deze parsen.

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

Cursors, geen offsets

Een lijst antwoordt met items en next_cursor. Geef de cursor terug om de volgende pagina te krijgen, en stop wanneer deze null is. Incidenten komen binnen terwijl je ze leest, en een offset zou je stilletjes één rij twee keer laten zien en nooit de volgende.

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

Limieten

Eén token mag 120 oproepen per minuut doen. Elk antwoord bevat RateLimit-Remaining en RateLimit-Reset, zodat een goed functionerende client zichzelf kan reguleren in plaats van de limiet te vinden door deze te overschrijden. Wanneer het account de limiet overschrijdt, zie je een 429-respons met Retry-After.

Maak een gratis account aan