API de uptime y herramientas MCP de CoreDash: monitores y comprobaciones
Lista, añade, modifica y pausa monitores de uptime con la clave de API de CoreDash y consulta sus comprobaciones mediante REST o MCP.
Monitores de uptime con la API de CoreDash
Consulta y modifica los monitores de uptime de tus proyectos en CoreDash mediante REST, con la clave de API que ya usas para los datos de RUM. Un agente de IA los lee mediante MCP.
Inicio rápido
- URL base
https://app.coredash.app/api/uptime/monitors, entrada y salida en JSON. - Cabecera
Authorization: Bearer cdk_your_key, con una clave de proyecto o una clave maestra. - Primera llamada:
GET /api/uptime/monitorslista los monitores con su estado y el uptime de los últimos 7 días.
curl https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_your_key"
Claves de API para monitores de uptime
Los endpoints de uptime admiten las claves de la API de CoreDash y de la Agency API.
| Clave | Empieza por | Ve | Dónde se crea el nuevo monitor |
|---|---|---|---|
| Clave de proyecto | cdk_ | Los monitores de su propio proyecto | En su propio proyecto, siempre |
| Clave maestra | cdk_master_ | Los monitores de todos los proyectos propios o con invitación | En el proyecto indicado en project_id (debe ser propio) |
Crea una clave de proyecto en la página Connect Your AI, en la barra lateral del proyecto: asígnale un nombre y haz clic en Generate API key. Estas mismas claves están en la configuración del proyecto, en API Keys (MCP). Solo los propietarios del proyecto pueden crearlas. La clave maestra se obtiene en la página Agency API de la barra lateral, en cuentas de agencia. Si el proyecto caduca, su clave de proyecto recibe un 401 en cada llamada.
Un invitado en un proyecto solo lee sus monitores. Para añadirlos, modificarlos, moverlos y eliminarlos necesitas un proyecto propio.
El token OAuth de una conexión de IA como Claude (mcp_at_) es de solo lectura. Cualquier POST, PATCH o DELETE con este token recibe un 403.
Endpoints de uptime
| Método y ruta | Qué hace | Devuelve |
|---|---|---|
GET /api/uptime/monitors | Lista todos los monitores visibles para la clave, ordenados por nombre. | 200, { "monitors": [...] }, cada uno con un summary |
POST /api/uptime/monitors | Añade un monitor. La primera comprobación se ejecuta en la siguiente ronda, a las :00 o :30. | 201, { "monitor": {...} } |
GET /api/uptime/monitors/:id | Un monitor con sus comprobaciones, de más reciente a más antigua. ?limit= define el número de comprobaciones: 300 por defecto, máximo 2100. | 200, { "monitor", "summary", "checks", "rum" } |
PATCH /api/uptime/monitors/:id | Modifica los campos que envíes y deja el resto intacto. | 200, { "monitor": {...} } |
DELETE /api/uptime/monitors/:id | Elimina el monitor y todas sus comprobaciones. | 200, { "deleted": true } |
La IP de origen y los valores de las cabeceras son secretos. Se devuelven en POST, PATCH y GET /api/uptime/monitors/:id. El listado y las herramientas MCP omiten origin_ip y muestran el valor de cada cabecera como ••••.
El objeto monitor
| Campo | Significado |
|---|---|
id | El ID del monitor, para el :id de las rutas. |
name, url | El nombre en la app y la URL que se comprueba. |
project_id | El proyecto de CoreDash al que pertenece el monitor. |
paused | true mientras el monitor no se compruebe. |
expect_status | El código de estado HTTP que cuenta como up. 200 por defecto. |
origin_check | true si se define una IP de origen, para que cada ronda también compruebe el servidor directamente. |
origin_ip | La IP del servidor. Solo aparece en las respuestas que contienen secretos. |
headers | Las cabeceras de petición adicionales, [{ "name", "value" }]. |
state | pending, up, failing, down, warn, blocked o paused. Consulta la tabla de estados más abajo. |
last_check_at, last_up_at | La última ronda y la última ronda con resultado up. |
down_since | Si está caído: fecha y hora de la primera ronda fallida. De lo contrario, null. |
last_down | La última caída finalizada, { "from", "to" }, o null. |
check_requested_at | Se asigna al añadir el monitor. La siguiente ronda lo borra. |
last | La última comprobación por tipo: edge y origin, cada una como un objeto check. origin_is_cdn es true si la comprobación de origen respondió con cabeceras de Cloudflare, lo que indica que la IP introducida no es la del servidor. |
cert_expires | Fecha en que caduca el certificado HTTPS que reciben los visitantes. |
created_at | Fecha de creación del monitor. |
Los campos summary y rum
Tanto el listado como el monitor individual incluyen un summary: rounds_7d y down_rounds_7d cuentan las rondas de los últimos 7 días, uptime_7d es el porcentaje de esas rondas sin ninguna comprobación en down, y recent contiene las últimas 48 rondas, de más antigua a más reciente, cada una con el peor resultado de esa ronda. Si un monitor no tiene comprobaciones en los últimos 7 días, devuelve summary: null.
El monitor individual también incluye rum: el TTFB en p75 que obtuvieron los visitantes reales en los últimos 7 días, a partir de los datos de RUM del proyecto, para compararlo con el ttfb_ms del comprobador. Es null mientras el proyecto no tenga datos 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" }
}
En la respuesta real, recent contiene 48 rondas; este ejemplo muestra las dos últimas.
El objeto check y sus resultados
Cada 30 minutos una ronda comprueba todos los monitores, alternando entre dos servidores: scan1 a las :00 y scan2 a las :30. La ronda siempre comprueba la URL tal como acceden los visitantes: mediante DNS y el CDN (edge). Si se define una IP de origen, también comprueba el servidor directamente (origin). La API no ofrece ninguna llamada para comprobar un monitor entre rondas. Las comprobaciones se conservan durante 30 días.
Cada comprobación envía el user agent CoreDash/1.0 (uptime; +https://www.coredash.app/bot). Si la URL del monitor pertenece al propio sitio del proyecto (su host, con o sin www, o un subdominio), la comprobación incluye además la cabecera X-CoreDash-Bot con el valor secreto del proyecto, obtenido en la pestaña CoreDash bot token dentro de la configuración del proyecto. Un monitor en cualquier otro sitio no recibe ningún token. Si hay una redirección, el token sigue la regla de las headers configuradas: solo se conserva mientras la redirección permanezca en el host del monitor. Cualquier cabecera propia llamada X-CoreDash-Bot se descarta. La página del bot de CoreDash incluye más información sobre ambos aspectos.
| Campo | Significado |
|---|---|
at, server | Momento en que el servidor registró la ronda y qué servidor la ejecutó: scan1 o scan2. Las comprobaciones de una misma ronda comparten el mismo valor de at. |
mode | edge u origin. |
outcome | up, down, blocked o warn. |
status | El código de estado HTTP de la última respuesta, tras las redirecciones. null si no hubo respuesta. |
ttfb_ms, total_ms, connect_ms | Time to First Byte y tiempo total, ambos con las redirecciones incluidas, y el tiempo de conexión de la primera petición. |
redirects, final_url | El número de redirecciones seguidas y la última URL que respondió. |
error, error_text | Motivo del fallo de la comprobación: como valor de la tabla inferior y como texto. |
cloudflare, cache_status | Indica si la respuesta pasó por Cloudflare y la cabecera de caché del CDN (cf-cache-status o x-cache). |
Cómo se determina el resultado de una comprobación
| Resultado | Condición |
|---|---|
up | El código de estado coincide con expect_status, salvo si es un 403, un 429 o 500 o superior: en esos casos se consideran antes blocked o down. |
down | Un estado 500 o superior, o un error: dns, connect, connect_timeout (sin conexión tras 10 segundos), timeout (sin respuesta completa tras 30 segundos), tls, redirects (más de 5) o network. |
blocked | Un 403, un 429 o un challenge de Cloudflare: un firewall bloqueó el comprobador. Nunca se cuenta como caída. Permite el paso de CoreDash en tu firewall. |
warn | Cualquier otro estado, como un 404 en el checkout tras un deploy. También invalid_ip e invalid_url: la URL o una redirección apunta a una dirección privada o reservada, o una redirección apunta a algo que no es una URL. El comprobador no realiza esas peticiones. |
El peor resultado entre las comprobaciones de una ronda determina el estado del monitor, de peor a mejor: down, blocked, warn, up.
Estados del monitor
state | En la app | Significado |
|---|---|---|
pending | Esperando primera comprobación | Añadido; la primera ronda aún no se ha ejecutado. |
up | Operativo | La última ronda obtuvo el estado esperado. |
failing | Fallando | Una ronda ha fallado. Otra más lo pasa a down. |
down | Caído | Dos rondas fallidas consecutivas: ambos servidores registraron el fallo. |
warn | Estado inesperado | La última ronda devolvió warn. |
blocked | Bloqueado | Un firewall bloqueó el comprobador. |
paused | Pausado | No se comprueba hasta que se establezca paused en false. |
Un monitor de un proyecto cuya suscripción haya finalizado conserva su configuración y su último estado. No se vuelve a comprobar hasta que el proyecto se pague de nuevo.
Cómo añadir, modificar y eliminar un 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 | Reglas |
|---|---|
url | Obligatorio en POST. Una URL http o https completa, sin usuario ni contraseña. |
name | Hasta 80 caracteres; los nombres más largos se truncan. Vacío en POST: el host de la URL. Vacío en PATCH: mantiene el nombre anterior, o el nuevo host si el mismo PATCH envía una nueva url. |
project_id | Obligatorio con una clave maestra: un proyecto propio, con suscripción de pago o un periodo de prueba activo. Una clave de proyecto lo ignora y usa su propio proyecto. |
origin_ip | Una dirección IPv4 o IPv6 pública del servidor. Activa la comprobación de origen: directa a esta IP, sin pasar por DNS ni CDN. "" o null la elimina. |
headers | Hasta 5 cabeceras de petición adicionales, [{ "name", "value" }]. Nombres: letras, números y guiones, hasta 64 caracteres. Valores: hasta 256 caracteres; los más largos se truncan. En una redirección solo se envían si esta permanece en el host del monitor, con o sin www. Si redirige a cualquier otro host, incluidos subdominios, no se envía ninguna. |
expect_status | El código de estado que cuenta como up, de 100 a 599. 200 por defecto. Un 403, un 429 o cualquier estado a partir de 500 nunca cuenta como up. |
paused | true detiene las comprobaciones; false las reanuda. |
La respuesta es 201 con el nuevo monitor, incluyendo la IP de origen y los valores de las cabeceras:
{
"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
Envía solo los campos que cambies. headers reemplaza la lista completa, así que envía todas las cabeceras que quieras conservar. Así se pausa un 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 }'
Con una clave maestra, project_id mueve el monitor siguiendo las mismas reglas que en POST.
DELETE /api/uptime/monitors/:id
curl -X DELETE https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key"
No se puede deshacer. Para detener las comprobaciones y conservar el historial, envía { "paused": true } con PATCH.
Errores y límites de la API de uptime
Los errores devuelven { "error": "..." } con uno de estos estados:
| Estado | Cuándo |
|---|---|
400 | El cuerpo de la petición no cumple alguna regla. El campo error indica cuál; consulta la tabla inferior. |
401 | Unauthorized: falta la clave, la clave es desconocida, revocada o caducada, o está asociada a un proyecto caducado. |
403 | This token can only read. Use a CoreDash API key to change monitors.: se ejecutó un POST, PATCH o DELETE con un token OAuth (mcp_at_). Un PATCH o DELETE sobre un monitor de un proyecto donde eres invitado recibe un 403 con Only the project's owners can change its monitors. |
404 | Monitor not found: el ID no existe o la clave no tiene acceso a ese monitor. |
405 | Method not allowed. |
error 400 | Solución |
|---|---|
Choose a project for this monitor | Envía project_id con una clave maestra. |
project not found | El project_id no corresponde a un proyecto propio. Los invitados no pueden añadir monitores ni moverlos allí. |
This project's subscription has ended | Para añadir o mover un monitor necesitas un proyecto de pago o con un periodo de prueba activo. |
A project can have up to 25 monitors | Elimina uno primero o usa otro proyecto. |
A monitor must belong to a project | Omite project_id en el PATCH o envía un proyecto propio. |
url can't contain a username or password | Para autenticación básica, envía una cabecera Authorization dentro de headers. |
origin_ip is not an IP address, origin_ip must be a public IP address | Usa la dirección pública del propio 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 | Corrige el campo indicado en el mensaje. Sus reglas están en la tabla de campos bajo POST. |
Límites: 25 monitores por proyecto, 5 cabeceras adicionales por monitor, 2100 comprobaciones por GET de un monitor y 30 días de historial de comprobaciones.
Herramientas MCP de uptime
El servidor MCP de CoreDash en https://app.coredash.app/api/mcp incluye dos herramientas de uptime junto a las de RUM, además de list_projects para los proyectos accesibles con tu clave. Las tres son de solo lectura. Para añadir, modificar o eliminar un monitor, usa la app o los endpoints REST anteriores con una clave de API de CoreDash. Las herramientas no necesitan project_id: una clave de proyecto lee su propio proyecto; una clave maestra o una conexión OAuth como Claude lee todos los proyectos propios o a los que te hayan invitado.
| Herramienta | Pregunta a tu agente | Devuelve |
|---|---|---|
list_projects | "¿Qué sitios puedes ver?" | { "projects": [...] } con project_id, name, url y role (owner o guest). |
list_uptime_monitors | "¿Está todo operativo?" | { "monitors": [...] }, con la IP de origen y los valores de las cabeceras enmascarados. |
get_uptime_monitor | "¿Estuvo caído el checkout esta semana y desde cuándo?" | { "monitor", "summary", "checks" }. Admite monitor_id y limit (100 por defecto, máximo 1000); summary incluye rounds, down_rounds y uptime_pct para esas comprobaciones. |
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 }
}
}'
La respuesta sigue el formato JSON-RPC de la API de CoreDash, con el resultado como una cadena JSON en result.content[0].text. Si el monitor no existe, devuelve { "error": "Monitor not found" } en ese campo y result.isError es true.
Más sobre uptime y la API de CoreDash
- Monitorización de uptime: qué comprueba CoreDash y qué ves en la app.
- API de CoreDash: claves de proyecto, formato JSON-RPC y herramientas de RUM.
- Agency API: claves maestras y proyectos mediante REST.
- Bot de CoreDash: el user agent, la cabecera
X-CoreDash-Boty las direcciones. - Permite el paso de CoreDash en tu firewall: para un monitor que indique Bloqueado.