CoreDash-Uptime-API und MCP-Tools: Monitore und Checks

Uptime-Monitore mit deinem CoreDash-API-Key auflisten, hinzufügen, ändern und pausieren sowie ihre Checks über REST oder MCP auslesen.

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

Trusted by market leaders · Client results

erasmusmcsaturnmonarchaleteiasnvperionadevintaworkivamarktplaatsmy work featured on web.devcomparevpndpg mediafotocasaharvardebayloopearplugskpnnina carehappyhorizonnestlewhowhatwear

Uptime-Monitore über die CoreDash-API

Lies und ändere die Uptime-Monitore deiner CoreDash-Projekte über REST – mit dem API-Key, den du schon für deine RUM-Daten nutzt. Ein KI-Agent liest sie über MCP.

Schnellstart

  • Basis-URL https://app.coredash.app/api/uptime/monitors, JSON rein und JSON raus.
  • Header Authorization: Bearer cdk_your_key, mit einem Projekt-Key oder einem Master-Key.
  • Erster Aufruf: GET /api/uptime/monitors listet deine Monitore mit Status und der Uptime der letzten 7 Tage auf.
curl https://app.coredash.app/api/uptime/monitors \
  -H "Authorization: Bearer cdk_your_key"

API-Keys für Uptime-Monitore

Die Uptime-Endpunkte akzeptieren die Keys der CoreDash-API und der Agency-API.

KeyBeginnt mitSiehtNeuer Monitor landet in
Projekt-Keycdk_Die Monitore des eigenen ProjektsImmer im eigenen Projekt
Master-Keycdk_master_Die Monitore aller Projekte, die du besitzt oder zu denen du eingeladen wurdestIm in project_id angegebenen Projekt, das dir gehört

Erstelle einen Projekt-Key auf der Seite „Connect Your AI“ in der Sidebar deines Projekts: Gib ihm einen Namen und klicke auf „Generate API key“. Dieselben Keys findest du in deinen Projekteinstellungen unter „API Keys (MCP)“. Nur Owner eines Projekts können sie anlegen. Einen Master-Key gibt es auf der Seite „Agency API“ in der Sidebar bei Agency-Accounts. Ist ein Projekt abgelaufen, liefert sein Projekt-Key bei jedem Aufruf einen 401.

Als Gast in einem Projekt kannst du dessen Monitore lesen. Hinzufügen, Ändern, Verschieben und Löschen geht nur bei Projekten, die dir gehören.

Das OAuth-Token einer KI-Verbindung wie Claude (mcp_at_) liest nur. POST, PATCH und DELETE liefern damit einen 403.

Uptime-Endpunkte

Methode und PfadWas er tutLiefert
GET /api/uptime/monitorsListet alle Monitore auf, die der Key sehen kann, sortiert nach Name.200, { "monitors": [...] }, jeweils mit summary
POST /api/uptime/monitorsFügt einen Monitor hinzu. Der erste Check läuft in der nächsten Runde, um :00 oder :30.201, { "monitor": {...} }
GET /api/uptime/monitors/:idEin Monitor mit seinen Checks, neueste zuerst. ?limit= setzt die Anzahl der Checks: Standard 300, maximal 2100.200, { "monitor", "summary", "checks", "rum" }
PATCH /api/uptime/monitors/:idÄndert die übergebenen Felder und lässt den Rest unberührt.200, { "monitor": {...} }
DELETE /api/uptime/monitors/:idLöscht den Monitor und alle zugehörigen Checks.200, { "deleted": true }

Die Origin-IP und die Header-Werte sind geheim. POST, PATCH und GET /api/uptime/monitors/:id geben sie zurück. Die Liste und die MCP-Tools lassen origin_ip weg und zeigen jeden Header-Wert als ••••.

Das Monitor-Objekt

