API de uptime e ferramentas MCP do CoreDash: monitores e checks
Liste, adicione, altere e pause monitores de uptime com a chave da CoreDash API, e leia os respetivos checks via REST ou MCP.
Monitores de uptime via CoreDash API
Consulte e altere os monitores de uptime dos seus projetos CoreDash via REST, com a chave de API que já usa para os dados de RUM. Um agente de IA lê-os via MCP.
Início rápido
- URL base
https://app.coredash.app/api/uptime/monitors, JSON na entrada e na saída. - Header
Authorization: Bearer cdk_your_key, com uma chave de projeto ou uma chave master. - Primeira chamada:
GET /api/uptime/monitorslista os monitores com o respetivo estado e o uptime dos últimos 7 dias.
curl https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_your_key"
Chaves de API para monitores de uptime
Os endpoints de uptime aceitam as chaves da CoreDash API e da Agency API.
| Chave | Começa por | Vê | Um novo monitor vai para |
|---|---|---|---|
| Chave de projeto | cdk_ | Os monitores do próprio projeto | Sempre o próprio projeto |
| Chave master | cdk_master_ | Os monitores de todos os projetos que detém ou para os quais foi convidado | O projeto indicado em project_id, que seja seu |
Crie uma chave de projeto na página Connect Your AI, na barra lateral do projeto: dê-lhe um nome e clique em Generate API key. As mesmas chaves estão nas definições do projeto em API Keys (MCP). Apenas os proprietários do projeto as podem criar. A chave master é obtida na página Agency API da barra lateral, em contas de agência. Quando um projeto expirar, a respetiva chave de projeto recebe 401 em todas as chamadas.
Um convidado num projeto lê os respetivos monitores. Adicionar, alterar, mover e eliminar exige um projeto que seja seu.
O token OAuth de uma ligação de IA como o Claude (mcp_at_) apenas lê. POST, PATCH e DELETE com este token recebem 403.
Endpoints de uptime
| Método e path | O que faz | Devolve |
|---|---|---|
GET /api/uptime/monitors | Lista todos os monitores visíveis para a chave, ordenados por nome. | 200, { "monitors": [...] }, cada um com um summary |
POST /api/uptime/monitors | Adiciona um monitor. O primeiro check corre na ronda seguinte, às :00 ou :30. | 201, { "monitor": {...} } |
GET /api/uptime/monitors/:id | Um monitor com os respetivos checks, mais recentes primeiro. ?limit= define o número de checks: por omissão 300, no máximo 2100. | 200, { "monitor", "summary", "checks", "rum" } |
PATCH /api/uptime/monitors/:id | Altera os campos enviados e mantém os restantes. | 200, { "monitor": {...} } |
DELETE /api/uptime/monitors/:id | Elimina o monitor e todos os respetivos checks. | 200, { "deleted": true } |
O IP de origem e os valores dos headers são dados confidenciais. São devolvidos por POST, PATCH e GET /api/uptime/monitors/:id. A listagem e as ferramentas MCP omitem o origin_ip e mostram o valor de cada header como ••••.
O objeto monitor
| Campo | Significado |
|---|---|
id | O ID do monitor, para o :id nos paths. |
name, url | O nome na app e o URL verificado. |
project_id | O projeto CoreDash a que o monitor pertence. |
paused | true enquanto o monitor não estiver a ser verificado. |
expect_status | O status HTTP considerado up. Por omissão 200. |
origin_check | true quando está definido um IP de origem, para que cada ronda verifique também o próprio servidor. |
origin_ip | O IP do servidor. Apenas nas respostas que contêm dados confidenciais. |
headers | Os headers de pedido adicionais, [{ "name", "value" }]. |
state | pending, up, failing, down, warn, blocked ou paused. Consulte a tabela de estados abaixo. |
last_check_at, last_up_at | A última ronda e a última ronda com resultado up. |
down_since | Enquanto down: a hora da primeira ronda que falhou. Caso contrário, null. |
last_down | A última indisponibilidade terminada, { "from", "to" }, ou null. |
check_requested_at | Definido ao adicionar o monitor. A ronda seguinte limpa-o. |
last | O último check por tipo: edge e origin, sendo cada um um objeto de check. origin_is_cdn é true quando o check de origem respondeu com headers da Cloudflare, o que indica que o IP introduzido não é o do seu servidor. |
cert_expires | Quando expira o certificado HTTPS entregue aos visitantes. |
created_at | Quando o monitor foi adicionado. |
Os campos summary e rum
Tanto a listagem como o monitor individual incluem um summary: rounds_7d e down_rounds_7d contabilizam as rondas dos últimos 7 dias, uptime_7d é a percentagem dessas rondas sem verificações em estado down e recent guarda as últimas 48 rondas, da mais antiga para a mais recente, cada uma com o pior resultado dessa ronda. Um monitor sem checks nos últimos 7 dias tem summary: null.
O monitor individual inclui também rum: o TTFB a p75 dos visitantes reais nos últimos 7 dias, a partir dos dados de RUM do projeto, para comparar com o ttfb_ms da verificação. Fica a null enquanto o projeto não tiver dados de 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" }
}
Na resposta real, recent contém 48 rondas; este exemplo mostra as duas últimas.
O objeto check e os respetivos resultados
A cada 30 minutos, uma ronda verifica todos os monitores a partir de dois servidores alternados: scan1 às :00, scan2 às :30. Uma ronda verifica sempre o URL tal como os visitantes lhe acedem, via DNS e através da CDN (edge). Com um IP de origem, verifica também o servidor diretamente (origin). A API não disponibiliza nenhuma chamada para verificar um monitor entre rondas. Os checks são guardados durante 30 dias.
Cada check envia o user agent CoreDash/1.0 (uptime; +https://www.coredash.app/bot). Quando o URL do monitor pertence ao site do próprio projeto (o respetivo host, com ou sem www, ou um subdomínio), o check envia também o header X-CoreDash-Bot com o valor secreto do projeto, obtido no separador do token do bot CoreDash nas definições do projeto. Um monitor em qualquer outro site não recebe qualquer token. Num redirect, o token segue a regra definida para os headers: só é mantido enquanto o redirect permanecer no host do monitor. Qualquer header próprio com o nome X-CoreDash-Bot é descartado. A página do bot do CoreDash explica ambos em detalhe.
| Campo | Significado |
|---|---|
at, server | Quando o servidor reportou a ronda e qual o servidor que a executou: scan1 ou scan2. Os checks da mesma ronda partilham o mesmo at. |
mode | edge ou origin. |
outcome | up, down, blocked ou warn. |
status | O status HTTP da última resposta, após redirects. null se não houve resposta. |
ttfb_ms, total_ms, connect_ms | Time to First Byte e tempo total, ambos incluindo redirects, e o tempo de ligação no primeiro pedido. |
redirects, final_url | O número de redirects seguidos e o URL que respondeu em último. |
error, error_text | O motivo da falha do check, como valor da tabela abaixo e em texto. |
cloudflare, cache_status | Se a resposta passou pela Cloudflare e o header de cache da CDN (cf-cache-status ou x-cache). |
Como é determinado o resultado de um check
| Resultado | Quando |
|---|---|
up | O status é igual a expect_status, exceto se esse status for 403, 429 ou igual ou superior a 500: esses contam primeiro como blocked ou down. |
down | Um status igual ou superior a 500, ou um error: dns, connect, connect_timeout (sem ligação ao fim de 10 segundos), timeout (sem resposta completa ao fim de 30 segundos), tls, redirects (mais de 5) ou network. |
blocked | Um status 403, 429 ou um challenge da Cloudflare: uma firewall bloqueou o verificador. Nunca é contabilizado como tempo de inatividade. Autorize o CoreDash na sua firewall. |
warn | Qualquer outro status, como um 404 no checkout após um release. Também invalid_ip e invalid_url: o URL ou um redirect aponta para um endereço privado ou reservado, ou um redirect aponta para algo que não é um URL. O verificador não efetua pedidos para estes destinos. |
O pior resultado dos checks de uma ronda determina o estado do monitor, do pior para o melhor: down, blocked, warn, up.
Estados do monitor
state | Na app | Significado |
|---|---|---|
pending | A aguardar primeira verificação | Adicionado; a primeira ronda ainda não correu. |
up | Operacional | A última ronda obteve o status esperado. |
failing | Em falha | Uma ronda falhou. Mais uma e passa a down. |
down | Indisponível | Duas rondas falhadas consecutivas: ambos os servidores registaram a falha. |
warn | Estado inesperado | A última ronda devolveu warn. |
blocked | Bloqueado | Uma firewall bloqueou o verificador. |
paused | Em pausa | Não é verificado até definir paused como false. |
Um monitor num projeto cuja subscrição tenha terminado mantém as suas definições e o seu último estado. Não volta a ser verificado até o projeto ser pago novamente.
Adicionar, alterar e eliminar um monitor
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
}'
| Campo | Regras |
|---|---|
url | Obrigatório no POST. Um URL http ou https completo, sem nome de utilizador ou palavra-passe. |
name | Até 80 carateres; nomes mais compridos são truncados. Vazio no POST: o host do URL. Vazio no PATCH: mantém o nome anterior ou assume o novo host caso o mesmo PATCH envie um novo url. |
project_id | Obrigatório com uma chave master: um projeto seu, com subscrição ativa ou período de teste a decorrer. Uma chave de projeto ignora este campo e usa o seu próprio projeto. |
origin_ip | Um endereço IPv4 ou IPv6 público do servidor. Adiciona o check de origem: direto a este IP, sem passar por DNS ou CDN. "" ou null remove-o. |
headers | Até 5 headers de pedido adicionais, [{ "name", "value" }]. Nomes: letras, números e hífens, até 64 carateres. Valores: até 256 carateres; valores mais compridos são truncados. Num redirect, só são enviados enquanto o redirect permanecer no host do monitor, com ou sem www. Um redirect para qualquer outro host, incluindo subdomínios, não envia nenhum. |
expect_status | O status que conta como up, entre 100 e 599. Por omissão 200. Um status 403, 429 ou qualquer valor igual ou superior a 500 nunca conta como up. |
paused | true interrompe as verificações, false retoma-as. |
A resposta é 201 com o novo monitor, incluindo o IP de origem e os valores dos headers:
{
"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
Envie apenas os campos a alterar. headers substitui a lista completa, pelo que deve enviar todos os headers que pretende manter. Este pedido coloca um monitor em pausa:
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 }'
Com uma chave master, project_id move o monitor, segundo as mesmas regras do POST.
DELETE /api/uptime/monitors/:id
curl -X DELETE https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key"
Esta operação é irreversível. Para interromper os checks e manter o histórico, envie { "paused": true } com PATCH.
Erros e limites da API de uptime
Os erros são devolvidos como { "error": "..." } com um destes status:
| Status | Quando |
|---|---|
400 | O body viola uma regra. O campo error indica qual; consulte abaixo. |
401 | Unauthorized: chave em falta, desconhecida, revogada ou expirada, ou associada a um projeto expirado. |
403 | This token can only read. Use a CoreDash API key to change monitors.: um POST, PATCH ou DELETE com um token OAuth (mcp_at_). Um PATCH ou DELETE num monitor de um projeto onde é convidado recebe 403 com Only the project's owners can change its monitors. |
404 | Monitor not found: o ID não existe ou a chave não tem acesso a esse monitor. |
405 | Method not allowed. |
400 error | Resolução |
|---|---|
Choose a project for this monitor | Envie project_id com uma chave master. |
project not found | O project_id não é um projeto seu. Convidados não podem adicionar monitores nem movê-los para lá. |
This project's subscription has ended | Adicionar ou mover um monitor exige um projeto com subscrição ativa ou um período de teste a decorrer. |
A project can have up to 25 monitors | Elimine primeiro um monitor ou use outro projeto. |
A monitor must belong to a project | Omita project_id no PATCH ou envie um projeto seu. |
url can't contain a username or password | Para basic auth, envie um header Authorization em headers. |
origin_ip is not an IP address, origin_ip must be a public IP address | Utilize o endereço público do próprio servidor. |
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 | Corrija o campo indicado na mensagem. As respetivas regras estão na tabela de campos em POST. |
Limites: 25 monitores por projeto, 5 headers adicionais por monitor, 2100 checks por GET de um monitor e 30 dias de histórico de checks.
Ferramentas MCP de uptime
O servidor MCP do CoreDash em https://app.coredash.app/api/mcp disponibiliza duas ferramentas de uptime a par das ferramentas de RUM, além de list_projects para os projetos acessíveis pela sua chave. As três são apenas de leitura. Para adicionar, alterar ou eliminar um monitor, use a app ou os endpoints REST acima com uma chave de API CoreDash. As ferramentas não precisam de project_id: uma chave de projeto lê o próprio projeto; uma chave master ou uma ligação OAuth como o Claude lê todos os projetos seus ou para os quais tenha sido convidado.
| Ferramenta | Pergunte ao seu agente | Devolve |
|---|---|---|
list_projects | "Que sites consegues ver?" | { "projects": [...] } com project_id, name, url e role (owner ou guest). |
list_uptime_monitors | "Está tudo operacional?" | { "monitors": [...] }, com o IP de origem e os valores dos headers ocultos. |
get_uptime_monitor | "O checkout esteve em baixo esta semana, e desde quando?" | { "monitor", "summary", "checks" }. Aceita monitor_id e limit (por omissão 100, no máximo 1000); o summary inclui rounds, down_rounds e uptime_pct referentes a esses 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 }
}
}'
A resposta é o wrapper JSON-RPC da CoreDash API, com o resultado como string JSON em result.content[0].text. Um monitor desconhecido devolve { "error": "Monitor not found" } nesse campo, com result.isError a true.
Mais sobre uptime e a CoreDash API
- Monitorização de uptime: o que o CoreDash verifica e o que vê na app.
- CoreDash API: chaves de projeto, o formato JSON-RPC e as ferramentas de RUM.
- Agency API: chaves master e projetos via REST.
- Bot do CoreDash: o user agent, o header
X-CoreDash-Bote os respetivos endereços. - Autorize o CoreDash na sua firewall: para um monitor que indique Bloqueado.