API d'uptime et outils MCP CoreDash : moniteurs et checks
Listez, ajoutez, modifiez et mettez en pause les moniteurs d'uptime avec votre clé API CoreDash, et consultez leurs checks en REST ou via MCP.
Moniteurs d'uptime via l'API CoreDash
Consultez et modifiez les moniteurs d'uptime de vos projets CoreDash en REST, avec la clé API que vous utilisez déjà pour vos données RUM. Un agent IA les lit via MCP.
Démarrage rapide
- URL de base
https://app.coredash.app/api/uptime/monitors, JSON en entrée et en sortie. - En-tête
Authorization: Bearer cdk_your_key, avec une clé de projet ou une clé maître. - Premier appel :
GET /api/uptime/monitorsliste vos moniteurs avec leur état et l'uptime des 7 derniers jours.
curl https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_your_key"
Clés API pour les moniteurs d'uptime
Les endpoints d'uptime acceptent les clés de l'API CoreDash et de l'API Agency.
| Clé | Commence par | Voit | Projet cible d'un nouveau moniteur |
|---|---|---|---|
| Clé de projet | cdk_ | Les moniteurs de son propre projet | Son propre projet, toujours |
| Clé maître | cdk_master_ | Les moniteurs de tous les projets que vous possédez ou auxquels vous êtes invité | Le projet indiqué dans project_id, parmi ceux que vous possédez |
Créez une clé de projet sur la page Connect Your AI dans la barre latérale du projet : donnez-lui un nom et cliquez sur « Generate API key ». Ces mêmes clés figurent dans les paramètres du projet sous « API Keys (MCP) ». Seuls les propriétaires du projet peuvent les créer. Une clé maître s'obtient sur la page Agency API de la barre latérale, pour les comptes agence. Lorsqu'un projet a expiré, sa clé de projet reçoit une 401 à chaque appel.
Un invité sur un projet peut lire ses moniteurs. Pour en ajouter, en modifier, en déplacer ou en supprimer, vous devez posséder le projet.
Le token OAuth d'une connexion IA comme Claude (mcp_at_) fonctionne uniquement en lecture. Tout appel POST, PATCH ou DELETE avec ce token reçoit une 403.
Endpoints d'uptime
| Méthode et chemin | Action | Réponse |
|---|---|---|
GET /api/uptime/monitors | Liste tous les moniteurs accessibles avec la clé, triés par nom. | 200, { "monitors": [...] }, chacun avec un summary |
POST /api/uptime/monitors | Ajoute un moniteur. Le premier check s'exécute lors du prochain round, à :00 ou :30. | 201, { "monitor": {...} } |
GET /api/uptime/monitors/:id | Un moniteur avec ses checks, du plus récent au plus ancien. ?limit= définit le nombre de checks : 300 par défaut, au maximum 2100. | 200, { "monitor", "summary", "checks", "rum" } |
PATCH /api/uptime/monitors/:id | Modifie les champs envoyés et conserve le reste. | 200, { "monitor": {...} } |
DELETE /api/uptime/monitors/:id | Supprime le moniteur et tous ses checks. | 200, { "deleted": true } |
L'IP d'origine et les valeurs d'en-tête sont secrètes. Elles sont renvoyées par POST, PATCH et GET /api/uptime/monitors/:id. La liste et les outils MCP omettent origin_ip et affichent chaque valeur d'en-tête sous la forme ••••.
L'objet moniteur
| Champ | Description |
|---|---|
id | L'ID du moniteur, pour le :id des chemins. |
name, url | Le nom dans l'application et l'URL vérifiée. |
project_id | Le projet CoreDash auquel appartient le moniteur. |
paused | true tant que le moniteur n'est pas vérifié. |
expect_status | Le code HTTP considéré comme un succès. 200 par défaut. |
origin_check | true quand une IP d'origine est configurée, pour que chaque round vérifie aussi le serveur directement. |
origin_ip | L'IP du serveur. Présente uniquement dans les réponses contenant des données sensibles. |
headers | Les en-têtes de requête supplémentaires, [{ "name", "value" }]. |
state | pending, up, failing, down, warn, blocked ou paused. Voir le tableau des états ci-dessous. |
last_check_at, last_up_at | Le dernier round, et le dernier round qui était up. |
down_since | En cas d'indisponibilité : l'heure du premier round en échec. Sinon null. |
last_down | La dernière panne terminée, { "from", "to" }, ou null. |
check_requested_at | Défini lors de l'ajout du moniteur. Le round suivant le réinitialise. |
last | Le dernier check par type : edge et origin, chacun sous forme d'objet check. origin_is_cdn vaut true lorsque le check d'origine a répondu avec des en-têtes Cloudflare, indiquant que l'IP saisie n'est pas celle de votre serveur. |
cert_expires | Date d'expiration du certificat HTTPS présenté aux visiteurs. |
created_at | Date d'ajout du moniteur. |
Les champs summary et rum
La liste comme le moniteur individuel contiennent un summary : rounds_7d et down_rounds_7d comptent les rounds des 7 derniers jours, uptime_7d indique le pourcentage de ces rounds sans aucun check down, et recent contient les 48 derniers rounds, du plus ancien au plus récent, avec à chaque fois le pire résultat du round. Un moniteur sans aucun check au cours des 7 derniers jours renvoie summary: null.
Le moniteur individuel inclut aussi rum : le TTFB au p75 constaté par vos vrais visiteurs au cours des 7 derniers jours, issu des données RUM du projet, pour le comparer au ttfb_ms de la sonde. Ce champ vaut null tant que le projet n'a pas de données RUM.
GET /api/uptime/monitors/:id
curl "https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16?limit=2" \
-H "Authorization: Bearer cdk_your_key"
{
"monitor": {
"id": "6ad68c7a844fad80b752fd16",
"name": "Checkout",
"url": "https://www.example.com/checkout/",
"project_id": "655f1f77bcf86cd799439011",
"paused": false,
"expect_status": 200,
"origin_check": true,
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"state": "up",
"last_check_at": "2026-10-20T08:00:09.000Z",
"last_up_at": "2026-10-20T08:00:09.000Z",
"down_since": null,
"last_down": { "from": "2026-10-18T19:00:11.000Z", "to": "2026-10-18T20:00:10.000Z" },
"check_requested_at": null,
"last": {
"edge": { "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "edge", "outcome": "up", "status": 200, "ttfb_ms": 212, "total_ms": 388, "connect_ms": 14, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": true, "cache_status": "DYNAMIC" },
"origin": { "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "origin", "outcome": "up", "status": 200, "ttfb_ms": 640, "total_ms": 702, "connect_ms": 9, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": false, "cache_status": null },
"origin_is_cdn": false
},
"cert_expires": "2027-01-02T23:59:59.000Z",
"created_at": "2026-10-06T09:12:41.000Z"
},
"summary": {
"rounds_7d": 336,
"down_rounds_7d": 2,
"uptime_7d": 99.4,
"recent": [
{ "at": "2026-10-20T07:30:10.000Z", "outcome": "up" },
{ "at": "2026-10-20T08:00:09.000Z", "outcome": "up" }
]
},
"checks": [
{ "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "edge", "outcome": "up", "status": 200, "ttfb_ms": 212, "total_ms": 388, "connect_ms": 14, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": true, "cache_status": "DYNAMIC" },
{ "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "origin", "outcome": "up", "status": 200, "ttfb_ms": 640, "total_ms": 702, "connect_ms": 9, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": false, "cache_status": null }
],
"rum": { "ttfb_p75": 1920, "rating": "poor", "period": "last 7 days" }
}
Dans la réponse réelle, recent contient 48 rounds ; cet exemple montre les deux derniers.
L'objet check et ses résultats
Toutes les 30 minutes, un round vérifie chaque moniteur à tour de rôle depuis deux serveurs : scan1 à :00, scan2 à :30. Un round vérifie toujours l'URL telle que les visiteurs y accèdent, via le DNS et votre CDN (edge). Si une IP d'origine est configurée, il teste aussi directement votre serveur (origin). L'API ne propose aucun appel pour vérifier un moniteur entre deux rounds. Les checks sont conservés 30 jours.
Chaque check envoie le user agent CoreDash/1.0 (uptime; +https://www.coredash.app/bot). Lorsque l'URL du moniteur se trouve sur le site propre de votre projet (son hôte, avec ou sans www, ou un sous-domaine), le check envoie aussi l'en-tête X-CoreDash-Bot contenant la valeur secrète de votre projet, disponible dans l'onglet CoreDash bot token des paramètres du projet. Un moniteur pointant vers tout autre site ne reçoit aucun token. En cas de redirection, le token suit la même règle que les headers configurés : il n'est transmis que si la redirection reste sur l'hôte du moniteur. Si vous définissez votre propre en-tête nommé X-CoreDash-Bot, il est supprimé. La page sur le bot CoreDash donne plus de détails sur ces deux points.
| Champ | Description |
|---|---|
at, server | Moment où le serveur a rapporté le round, et serveur qui l'a exécuté : scan1 ou scan2. Les checks d'un même round partagent le même at. |
mode | edge ou origin. |
outcome | up, down, blocked ou warn. |
status | Code HTTP de la dernière réponse, après les redirections. null si rien n'a répondu. |
ttfb_ms, total_ms, connect_ms | Time to First Byte et durée totale, tous deux incluant les redirections, ainsi que le temps de connexion de la première requête. |
redirects, final_url | Nombre de redirections suivies et URL ayant répondu en dernier. |
error, error_text | Raison de l'échec du check, sous forme de valeur issue du tableau ci-dessous et de texte explicatif. |
cloudflare, cache_status | Indique si la réponse est passée par Cloudflare, avec l'en-tête de cache du CDN (cf-cache-status ou x-cache). |
Comment un check obtient son résultat
| Résultat | Condition |
|---|---|
up | Le code correspond à expect_status, sauf s'il s'agit d'une 403, d'une 429 ou d'un code 500 ou supérieur : ceux-ci comptent en priorité comme blocked ou down. |
down | Un code 500 ou supérieur, ou une error : dns, connect, connect_timeout (pas de connexion sous 10 secondes), timeout (pas de réponse complète sous 30 secondes), tls, redirects (plus de 5) ou network. |
blocked | Une 403, une 429 ou un challenge Cloudflare : un pare-feu a bloqué la sonde. Jamais comptabilisé comme indisponibilité. Autoriser CoreDash dans votre pare-feu. |
warn | Tout autre code, comme une 404 sur un checkout après un déploiement. Également invalid_ip et invalid_url : l'URL ou une redirection mène à une adresse privée ou réservée, ou une redirection pointe vers un élément qui n'est pas une URL. La sonde n'envoie pas de requête dans ces cas-là. |
Le pire résultat parmi les checks d'un round détermine l'état du moniteur, du pire au meilleur : down, blocked, warn, up.
États d'un moniteur
state | Dans l'application | Signification |
|---|---|---|
pending | En attente du premier check | Ajouté ; le premier round n'a pas encore tourné. |
up | Opérationnel | Le dernier round a obtenu le statut attendu. |
failing | Défaillant | Un round a échoué. Un échec de plus et il passe en down. |
down | Indisponible | Deux rounds consécutifs ont échoué : les deux serveurs ont constaté l'échec. |
warn | Statut inattendu | Le dernier round a renvoyé warn. |
blocked | Bloqué | Un pare-feu a bloqué la sonde. |
paused | En pause | Non vérifié tant que paused n'est pas repassé à false. |
Un moniteur lié à un projet dont l'abonnement a pris fin conserve sa configuration et son dernier état. Il n'est plus vérifié tant que le projet n'est pas payé à nouveau.
Ajouter, modifier et supprimer un moniteur
POST /api/uptime/monitors
curl -X POST https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_master_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.example.com/checkout/",
"name": "Checkout",
"project_id": "655f1f77bcf86cd799439011",
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"expect_status": 200
}'
| Champ | Règles |
|---|---|
url | Requis pour un POST. Une URL http ou https complète, sans nom d'utilisateur ni mot de passe. |
name | Jusqu'à 80 caractères ; les noms plus longs sont tronqués. Vide lors d'un POST : l'hôte de l'URL. Vide lors d'un PATCH : l'ancien nom est conservé, ou le nouvel hôte si le même PATCH transmet une nouvelle url. |
project_id | Requis avec une clé maître : un projet que vous possédez, avec un abonnement actif ou une période d'essai en cours. Une clé de projet l'ignore et utilise son propre projet. |
origin_ip | Une adresse IPv4 ou IPv6 publique de votre serveur. Active le check d'origine : directement vers cette IP, sans passer par le DNS ni le CDN. "" ou null le supprime. |
headers | Jusqu'à 5 en-têtes de requête supplémentaires, [{ "name", "value" }]. Noms : lettres, chiffres et tirets, jusqu'à 64 caractères. Valeurs : jusqu'à 256 caractères, les plus longues sont tronquées. Lors d'une redirection, ils ne sont transmis que tant que la requête reste sur l'hôte du moniteur, avec ou sans www. Une redirection vers tout autre hôte, sous-domaine compris, n'en reçoit aucun. |
expect_status | Le code HTTP considéré comme un succès, de 100 à 599. 200 par défaut. Un code 403, 429 ou tout code supérieur ou égal à 500 n'est jamais considéré comme un succès. |
paused | true interrompt les checks, false les relance. |
La réponse renvoie un code 201 avec le nouveau moniteur, incluant l'IP d'origine et les valeurs d'en-tête :
{
"monitor": {
"id": "6ad68c7a844fad80b752fd16",
"name": "Checkout",
"url": "https://www.example.com/checkout/",
"project_id": "655f1f77bcf86cd799439011",
"paused": false,
"expect_status": 200,
"origin_check": true,
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"state": "pending",
"last_check_at": null,
"last_up_at": null,
"down_since": null,
"last_down": null,
"check_requested_at": "2026-10-20T09:12:41.000Z",
"last": {},
"cert_expires": null,
"created_at": "2026-10-20T09:12:41.000Z"
}
}
PATCH /api/uptime/monitors/:id
Envoyez uniquement les champs à modifier. headers remplace la liste complète, transmettez donc chaque en-tête à conserver. Pour mettre un moniteur en pause :
curl -X PATCH https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key" \
-H "Content-Type: application/json" \
-d '{ "paused": true }'
Avec une clé maître, project_id déplace le moniteur selon les mêmes règles que pour POST.
DELETE /api/uptime/monitors/:id
curl -X DELETE https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key"
Cette action est irréversible. Pour arrêter les checks tout en conservant l'historique, envoyez { "paused": true } avec PATCH.
Erreurs et limites de l'API d'uptime
Les erreurs sont renvoyées sous la forme { "error": "..." } avec l'un de ces statuts :
| Statut | Condition |
|---|---|
400 | Le corps de la requête enfreint une règle. Le champ error en précise la cause (voir ci-dessous). |
401 | Unauthorized : clé absente, inconnue, révoquée ou expirée, ou clé associée à un projet expiré. |
403 | This token can only read. Use a CoreDash API key to change monitors. : tentative de POST, PATCH ou DELETE avec un token OAuth (mcp_at_). Un PATCH ou un DELETE sur un moniteur d'un projet où vous êtes invité renvoie une 403 avec Only the project's owners can change its monitors. |
404 | Monitor not found : l'ID n'existe pas, ou la clé ne peut pas accéder à ce moniteur. |
405 | Method not allowed. |
error 400 | Solution |
|---|---|
Choose a project for this monitor | Transmettez project_id avec une clé maître. |
project not found | Le project_id ne correspond pas à un projet que vous possédez. Les invités ne peuvent pas y ajouter ni y déplacer des moniteurs. |
This project's subscription has ended | L'ajout ou le déplacement d'un moniteur nécessite un projet avec abonnement actif ou période d'essai en cours. |
A project can have up to 25 monitors | Supprimez d'abord un moniteur, ou utilisez un autre projet. |
A monitor must belong to a project | Omettez project_id dans le PATCH, ou indiquez un projet que vous possédez. |
url can't contain a username or password | Pour l'authentification basique, transmettez un en-tête Authorization dans headers. |
origin_ip is not an IP address, origin_ip must be a public IP address | Utilisez l'adresse publique du serveur lui-même. |
url must be a full http or https URL, e.g. https://www.example.com/, url must start with http:// or https://, headers must be a list of {name, value}, at most 5 headers, "…" isn't a valid header name (letters, numbers and dashes only), expect_status must be an HTTP status code | Corrigez le champ indiqué par le message. Les règles associées figurent dans le tableau des champs sous POST. |
Limites : 25 moniteurs par projet, 5 en-têtes supplémentaires par moniteur, 2100 checks par GET sur un moniteur, et 30 jours d'historique des checks.
Outils MCP d'uptime
Le serveur MCP CoreDash à l'adresse https://app.coredash.app/api/mcp intègre deux outils d'uptime aux côtés des outils RUM, plus list_projects pour les projets accessibles avec votre clé. Ces trois outils fonctionnent uniquement en lecture. Pour ajouter, modifier ou supprimer un moniteur, utilisez l'application ou les endpoints REST ci-dessus avec une clé API CoreDash. Ces outils n'exigent aucun project_id : une clé de projet lit son propre projet, tandis qu'une clé maître ou une connexion OAuth comme Claude lit tous les projets que vous possédez ou auxquels vous êtes invité.
| Outil | Demande à votre agent | Réponse |
|---|---|---|
list_projects | « Quels sites peux-tu voir ? » | { "projects": [...] } avec project_id, name, url et role (owner ou guest). |
list_uptime_monitors | « Est-ce que tout est opérationnel ? » | { "monitors": [...] }, avec l'IP d'origine et les valeurs d'en-tête masquées. |
get_uptime_monitor | « Le checkout a-t-il été indisponible cette semaine, et depuis quand ? » | { "monitor", "summary", "checks" }. Accepte monitor_id et limit (100 par défaut, au maximum 1000) ; summary fournit rounds, down_rounds et uptime_pct sur l'ensemble de ces checks. |
curl -X POST https://app.coredash.app/api/mcp \
-H "Authorization: Bearer cdk_your_key" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_uptime_monitor",
"arguments": { "monitor_id": "6ad68c7a844fad80b752fd16", "limit": 48 }
}
}'
La réponse est l'enveloppe JSON-RPC de l'API CoreDash, avec le résultat sous forme de chaîne JSON dans result.content[0].text. Un moniteur inconnu renvoie { "error": "Monitor not found" } à cet emplacement, et result.isError vaut true.
En savoir plus sur l'uptime et l'API CoreDash
- Monitoring d'uptime : ce que CoreDash vérifie et ce qui s'affiche dans l'application.
- API CoreDash : clés de projet, format JSON-RPC et outils RUM.
- API Agency : clés maîtres et projets via REST.
- Bot CoreDash : user agent, en-tête
X-CoreDash-Botet adresses IP. - Autoriser CoreDash dans votre pare-feu : pour un moniteur qui indique Bloqué.