FeldBedeutung
idDie ID des Monitors, für das :id in den Pfaden.
name, urlDer Name in der App und die URL, die geprüft wird.
project_idDas CoreDash-Projekt, zu dem der Monitor gehört.
pausedtrue, solange der Monitor nicht geprüft wird.
expect_statusDer HTTP-Status, der als up zählt. Standard: 200.
origin_checktrue, wenn eine Origin-IP gesetzt ist, sodass jede Runde auch den Server selbst prüft.
origin_ipDie Server-IP. Nur in Antworten, die vertrauliche Daten enthalten.
headersDie zusätzlichen Request-Header, [{ "name", "value" }].
statepending, up, failing, down, warn, blocked oder paused. Siehe die Statustabelle unten.
last_check_at, last_up_atDie letzte Runde und die letzte Runde, die up zurückkam.
down_sinceWenn down: Zeitpunkt der ersten fehlgeschlagenen Runde. Sonst null.
last_downDer letzte beendete Ausfall, { "from", "to" }, oder null.
check_requested_atWird beim Hinzufügen des Monitors gesetzt. Die nächste Runde setzt es zurück.
lastDer letzte Check pro Typ: edge und origin, jeweils als Check-Objekt. origin_is_cdn ist true, wenn der Origin-Check mit Cloudflare-Headern geantwortet hat – die eingegebene IP ist also nicht dein Server.
cert_expiresWann das HTTPS-Zertifikat abläuft, das deine Besucher erhalten.
created_atWann der Monitor angelegt wurde.

Die Felder summary und rum

Sowohl die Liste als auch der einzelne Monitor enthalten ein summary: rounds_7d und down_rounds_7d zählen die Runden der letzten 7 Tage, uptime_7d ist der Prozentsatz dieser Runden ohne Down-Check und recent enthält die letzten 48 Runden (älteste zuerst), jeweils mit dem schlechtesten Ergebnis der Runde. Ein Monitor ohne Checks in den letzten 7 Tagen hat summary: null.

Der einzelne Monitor enthält außerdem rum: die TTFB bei p75, die deine echten Besucher in den letzten 7 Tagen hatten, aus den RUM-Daten des Projekts – zum Vergleich mit der ttfb_ms des Checkers. Hat das Projekt keine RUM-Daten, ist das Feld null.

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" }
}

In der echten Antwort enthält recent 48 Runden; dieses Beispiel zeigt die letzten zwei.

Das Check-Objekt und seine Ergebnisse

Alle 30 Minuten prüft eine Runde jeden Monitor, abwechselnd von zwei Servern: scan1 um :00, scan2 um :30. Eine Runde prüft die URL immer so, wie Besucher sie erreichen: über DNS und dein CDN (edge). Mit einer Origin-IP prüft sie deinen Server zusätzlich direkt (origin). Die API bietet keinen Aufruf, um einen Monitor zwischen den Runden zu prüfen. Checks werden 30 Tage gespeichert.

