CoreDash Uptime API en MCP-tools: monitors en checks
Bekijk, voeg toe, wijzig en pauzeer uptime-monitors met je CoreDash API-key, en lees hun checks via REST of MCP.
Uptime-monitors via de CoreDash API
Lees en wijzig de uptime-monitors van je CoreDash-projecten via REST, met de API-key die je al gebruikt voor je RUM-data. Een AI-agent leest ze via MCP.
Snelle start
- Base-URL
https://app.coredash.app/api/uptime/monitors, JSON in en JSON uit. - Header
Authorization: Bearer cdk_your_key, met een project-key of een master-key. - Eerste call:
GET /api/uptime/monitorstoont je monitors met hun state en de uptime van de afgelopen 7 dagen.
curl https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_your_key"
API-keys voor uptime-monitors
De uptime-endpoints accepteren de keys van de CoreDash API en de Agency API.
| Key | Begint met | Ziet | Een nieuwe monitor komt in |
|---|---|---|---|
| Project-key | cdk_ | De monitors van het eigen project | Altijd het eigen project |
| Master-key | cdk_master_ | De monitors van elk project waarvan je eigenaar bent of waarvoor je bent uitgenodigd | Het project dat je opgeeft in project_id, waarvan je eigenaar bent |
Maak een project-key aan op de Connect Your AI-pagina in de sidebar van je project: geef hem een naam en klik op Generate API key. Dezelfde keys vind je in je projectinstellingen onder API Keys (MCP). Alleen projecteigenaren kunnen ze aanmaken. Een master-key vind je op de Agency API-pagina in de sidebar, bij agency-accounts. Is een project verlopen, dan krijgt de project-key een 401 op elke call.
Een gast op een project kan de monitors inzien. Voor toevoegen, wijzigen, verplaatsen en verwijderen moet je eigenaar van het project zijn.
Het OAuth-token van een AI-koppeling zoals Claude (mcp_at_) kan alleen lezen. Een POST, PATCH of DELETE hiermee krijgt een 403.
Uptime-endpoints
| Methode en pad | Wat het doet | Geeft terug |
|---|---|---|
GET /api/uptime/monitors | Toont alle monitors die de key kan zien, gesorteerd op naam. | 200, { "monitors": [...] }, elk met een summary |
POST /api/uptime/monitors | Voegt een monitor toe. De eerste check draait in de volgende ronde, om :00 of :30. | 201, { "monitor": {...} } |
GET /api/uptime/monitors/:id | Eén monitor met bijbehorende checks, nieuwste eerst. ?limit= bepaalt het aantal checks: standaard 300, maximaal 2100. | 200, { "monitor", "summary", "checks", "rum" } |
PATCH /api/uptime/monitors/:id | Past de meegestuurde velden aan en laat de rest staan. | 200, { "monitor": {...} } |
DELETE /api/uptime/monitors/:id | Verwijdert de monitor en alle bijbehorende checks. | 200, { "deleted": true } |
Het origin-IP en de header-waarden zijn geheim. Ze komen terug bij POST, PATCH en GET /api/uptime/monitors/:id. De lijst en de MCP-tools laten origin_ip weg en tonen elke header-waarde als ••••.
Het monitor-object
| Veld | Betekenis |
|---|---|
id | Het id van de monitor, voor de :id in de paden. |
name, url | De naam in de app en de URL die gecheckt wordt. |
project_id | Het CoreDash-project waar de monitor bij hoort. |
paused | true zolang de monitor niet gecheckt wordt. |
expect_status | De HTTP-status die telt als up. Standaard 200. |
origin_check | true als er een origin-IP is ingesteld, waardoor elke ronde ook de server zelf gecheckt wordt. |
origin_ip | Het IP-adres van de server. Alleen in responses met geheime gegevens. |
headers | De extra request-headers, [{ "name", "value" }]. |
state | pending, up, failing, down, warn, blocked of paused. Zie de tabel met states hieronder. |
last_check_at, last_up_at | De laatste ronde, en de laatste ronde die als up terugkwam. |
down_since | Tijdens downtime: het tijdstip van de eerste mislukte ronde. Anders null. |
last_down | De laatste afgeronde storing, { "from", "to" }, of null. |
check_requested_at | Wordt ingesteld bij het toevoegen van de monitor. De volgende ronde wist dit veld. |
last | De laatste check per type: edge en origin, elk een check-object. origin_is_cdn is true als de origin-check antwoordde met Cloudflare-headers; het ingevoerde IP-adres is dan niet je server. |
cert_expires | Wanneer het HTTPS-certificaat voor je bezoekers verloopt. |
created_at | Wanneer de monitor is toegevoegd. |
De velden summary en rum
Zowel de lijst als de individuele monitor bevat een summary: rounds_7d en down_rounds_7d tellen de rondes van de afgelopen 7 dagen, uptime_7d is het percentage van die rondes zonder down-check, en recent bevat de laatste 48 rondes (oudste eerst), elk met de slechtste uitkomst van die ronde. Heeft een monitor geen checks gehad in de afgelopen 7 dagen, dan is summary: null.
De individuele monitor bevat ook rum: de TTFB op p75 die je echte bezoekers in de afgelopen 7 dagen kregen, uit de RUM-data van het project, om te vergelijken met de ttfb_ms van de checker. Dit veld is null zolang het project geen RUM-data heeft.
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 de echte response bevat recent 48 rondes; dit voorbeeld toont de laatste twee.
Het check-object en de uitkomsten
Elke 30 minuten checkt één ronde alle monitors, afwisselend vanaf twee servers: scan1 om :00, scan2 om :30. Een ronde checkt de URL altijd zoals bezoekers die bereiken: via DNS en je CDN (edge). Met een origin-IP checkt hij ook direct je server (origin). De API heeft geen call om een monitor tussen rondes door te checken. Checks worden 30 dagen bewaard.
Elke check stuurt de user-agent CoreDash/1.0 (uptime; +https://www.coredash.app/bot) mee. Staat de URL van de monitor op de eigen site van je project (de host, met of zonder www, of een subdomein), dan stuurt de check ook de header X-CoreDash-Bot mee met de geheime waarde van je project, uit het tabblad CoreDash bot token in je projectinstellingen. Een monitor op een andere site krijgt geen token mee. Bij een redirect volgt het token de regel voor de headers die je instelt: het gaat alleen mee zolang de redirect op de host van de monitor blijft. Een eigen header met de naam X-CoreDash-Bot wordt genegeerd. Op de CoreDash bot-pagina lees je meer over beide.
| Veld | Betekenis |
|---|---|
at, server | Wanneer de server de ronde rapporteerde, en welke server deze uitvoerde: scan1 of scan2. De checks van één ronde delen dezelfde at. |
mode | edge of origin. |
outcome | up, down, blocked of warn. |
status | De HTTP-status van het laatste antwoord, na redirects. null als er geen antwoord kwam. |
ttfb_ms, total_ms, connect_ms | Time to First Byte en totale tijd, beide inclusief redirects, en de verbindingstijd bij het eerste request. |
redirects, final_url | Het aantal gevolgde redirects en de URL die als laatste antwoordde. |
error, error_text | Waarom de check mislukte, als waarde uit de onderstaande tabel en als tekst. |
cloudflare, cache_status | Of het antwoord via Cloudflare binnenkwam, en de cache-header van het CDN (cf-cache-status of x-cache). |
Hoe de uitkomst van een check wordt bepaald
| Uitkomst | Wanneer |
|---|---|
up | De status is gelijk aan expect_status, tenzij die status een 403, 429 of 500 of hoger is: die tellen eerst als blocked of down. |
down | Een status van 500 of hoger, of een error: dns, connect, connect_timeout (geen verbinding binnen 10 seconden), timeout (geen volledig antwoord binnen 30 seconden), tls, redirects (meer dan 5) of network. |
blocked | Een 403, 429 of een Cloudflare-challenge: een firewall heeft de checker tegengehouden. Dit telt nooit als downtime. Laat CoreDash door je firewall. |
warn | Elke andere status, zoals een 404 op een checkout na een release. Ook invalid_ip en invalid_url: de URL of een redirect leidt naar een privaat of gereserveerd adres, of een redirect verwijst naar iets wat geen URL is. Die vraagt de checker niet op. |
De slechtste uitkomst van de checks in een ronde bepaalt de state van de monitor, van slecht naar goed: down, blocked, warn, up.
Monitor-states
state | In de app | Betekenis |
|---|---|---|
pending | Waiting for first check | Toegevoegd; de eerste ronde heeft nog niet gedraaid. |
up | Up | De laatste ronde had de verwachte status. |
failing | Failing | Eén ronde mislukt. Nog één en hij staat op down. |
down | Down | Twee mislukte rondes achter elkaar, dus beide servers zagen hem falen. |
warn | Unexpected status | De laatste ronde kwam terug als warn. |
blocked | Blocked | Een firewall heeft de checker tegengehouden. |
paused | Paused | Wordt niet gecheckt totdat je paused op false zet. |
Een monitor in een project waarvan het abonnement is afgelopen, behoudt zijn instellingen en laatste state. Hij wordt niet gecheckt totdat er weer voor het project is betaald.
Een monitor toevoegen, wijzigen en verwijderen
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
}'
| Veld | Regels |
|---|---|
url | Verplicht bij POST. Een volledige http- of https-URL, zonder gebruikersnaam of wachtwoord. |
name | Maximaal 80 tekens; langere namen worden afgekapt. Leeg bij POST: de host van de URL. Leeg bij PATCH: de oude naam blijft behouden, of de nieuwe host als dezelfde PATCH een nieuwe url meestuurt. |
project_id | Verplicht bij een master-key: een project waarvan je eigenaar bent, met een betaald abonnement of een actieve proefperiode. Een project-key negeert dit en gebruikt het eigen project. |
origin_ip | Een publiek IPv4- of IPv6-adres van je server. Voegt de origin-check toe: rechtstreeks naar dit IP, voorbij DNS en het CDN. "" of null verwijdert dit. |
headers | Maximaal 5 extra request-headers, [{ "name", "value" }]. Namen: letters, cijfers en streepjes, maximaal 64 tekens. Waarden: maximaal 256 tekens, langere waarden worden afgekapt. Bij een redirect gaan ze alleen mee zolang die op de host van de monitor blijft (met of zonder www). Een redirect naar een andere host, inclusief subdomeinen, krijgt geen headers mee. |
expect_status | De status die telt als up, 100 tot 599. Standaard 200. Een 403, 429 of een status van 500 of hoger telt nooit als up. |
paused | true stopt de checks, false start ze weer. |
Het antwoord is 201 met de nieuwe monitor, inclusief origin-IP en header-waarden:
{
"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
Stuur alleen de velden mee die je wijzigt. headers vervangt de hele lijst, dus stuur elke header mee die je wilt behouden. Hiermee pauzeer je een 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 }'
Bij een master-key verplaatst project_id de monitor, volgens dezelfde regels als bij POST.
DELETE /api/uptime/monitors/:id
curl -X DELETE https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key"
Dit kun je niet ongedaan maken. Wil je de checks stoppen maar de historie bewaren, stuur dan { "paused": true } mee via PATCH.
Errors en limieten van de Uptime API
Errors komen terug als { "error": "..." } met een van deze statussen:
| Status | Wanneer |
|---|---|
400 | De body overtreedt een regel. De error geeft aan welke, zie hieronder. |
401 | Unauthorized: geen key, een onbekende, ingetrokken of verlopen key, of een key gekoppeld aan een verlopen project. |
403 | This token can only read. Use a CoreDash API key to change monitors.: een POST, PATCH of DELETE met een OAuth-token (mcp_at_). Een PATCH of DELETE op een monitor in een project waar je gast bent, geeft een 403 met Only the project's owners can change its monitors. |
404 | Monitor not found: het id bestaat niet, of de key kan deze monitor niet zien. |
405 | Method not allowed. |
400 error | Fix |
|---|---|
Choose a project for this monitor | Stuur project_id mee bij een master-key. |
project not found | Het project_id is geen project waarvan je eigenaar bent. Gasten kunnen hier geen monitors aan toevoegen of naartoe verplaatsen. |
This project's subscription has ended | Voor het toevoegen of verplaatsen van een monitor heb je een betaald project of een actieve proefperiode nodig. |
A project can have up to 25 monitors | Verwijder er eerst een, of gebruik een ander project. |
A monitor must belong to a project | Laat project_id weg uit de PATCH, of geef een project op waarvan je eigenaar bent. |
url can't contain a username or password | Stuur voor basic auth een Authorization-header mee in headers. |
origin_ip is not an IP address, origin_ip must be a public IP address | Gebruik het publieke IP-adres van de server zelf. |
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 | Pas het veld aan dat in de melding wordt genoemd. De regels vind je in de tabel onder POST. |
Limieten: 25 monitors per project, 5 extra headers per monitor, 2100 checks per GET van één monitor, en een check-historie van 30 dagen.
Uptime MCP-tools
De CoreDash MCP-server op https://app.coredash.app/api/mcp heeft naast de RUM-tools twee uptime-tools, plus list_projects voor de projecten waar je key bij kan. Alle drie kunnen ze alleen lezen. Wil je een monitor toevoegen, wijzigen of verwijderen, gebruik dan de app of de bovenstaande REST-endpoints met een CoreDash API-key. De tools hebben geen project_id nodig: een project-key leest het eigen project, een master-key of een OAuth-koppeling zoals Claude leest elk project waarvan je eigenaar bent of waarvoor je bent uitgenodigd.
| Tool | Vraag je agent | Geeft terug |
|---|---|---|
list_projects | "Welke sites kun je zien?" | { "projects": [...] } met project_id, name, url en role (owner of guest). |
list_uptime_monitors | "Is alles up?" | { "monitors": [...] }, met gemaskeerd origin-IP en gemaskeerde header-waarden. |
get_uptime_monitor | "Was de checkout deze week down, en sinds wanneer?" | { "monitor", "summary", "checks" }. Accepteert monitor_id en limit (standaard 100, maximaal 1000); summary geeft rounds, down_rounds en uptime_pct over die 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 }
}
}'
Het antwoord is de JSON-RPC-wrapper van de CoreDash API, met het resultaat als JSON-string in result.content[0].text. Een onbekende monitor levert daar { "error": "Monitor not found" } op, en result.isError is true.
Meer over uptime en de CoreDash API
- Uptime-monitoring: wat CoreDash checkt en wat je ziet in de app.
- CoreDash API: project-keys, het JSON-RPC-formaat en de RUM-tools.
- Agency API: master-keys en projecten via REST.
- CoreDash bot: de user-agent, de header
X-CoreDash-Boten de IP-adressen. - Laat CoreDash door je firewall: voor een monitor die op Blocked staat.