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.

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

Trusted by market leaders · Client results

ebayvpnsnvnestlemarktplaatsworkivaerasmusmcdpg mediaharvardadevintafotocasaaleteiamy work featured on web.devwhowhatwearhappyhorizonkpncompareperionmonarchloopearplugsnina caresaturn

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/monitors toont 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.

KeyBegint metZietEen nieuwe monitor komt in
Project-keycdk_De monitors van het eigen projectAltijd het eigen project
Master-keycdk_master_De monitors van elk project waarvan je eigenaar bent of waarvoor je bent uitgenodigdHet 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 padWat het doetGeeft terug
GET /api/uptime/monitorsToont alle monitors die de key kan zien, gesorteerd op naam.200, { "monitors": [...] }, elk met een summary
POST /api/uptime/monitorsVoegt een monitor toe. De eerste check draait in de volgende ronde, om :00 of :30.201, { "monitor": {...} }
GET /api/uptime/monitors/:idEé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/:idPast de meegestuurde velden aan en laat de rest staan.200, { "monitor": {...} }
DELETE /api/uptime/monitors/:idVerwijdert 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

VeldBetekenis
idHet id van de monitor, voor de :id in de paden.
name, urlDe naam in de app en de URL die gecheckt wordt.
project_idHet CoreDash-project waar de monitor bij hoort.
pausedtrue zolang de monitor niet gecheckt wordt.
expect_statusDe HTTP-status die telt als up. Standaard 200.
origin_checktrue als er een origin-IP is ingesteld, waardoor elke ronde ook de server zelf gecheckt wordt.
origin_ipHet IP-adres van de server. Alleen in responses met geheime gegevens.
headersDe extra request-headers, [{ "name", "value" }].
statepending, up, failing, down, warn, blocked of paused. Zie de tabel met states hieronder.
last_check_at, last_up_atDe laatste ronde, en de laatste ronde die als up terugkwam.
down_sinceTijdens downtime: het tijdstip van de eerste mislukte ronde. Anders null.
last_downDe laatste afgeronde storing, { "from", "to" }, of null.
check_requested_atWordt ingesteld bij het toevoegen van de monitor. De volgende ronde wist dit veld.
lastDe 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_expiresWanneer het HTTPS-certificaat voor je bezoekers verloopt.
created_atWanneer 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.

VeldBetekenis
at, serverWanneer de server de ronde rapporteerde, en welke server deze uitvoerde: scan1 of scan2. De checks van één ronde delen dezelfde at.
modeedge of origin.
outcomeup, down, blocked of warn.
statusDe HTTP-status van het laatste antwoord, na redirects. null als er geen antwoord kwam.
ttfb_ms, total_ms, connect_msTime to First Byte en totale tijd, beide inclusief redirects, en de verbindingstijd bij het eerste request.
redirects, final_urlHet aantal gevolgde redirects en de URL die als laatste antwoordde.
error, error_textWaarom de check mislukte, als waarde uit de onderstaande tabel en als tekst.
cloudflare, cache_statusOf 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

UitkomstWanneer
upDe status is gelijk aan expect_status, tenzij die status een 403, 429 of 500 of hoger is: die tellen eerst als blocked of down.
downEen 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.
blockedEen 403, 429 of een Cloudflare-challenge: een firewall heeft de checker tegengehouden. Dit telt nooit als downtime. Laat CoreDash door je firewall.
warnElke 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

stateIn de appBetekenis
pendingWaiting for first checkToegevoegd; de eerste ronde heeft nog niet gedraaid.
upUpDe laatste ronde had de verwachte status.
failingFailingEén ronde mislukt. Nog één en hij staat op down.
downDownTwee mislukte rondes achter elkaar, dus beide servers zagen hem falen.
warnUnexpected statusDe laatste ronde kwam terug als warn.
blockedBlockedEen firewall heeft de checker tegengehouden.
pausedPausedWordt 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
  }'
VeldRegels
urlVerplicht bij POST. Een volledige http- of https-URL, zonder gebruikersnaam of wachtwoord.
nameMaximaal 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_idVerplicht 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_ipEen 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.
headersMaximaal 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_statusDe status die telt als up, 100 tot 599. Standaard 200. Een 403, 429 of een status van 500 of hoger telt nooit als up.
pausedtrue 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:

StatusWanneer
400De body overtreedt een regel. De error geeft aan welke, zie hieronder.
401Unauthorized: geen key, een onbekende, ingetrokken of verlopen key, of een key gekoppeld aan een verlopen project.
403This 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.
404Monitor not found: het id bestaat niet, of de key kan deze monitor niet zien.
405Method not allowed.
400 errorFix
Choose a project for this monitorStuur project_id mee bij een master-key.
project not foundHet project_id is geen project waarvan je eigenaar bent. Gasten kunnen hier geen monitors aan toevoegen of naartoe verplaatsen.
This project's subscription has endedVoor het toevoegen of verplaatsen van een monitor heb je een betaald project of een actieve proefperiode nodig.
A project can have up to 25 monitorsVerwijder er eerst een, of gebruik een ander project.
A monitor must belong to a projectLaat project_id weg uit de PATCH, of geef een project op waarvan je eigenaar bent.
url can't contain a username or passwordStuur voor basic auth een Authorization-header mee in headers.
origin_ip is not an IP address, origin_ip must be a public IP addressGebruik 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 codePas 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.

ToolVraag je agentGeeft 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

CoreDash Uptime API en MCP-tools: monitors en checks Core Web Vitals CoreDash Uptime API en MCP-tools: monitors en checks