Jeder Check sendet den User-Agent CoreDash/1.0 (uptime; +https://www.coredash.app/bot). Liegt die URL des Monitors auf der Website deines Projekts (auf dem Host mit oder ohne www oder einer Subdomain), sendet der Check auch den Header X-CoreDash-Bot mit dem geheimen Wert deines Projekts aus dem Tab „CoreDash bot token“ in deinen Projekteinstellungen. Ein Monitor auf jeder anderen Website bekommt kein Token. Bei einem Redirect folgt das Token der Regel für deine gesetzten headers: Es wird nur mitgeschickt, solange der Redirect auf dem Host des Monitors bleibt. Ein eigener Header namens X-CoreDash-Bot wird verworfen. Mehr zu beidem erfährst du auf der Seite CoreDash-Bot.

FeldBedeutung
at, serverWann der Server die Runde gemeldet hat und welcher Server sie ausgeführt hat: scan1 oder scan2. Die Checks einer Runde teilen sich denselben Wert für at.
modeedge oder origin.
outcomeup, down, blocked oder warn.
statusDer HTTP-Status der letzten Antwort nach Redirects. null, wenn keine Antwort kam.
ttfb_ms, total_ms, connect_msTime to First Byte und Gesamtdauer, beide inklusive Redirects, sowie die Verbindungsdauer beim ersten Request.
redirects, final_urlDie Anzahl der gefolgten Redirects und die URL, die als Letztes geantwortet hat.
error, error_textWarum der Check fehlschlug – als Wert aus der Tabelle unten und als Text.
cloudflare, cache_statusOb die Antwort über Cloudflare kam, und der Cache-Header des CDN (cf-cache-status oder x-cache).

Wie ein Check sein Ergebnis ermittelt

OutcomeWann
upDer Status entspricht expect_status – außer bei 403, 429 oder 500 und höher: Diese zählen vorrangig als blocked oder down.
downEin Status von 500 oder höher oder ein error: dns, connect, connect_timeout (keine Verbindung innerhalb von 10 Sekunden), timeout (keine vollständige Antwort innerhalb von 30 Sekunden), tls, redirects (mehr als 5) oder network.
blockedEin 403, ein 429 oder eine Cloudflare-Challenge: Eine Firewall hat den Checker blockiert. Zählt nie als Downtime. Lass CoreDash durch deine Firewall.
warnJeder andere Status, etwa ein 404 im Checkout nach einem Release. Ebenso invalid_ip und invalid_url: Die URL oder ein Redirect führt zu einer privaten oder reservierten Adresse, oder ein Redirect zeigt auf etwas, das keine URL ist. Solche Adressen ruft der Checker nicht ab.

Das schlechteste Ergebnis der Checks einer Runde bestimmt den Status des Monitors, von schlecht nach gut: down, blocked, warn, up.

Monitor-Status

stateIn der AppBedeutung
pendingWaiting for first checkHinzugefügt; die erste Runde lief noch nicht.
upUpDie letzte Runde lieferte den erwarteten Status.
failingFailingEine Runde schlug fehl. Noch eine, und er ist down.
downDownZwei fehlgeschlagene Runden in Folge – beide Server sahen den Ausfall.
warnUnexpected statusDie letzte Runde lieferte warn zurück.
blockedBlockedEine Firewall hat den Checker blockiert.
pausedPausedWird nicht geprüft, bis du paused auf false setzt.

Ein Monitor in einem Projekt mit abgelaufenem Abo behält seine Einstellungen und seinen letzten Status. Er wird erst wieder geprüft, sobald das Projekt wieder bezahlt ist.

Monitor anlegen, ändern und löschen

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
  }'
FeldRegeln
urlPflichtfeld bei POST. Eine vollständige HTTP- oder HTTPS-URL, ohne Benutzername oder Passwort.
nameBis zu 80 Zeichen; längere Namen werden abgeschnitten. Leer bei POST: der Host der URL. Leer bei PATCH: der alte Name bleibt erhalten – oder der neue Host, falls derselbe PATCH eine neue url mitsendet.
project_idErforderlich bei einem Master-Key: ein Projekt, das dir gehört, mit bezahltem Abo oder aktivem Testzeitraum. Ein Projekt-Key ignoriert das Feld und nutzt das eigene Projekt.
origin_ipEine öffentliche IPv4- oder IPv6-Adresse deines Servers. Aktiviert den Origin-Check: direkt an diese IP, vorbei an DNS und CDN. "" oder null entfernt ihn.
headersBis zu 5 zusätzliche Request-Header, [{ "name", "value" }]. Namen: Buchstaben, Zahlen und Bindestriche, bis zu 64 Zeichen. Werte: bis zu 256 Zeichen, längere Werte werden abgeschnitten. Bei einem Redirect werden sie nur mitgesendet, solange er auf dem Host des Monitors bleibt (mit oder ohne www). Ein Redirect auf einen anderen Host, einschließlich Subdomains, erhält keinen davon.
expect_statusDer Status, der als up zählt (100 bis 599). Standard: 200. Ein Status von 403, 429 oder 500 und höher zählt niemals als up.
pausedtrue stoppt die Checks, false startet sie wieder.

Die Antwort ist 201 mit dem neuen Monitor inklusive Origin-IP und Header-Werten:

{
  "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

Sende nur die Felder, die du änderst. headers ersetzt die gesamte Liste – schicke also jeden Header mit, den du behalten willst. So pausierst du einen Monitor:

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 }'

