API, CLI e MCP
Offriamo tre modi per accedere al tuo account, con gli stessi limiti del tuo piano.
API
REST, da una pipeline, uno script o i tuoi strumenti. Un token che emetti e revochi tu stesso.
CLI
Un semplice file Python, niente da installare. Usa l'API. Può essere usato da qualcuno al terminale: elenca cosa è offline, aggiungi o aggiorna monitor.
MCP
Tramite il server MCP puoi permettere a Claude o a qualsiasi cosa che parli il protocollo che l'agente legge di accedere al tuo account e fare modifiche, come te, in una conversazione.
Il tuo token API
Creane uno sotto API tokens nel tuo account. Viene mostrato una sola volta, conserviamo solo un'impronta di esso, e appartiene a te piuttosto che all'organizzazione: non può fare più di quanto puoi fare tu, e smette di funzionare se lasci o il tuo ruolo cambia.
Invialo come Authorization: Bearer n404_... in ogni chiamata. La prima che vale la pena fare è /api/v1/me, che risponde per quale organizzazione agisce il token, quale ruolo ha e quale dei due ambiti possiede: una persona con due account ha due token e nessun altro modo per sapere quale è in una variabile d'ambiente.
Cosa c'è nella versione 1
| Chiamata | Cosa contiene |
|---|---|
| GET /api/v1/me | Cosa è questo token e per quale organizzazione agisce |
| GET /api/v1/monitors | Ogni monitor, dal più vecchio |
| POST /api/v1/monitors | Creane uno, seguendo le stesse regole del modulo |
| GET /api/v1/monitors/{id} | Un monitor |
| PATCH /api/v1/monitors/{id} | Cambia il suo nome, indirizzo, intervallo o configurazione, o mettilo in pausa |
| DELETE /api/v1/monitors/{id} | Eliminalo, e la sua cronologia con esso |
| GET /api/v1/monitors/{id}/status | Cosa sta facendo ora e il suo uptime su una finestra |
| GET /api/v1/groups | Ogni gruppo, con quanti monitor ci sono dentro |
| POST /api/v1/groups | Creane uno; un nome che esiste restituisce il gruppo che lo ha |
| GET /api/v1/groups/{id} | Un gruppo |
| PATCH /api/v1/groups/{id} | Rinominalo o cambia la sua descrizione |
| DELETE /api/v1/groups/{id} | Eliminalo. I suoi monitor restano, non raggruppati |
| GET /api/v1/incidents | Interruzioni, le più recenti per prime, filtrate per stato, monitor o periodo |
| GET /api/v1/incidents/{id} | Un incidente, con i probe che lo hanno visto e confermato |
| GET /api/v1/maintenance | Finestre di manutenzione e cosa coprono |
| GET /api/v1/maintenance/{id} | Una finestra, con i monitor e i gruppi che copre |
| POST /api/v1/maintenance | Programmane una, sull'orologio della tua organizzazione, così un deploy può aprire una finestra prima di iniziare |
| DELETE /api/v1/maintenance/{id} | Eliminala. Ciò che copriva resta coperto |
| GET /api/v1/status-pages | Ogni status page, e se è attiva |
| GET /api/v1/status-pages/{id} | Una pagina, e cosa è pubblicato su di essa |
| POST /api/v1/status-pages/{id}/monitors | Metti un monitor sulla pagina, sotto il nome che il pubblico dovrebbe leggere |
| DELETE /api/v1/status-pages/{id}/monitors/{id} | Rimuovilo da questa pagina. Le altre pagine lo mantengono |
| POST /api/v1/status-pages/{id}/groups | Metti un gruppo sulla pagina; i monitor al suo interno vengono inclusi |
| DELETE /api/v1/status-pages/{id}/groups/{id} | Rimuovi l'intestazione. I suoi monitor restano pubblicati |
Ogni id in un percorso o in un corpo è l'UUID. Scrivere richiede un token di lettura e scrittura e un ruolo che possa scrivere.
Il documento è nel formato OpenAPI 3.1. Descrive ogni chiamata. Puoi usarlo per generare un client con openapi-generator, oapi-codegen.
La versione 1 cresce solo: un campo può essere aggiunto, nessuno viene rimosso o ritipizzato, e una seconda versione sarebbe un secondo path. Quindi un client generato continua a funzionare, e rigenerarlo è come acquisire le novità.
Un client, se ne vuoi uno
Un file, Python 3.9 o più recente, senza dipendenze. Scaricalo e metti il tuo token nell'ambiente. Fa tutto ciò che fa l'API, perché ogni comando è una chiamata alle route sopra.
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
Il token proviene da N404_TOKEN o da un file nomore404.env accanto allo script.
Per un assistant
Un assistant può leggere questo account e modificarlo tramite il Model Context Protocol.
Un indirizzo, niente da installare
Incolla questo dove il tuo assistant chiede un connettore personalizzato. Ti invierà qui per accedere e per dire a quale organizzazione è destinata la connessione, e questa è tutta la configurazione.
Agisce come te: il tuo ruolo viene letto a ogni chiamata, quindi un assistant connesso da qualcuno che può solo leggere può solo leggere. Legge monitor, interruzioni, uptime, finestre di manutenzione e gruppi, e può aggiungerli e modificarli, il che include eliminare un monitor e la sua cronologia. Disconnettilo quando vuoi da Token API, dove è elencato accanto a loro.
Errori e lunghe liste
Una forma di errore
Lo status indica la categoria. Il body dice quale errore è stato, con un codice su cui ramificare e una frase da leggere. La frase può essere riformulata in qualsiasi release, quindi nulla dovrebbe analizzarla.
{
"error": {
"code": "monitor_not_found",
"message": "Nothing here with that id."
}
}
Cursori, non offset
Un elenco risponde con items e next_cursor. Passa il cursore indietro per ottenere la pagina successiva e fermati quando è null. Gli incidenti arrivano mentre li stai leggendo, e un offset mostrerebbe silenziosamente una riga due volte e mai la successiva.
GET /api/v1/incidents?limit=50
GET /api/v1/incidents?limit=50&cursor=...
Limiti
Un token può effettuare 120 chiamate al minuto. Ogni risposta include RateLimit-Remaining e RateLimit-Reset, così un client ben configurato può regolarsi invece di scoprire il limite superandolo. Quando l'account supera il limite, vedrai una risposta 429 con Retry-After.