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.
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/monitorslistet 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.
| Key | Beginnt mit | Sieht | Neuer Monitor landet in |
|---|---|---|---|
| Projekt-Key | cdk_ | Die Monitore des eigenen Projekts | Immer im eigenen Projekt |
| Master-Key | cdk_master_ | Die Monitore aller Projekte, die du besitzt oder zu denen du eingeladen wurdest | Im 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 Pfad | Was er tut | Liefert |
|---|---|---|
GET /api/uptime/monitors | Listet alle Monitore auf, die der Key sehen kann, sortiert nach Name. | 200, { "monitors": [...] }, jeweils mit summary |
POST /api/uptime/monitors | Fügt einen Monitor hinzu. Der erste Check läuft in der nächsten Runde, um :00 oder :30. | 201, { "monitor": {...} } |
GET /api/uptime/monitors/:id | Ein 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/:id | Lö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
| Feld | Bedeutung |
|---|---|
id | Die ID des Monitors, für das :id in den Pfaden. |
name, url | Der Name in der App und die URL, die geprüft wird. |
project_id | Das CoreDash-Projekt, zu dem der Monitor gehört. |
paused | true, solange der Monitor nicht geprüft wird. |
expect_status | Der HTTP-Status, der als up zählt. Standard: 200. |
origin_check | true, wenn eine Origin-IP gesetzt ist, sodass jede Runde auch den Server selbst prüft. |
origin_ip | Die Server-IP. Nur in Antworten, die vertrauliche Daten enthalten. |
headers | Die zusätzlichen Request-Header, [{ "name", "value" }]. |
state | pending, up, failing, down, warn, blocked oder paused. Siehe die Statustabelle unten. |
last_check_at, last_up_at | Die letzte Runde und die letzte Runde, die up zurückkam. |
down_since | Wenn down: Zeitpunkt der ersten fehlgeschlagenen Runde. Sonst null. |
last_down | Der letzte beendete Ausfall, { "from", "to" }, oder null. |
check_requested_at | Wird beim Hinzufügen des Monitors gesetzt. Die nächste Runde setzt es zurück. |
last | Der 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_expires | Wann das HTTPS-Zertifikat abläuft, das deine Besucher erhalten. |
created_at | Wann 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.
| Feld | Bedeutung |
|---|---|
at, server | Wann 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. |
mode | edge oder origin. |
outcome | up, down, blocked oder warn. |
status | Der HTTP-Status der letzten Antwort nach Redirects. null, wenn keine Antwort kam. |
ttfb_ms, total_ms, connect_ms | Time to First Byte und Gesamtdauer, beide inklusive Redirects, sowie die Verbindungsdauer beim ersten Request. |
redirects, final_url | Die Anzahl der gefolgten Redirects und die URL, die als Letztes geantwortet hat. |
error, error_text | Warum der Check fehlschlug – als Wert aus der Tabelle unten und als Text. |
cloudflare, cache_status | Ob die Antwort über Cloudflare kam, und der Cache-Header des CDN (cf-cache-status oder x-cache). |
Wie ein Check sein Ergebnis ermittelt
| Outcome | Wann |
|---|---|
up | Der Status entspricht expect_status – außer bei 403, 429 oder 500 und höher: Diese zählen vorrangig als blocked oder down. |
down | Ein 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. |
blocked | Ein 403, ein 429 oder eine Cloudflare-Challenge: Eine Firewall hat den Checker blockiert. Zählt nie als Downtime. Lass CoreDash durch deine Firewall. |
warn | Jeder 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
state | In der App | Bedeutung |
|---|---|---|
pending | Waiting for first check | Hinzugefügt; die erste Runde lief noch nicht. |
up | Up | Die letzte Runde lieferte den erwarteten Status. |
failing | Failing | Eine Runde schlug fehl. Noch eine, und er ist down. |
down | Down | Zwei fehlgeschlagene Runden in Folge – beide Server sahen den Ausfall. |
warn | Unexpected status | Die letzte Runde lieferte warn zurück. |
blocked | Blocked | Eine Firewall hat den Checker blockiert. |
paused | Paused | Wird 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
}'
| Feld | Regeln |
|---|---|
url | Pflichtfeld bei POST. Eine vollständige HTTP- oder HTTPS-URL, ohne Benutzername oder Passwort. |
name | Bis 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_id | Erforderlich 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_ip | Eine öffentliche IPv4- oder IPv6-Adresse deines Servers. Aktiviert den Origin-Check: direkt an diese IP, vorbei an DNS und CDN. "" oder null entfernt ihn. |
headers | Bis 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_status | Der 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. |
paused | true 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:
| Status | Wann |
|---|---|
400 | Der Body verletzt eine Regel. Der error nennt die Ursache, siehe unten. |
401 | Unauthorized: kein Key, ein unbekannter, widerrufener oder abgelaufener Key oder ein Key, der zu einem abgelaufenen Projekt gehört. |
403 | This 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. |
404 | Monitor not found: Die ID existiert nicht oder der Key kann diesen Monitor nicht sehen. |
405 | Method not allowed. |
400 error | Lösung |
|---|---|
Choose a project for this monitor | Sende project_id mit einem Master-Key. |
project not found | Das 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 ended | Um einen Monitor anzulegen oder zu verschieben, brauchst du ein bezahltes Projekt oder einen aktiven Testzeitraum. |
A project can have up to 25 monitors | Lösche zuerst einen oder nutze ein anderes Projekt. |
A monitor must belong to a project | Lass project_id im PATCH weg oder sende ein Projekt, das dir gehört. |
url can't contain a username or password | Für Basic Auth: Sende einen Authorization-Header in headers. |
origin_ip is not an IP address, origin_ip must be a public IP address | Verwende 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 code | Korrigiere 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.
| Tool | Frage deinen Agenten | Liefert |
|---|---|---|
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
- Uptime-Monitoring: Was CoreDash prüft und was du in der App siehst.
- CoreDash-API: Projekt-Keys, das JSON-RPC-Format und die RUM-Tools.
- Agency-API: Master-Keys und Projekte über REST.
- CoreDash-Bot: Der User-Agent, der Header
X-CoreDash-Botund die Adressen. - Lass CoreDash durch deine Firewall: Für einen Monitor, der „Blocked“ anzeigt.