Passer au contenu

API, CLI et MCP

Nous proposons trois façons d'accéder à ton compte, avec les mêmes limites que ton forfait.

API

REST, depuis un pipeline, un script ou tes propres outils. Un token que tu émets et révoques toi-même.

L'API

CLI

Un simple fichier Python, rien à installer. Il utilise l'API. Cela peut être utilisé par quelqu'un dans un terminal : liste ce qui est hors ligne, ajoute ou mets à jour des monitors.

Le client en ligne de commande

MCP

Via le serveur MCP, tu peux laisser Claude ou tout ce qui parle le protocole que l'agent comprend lire ton compte et y apporter des modifications, comme toi, dans une conversation.

Pour un assistant

Ton token API

Crée-en un dans la section API tokens de ton compte. Il est affiché une seule fois, nous n'en conservons qu'une empreinte, et il t'appartient plutôt qu'à l'organisation : il ne peut pas faire plus que toi, et il cesse de fonctionner si tu pars ou si ton rôle change.

Envoie-le comme Authorization: Bearer n404_... à chaque appel. Le premier appel utile est /api/v1/me, qui répond pour quelle organisation le token agit, quel rôle il porte et lequel des deux scopes il a : une personne avec deux comptes a deux tokens et aucun autre moyen de savoir lequel est dans une variable d'environnement.

Ce qu'il y a dans la version 1

Appel Ce qu'il fait
GET /api/v1/me Ce qu'est ce token, et pour quelle organisation il agit
GET /api/v1/monitors Tous les monitors, du plus ancien au plus récent
POST /api/v1/monitors Crée-en un, selon les mêmes règles que le formulaire respecte
GET /api/v1/monitors/{id} Un monitor
PATCH /api/v1/monitors/{id} Change son nom, son adresse, son intervalle ou sa config, ou mets-le en pause
DELETE /api/v1/monitors/{id} Supprime-le, ainsi que son historique
GET /api/v1/monitors/{id}/status Ce qu'il fait maintenant, et son uptime sur une période
GET /api/v1/groups Chaque groupe, avec combien de monitors il contient
POST /api/v1/groups Crée-en un ; un nom existant renvoie le groupe qui l'a
GET /api/v1/groups/{id} Un groupe
PATCH /api/v1/groups/{id} Renomme-le ou change sa description
DELETE /api/v1/groups/{id} Supprime-le. Ses monitors restent, sans groupe
GET /api/v1/incidents Pannes, les plus récentes d'abord, filtrées par état, monitor ou période
GET /api/v1/incidents/{id} Un incident, avec les probes qui l'ont vu et confirmé
GET /api/v1/maintenance Fenêtres de maintenance et ce qu'elles couvrent
GET /api/v1/maintenance/{id} Une fenêtre, avec les monitors et groupes qu'elle couvre
POST /api/v1/maintenance Planifie-en une, selon l'horloge de ton organisation, pour qu'un déploiement puisse ouvrir une fenêtre avant de commencer
DELETE /api/v1/maintenance/{id} Supprime-la. Ce qu'elle couvrait reste couvert
GET /api/v1/status-pages Chaque status page, et si elle est activée
GET /api/v1/status-pages/{id} Une page, et ce qui y est publié
POST /api/v1/status-pages/{id}/monitors Ajoute un monitor à la page, sous le nom que son audience doit lire
DELETE /api/v1/status-pages/{id}/monitors/{id} Retire-le de cette page. Les autres pages le gardent
POST /api/v1/status-pages/{id}/groups Ajoute un groupe à la page ; les monitors qu'il contient viennent aussi
DELETE /api/v1/status-pages/{id}/groups/{id} Retire l'en-tête. Ses monitors restent publiés

Chaque id dans un chemin ou un corps est l'UUID. L'écriture nécessite un token de lecture et d'écriture et un rôle autorisé à écrire.

openapi.json

Le document est au format OpenAPI 3.1. Il décrit chaque appel. Tu peux l'utiliser pour générer un client avec openapi-generator, oapi-codegen.

La version 1 ne fait que grandir : un champ peut être ajouté, aucun n'est supprimé ou retypé, et une deuxième version serait un deuxième chemin. Ainsi, un client généré continue de fonctionner, et le régénérer permet de récupérer les nouveautés.

Un client, si tu en veux un

Un fichier, Python 3.9 ou plus récent, sans dépendances. Télécharge-le et mets ton token dans l'environnement. Il fait tout ce que l'API fait, car chaque commande est un appel aux routes ci-dessus.

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

Le token vient de N404_TOKEN ou d'un fichier nomore404.env à côté du script.

Pour un assistant

Un assistant peut lire ce compte et le modifier via le Model Context Protocol.

Une adresse, rien à installer

Colle ceci là où ton assistant demande un connecteur personnalisé. Il t'enverra ici pour te connecter et indiquer pour quelle organisation est la connexion, et c'est toute la configuration.

Il agit en ton nom : ton rôle est lu à chaque appel, donc un assistant connecté par quelqu'un qui ne peut que lire ne pourra que lire. Il lit les monitors, les pannes, l'uptime, les fenêtres de maintenance et les groupes, et il peut les ajouter et les modifier, ce qui inclut la suppression d'un monitor et de son historique. Déconnecte-le quand tu veux depuis Tokens API, où il est listé à côté d'eux.

Échecs, et longues listes

Une forme d'erreur

Le status indique la catégorie. Le corps indique quelle erreur c'était, avec un code pour bifurquer et une phrase à lire. La phrase peut être reformulée dans n'importe quelle version, donc rien ne devrait l'analyser.

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

Cursors, pas offsets

Une liste répond avec items et next_cursor. Renvoie le cursor pour obtenir la page suivante, et arrête-toi quand il est null. Les incidents arrivent pendant que tu les lis, et un offset te montrerait discrètement une ligne deux fois et ne montrerait jamais la suivante.

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

Limites

Un token peut faire 120 appels par minute. Chaque réponse inclut RateLimit-Remaining et RateLimit-Reset, donc un client bien conçu peut s'adapter au lieu de découvrir la limite en la dépassant. Quand le compte dépasse la limite, tu verras une réponse 429 avec Retry-After.

Crée un compte gratuit