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.

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-10-20

Trusted by market leaders · Client results

monarchsaturnaleteiakpnhappyhorizonsnvharvardadevintamy work featured on web.devfotocasaperionnina careebayloopearplugserasmusmcwhowhatwearnestledpg mediamarktplaatsvpncompareworkiva

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/monitors liste 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 parVoitProjet cible d'un nouveau moniteur
Clé de projetcdk_Les moniteurs de son propre projetSon propre projet, toujours
Clé maîtrecdk_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 cheminActionRéponse
GET /api/uptime/monitorsListe tous les moniteurs accessibles avec la clé, triés par nom.200, { "monitors": [...] }, chacun avec un summary
POST /api/uptime/monitorsAjoute un moniteur. Le premier check s'exécute lors du prochain round, à :00 ou :30.201, { "monitor": {...} }
GET /api/uptime/monitors/:idUn 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/:idModifie les champs envoyés et conserve le reste.200, { "monitor": {...} }
DELETE /api/uptime/monitors/:idSupprime 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

ChampDescription
idL'ID du moniteur, pour le :id des chemins.
name, urlLe nom dans l'application et l'URL vérifiée.
project_idLe projet CoreDash auquel appartient le moniteur.
pausedtrue tant que le moniteur n'est pas vérifié.
expect_statusLe code HTTP considéré comme un succès. 200 par défaut.
origin_checktrue quand une IP d'origine est configurée, pour que chaque round vérifie aussi le serveur directement.
origin_ipL'IP du serveur. Présente uniquement dans les réponses contenant des données sensibles.
headersLes en-têtes de requête supplémentaires, [{ "name", "value" }].
statepending, up, failing, down, warn, blocked ou paused. Voir le tableau des états ci-dessous.
last_check_at, last_up_atLe dernier round, et le dernier round qui était up.
down_sinceEn cas d'indisponibilité : l'heure du premier round en échec. Sinon null.
last_downLa dernière panne terminée, { "from", "to" }, ou null.
check_requested_atDéfini lors de l'ajout du moniteur. Le round suivant le réinitialise.
lastLe 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_expiresDate d'expiration du certificat HTTPS présenté aux visiteurs.
created_atDate 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.

ChampDescription
at, serverMoment 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.
modeedge ou origin.
outcomeup, down, blocked ou warn.
statusCode HTTP de la dernière réponse, après les redirections. null si rien n'a répondu.
ttfb_ms, total_ms, connect_msTime 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_urlNombre de redirections suivies et URL ayant répondu en dernier.
error, error_textRaison de l'échec du check, sous forme de valeur issue du tableau ci-dessous et de texte explicatif.
cloudflare, cache_statusIndique 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ésultatCondition
upLe 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.
downUn 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.
blockedUne 403, une 429 ou un challenge Cloudflare : un pare-feu a bloqué la sonde. Jamais comptabilisé comme indisponibilité. Autoriser CoreDash dans votre pare-feu.
warnTout 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

stateDans l'applicationSignification
pendingEn attente du premier checkAjouté ; le premier round n'a pas encore tourné.
upOpérationnelLe dernier round a obtenu le statut attendu.
failingDéfaillantUn round a échoué. Un échec de plus et il passe en down.
downIndisponibleDeux rounds consécutifs ont échoué : les deux serveurs ont constaté l'échec.
warnStatut inattenduLe dernier round a renvoyé warn.
blockedBloquéUn pare-feu a bloqué la sonde.
pausedEn pauseNon 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
  }'
ChampRègles
urlRequis pour un POST. Une URL http ou https complète, sans nom d'utilisateur ni mot de passe.
nameJusqu'à 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_idRequis 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_ipUne 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.
headersJusqu'à 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_statusLe 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.
pausedtrue 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 :

StatutCondition
400Le corps de la requête enfreint une règle. Le champ error en précise la cause (voir ci-dessous).
401Unauthorized : clé absente, inconnue, révoquée ou expirée, ou clé associée à un projet expiré.
403This 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.
404Monitor not found : l'ID n'existe pas, ou la clé ne peut pas accéder à ce moniteur.
405Method not allowed.
error 400Solution
Choose a project for this monitorTransmettez project_id avec une clé maître.
project not foundLe 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 endedL'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 monitorsSupprimez d'abord un moniteur, ou utilisez un autre projet.
A monitor must belong to a projectOmettez project_id dans le PATCH, ou indiquez un projet que vous possédez.
url can't contain a username or passwordPour 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 addressUtilisez 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 codeCorrigez 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é.

OutilDemande à votre agentRé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

API d'uptime et outils MCP CoreDash : moniteurs et checks Core Web Vitals API d'uptime et outils MCP CoreDash : moniteurs et checks