Mit einem Master-Key verschiebt project_id den Monitor nach denselben Regeln wie bei POST.

DELETE /api/uptime/monitors/:id

curl -X DELETE https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
  -H "Authorization: Bearer cdk_your_key"

Es gibt kein Undo. Um die Checks zu stoppen und den Verlauf zu behalten, sende { "paused": true } per PATCH.

Uptime-API: Fehler und Limits

Fehler kommen als { "error": "..." } mit einem dieser Status zurück:

StatusWann
400Der Body verletzt eine Regel. Der error nennt die Ursache, siehe unten.
401Unauthorized: kein Key, ein unbekannter, widerrufener oder abgelaufener Key oder ein Key, der zu einem abgelaufenen Projekt gehört.
403This token can only read. Use a CoreDash API key to change monitors.: Ein POST, PATCH oder DELETE mit einem OAuth-Token (mcp_at_). Ein PATCH oder DELETE auf einen Monitor in einem Projekt, bei dem du Gast bist, liefert 403 mit Only the project's owners can change its monitors.
404Monitor not found: Die ID existiert nicht oder der Key kann diesen Monitor nicht sehen.
405Method not allowed.
400 errorLösung
Choose a project for this monitorSende project_id mit einem Master-Key.
project not foundDas Projekt in project_id gehört dir nicht. Gäste können dort keine Monitore hinzufügen oder dorthin verschieben.
This project's subscription has endedUm einen Monitor anzulegen oder zu verschieben, brauchst du ein bezahltes Projekt oder einen aktiven Testzeitraum.
A project can have up to 25 monitorsLösche zuerst einen oder nutze ein anderes Projekt.
A monitor must belong to a projectLass project_id im PATCH weg oder sende ein Projekt, das dir gehört.
url can't contain a username or passwordFür Basic Auth: Sende einen Authorization-Header in headers.
origin_ip is not an IP address, origin_ip must be a public IP addressVerwende die öffentliche Adresse des Servers selbst.
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 codeKorrigiere das in der Meldung genannte Feld. Die Regeln dazu stehen in der Feldtabelle unter POST.

Limits: 25 Monitore pro Projekt, 5 zusätzliche Header pro Monitor, 2100 Checks pro GET eines Monitors und 30 Tage Check-Verlauf.

Uptime-MCP-Tools

Der CoreDash-MCP-Server unter https://app.coredash.app/api/mcp bietet neben den RUM-Tools zwei Uptime-Tools sowie list_projects für alle Projekte, die dein Key erreicht. Alle drei lesen nur. Um Monitore anzulegen, zu ändern oder zu löschen, nutze die App oder die obigen REST-Endpunkte mit einem CoreDash-API-Key. Die Tools brauchen keine project_id: Ein Projekt-Key liest das eigene Projekt; ein Master-Key oder eine OAuth-Verbindung wie Claude liest jedes Projekt, das du besitzt oder zu dem du eingeladen wurdest.

ToolFrage deinen AgentenLiefert
list_projects„Welche Sites kannst du sehen?“{ "projects": [...] } mit project_id, name, url und role (owner oder guest).
list_uptime_monitors„Ist alles up?“{ "monitors": [...] }, mit maskierter Origin-IP und maskierten Header-Werten.
get_uptime_monitor„War der Checkout diese Woche down, und seit wann?“{ "monitor", "summary", "checks" }. Akzeptiert monitor_id und limit (Standard 100, maximal 1000); summary liefert rounds, down_rounds und uptime_pct über diese 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 }
    }
  }'

Die Antwort ist der JSON-RPC-Wrapper der CoreDash-API, mit dem Ergebnis als JSON-String in result.content[0].text. Ein unbekannter Monitor liefert dort { "error": "Monitor not found" }, und result.isError ist true.

Mehr zu Uptime und der CoreDash-API

CoreDash-Uptime-API und MCP-Tools: Monitore und Checks Core Web Vitals CoreDash-Uptime-API und MCP-Tools: Monitore und Checks