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.
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.
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.
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.
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.
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.