API de la página de estado, feeds RSS e insignia

Qué expone tu página de estado

Cada página de estado de LoadFocus sirve endpoints legibles por máquina junto a la página para personas. No requieren autenticación, están limitados por IP y se cachean 30 segundos.

Los endpoints JSON siguen el esquema de Statuspage, la forma de facto que ya hablan la mayoría de paneles, bots e integraciones de Slack. Si vienes de Atlassian Statuspage, tus integraciones existentes siguen funcionando al apuntarlas al nuevo host, sin cambios de código.

Todas las rutas siguientes son relativas a tu página: https://tu-slug.loadfoc.us, o tu propio nombre de host si has configurado un dominio personalizado.

GET /api/v2/status.json

Solo el estado general. Úsalo para un sondeo ligero.

{
"page": {
"id": "8f3c1e02-5b74-4a9d-9e21-6c0af7d3b514",
"name": "Acme Status",
"url": "https://acme.loadfoc.us",
"time_zone": "Etc/UTC",
"updated_at": "2026-08-26T14:05:00.000Z"
},
"status": {
"indicator": "none",
"description": "All Systems Operational"
}
}

indicator es uno de none, minor, major, critical o maintenance.

Ten en cuenta que, cuando la página no tiene datos recientes, el indicador se informa como minor y no como none. Un worker caído nunca debe leerse como verde fiable a través de la API.

GET /api/v2/summary.json

Todo lo que muestra la página: estado general, cada componente, incidencias sin resolver y mantenimientos próximos o en curso.

{
"page": { "id": "8f3c1e02-5b74-4a9d-9e21-6c0af7d3b514", "name": "Acme Status", "url": "https://acme.loadfoc.us", "time_zone": "Etc/UTC", "updated_at": "2026-08-26T14:05:00.000Z" },
"status": { "indicator": "minor", "description": "Degraded Performance" },
"components": [
{
"id": "api",
"name": "Public API",
"status": "degraded_performance",
"position": 1,
"description": null,
"updated_at": "2026-08-26T14:05:00.000Z"
}
],
"incidents": [
{
"id": "inc_1a2b",
"name": "Elevated API latency",
"status": "identified",
"impact": "minor",
"created_at": "2026-08-26T13:40:00.000Z",
"updated_at": "2026-08-26T14:02:00.000Z",
"monitoring_at": null,
"resolved_at": null,
"shortlink": "https://acme.loadfoc.us/incidents/inc_1a2b",
"incident_updates": [
{ "status": "identified", "body": "A slow query has been identified.", "created_at": "2026-08-26T14:02:00.000Z" }
]
}
],
"scheduled_maintenances": [
{
"id": "mnt_9x8y",
"name": "Database upgrade",
"status": "scheduled",
"impact": "maintenance",
"scheduled_for": "2026-08-28T22:00:00.000Z",
"scheduled_until": "2026-08-29T00:00:00.000Z",
"incident_updates": []
}
]
}

components[].status es uno de operational, degraded_performance, partial_outage, major_outage o under_maintenance.

incidents contiene solo incidencias sin resolver, y scheduled_maintenances solo ventanas que no han terminado. Ambas cosas replican el comportamiento de Statuspage. Para el historial resuelto, usa los feeds de abajo.

Comportamiento ante errores

Ambos endpoints JSON responden con HTTP 200 y una estructura vacía si algo falla internamente, en lugar de un 5xx. Por tanto, un consumidor debe tratar un array components vacío como "sin datos disponibles", no como "sin componentes configurados".

Feeds de incidencias

Para lectores y bots que siguen feeds en vez de sondear:

  • GET /history.rss - historial de incidencias en RSS
  • GET /history.atom - lo mismo en Atom
  • GET /feed.rss - un alias de history.rss

Estos incluyen también las incidencias resueltas, así que son la fuente correcta para el historial.

Insignia de estado

GET /badge.svg devuelve una insignia SVG para un README o una página de documentación. Sin parámetros muestra el estado general de la página:

[![Status](https://acme.loadfoc.us/badge.svg)](https://acme.loadfoc.us)

Añade component=<id> para mostrar un solo componente. El id es el que /data indica para ese componente, y metric decide qué muestra la insignia:

  • metric=status (por defecto): el nombre del componente y su estado actual.
  • metric=uptime: su porcentaje de disponibilidad. Añade days=30 o days=90; sin él se usa la ventana de historial de la página. Verde desde 99,9 %, ámbar desde 99 %, rojo por debajo.
  • metric=latency: su tiempo medio de respuesta en las últimas 24 horas. Verde por debajo de 500 ms, ámbar por debajo de 1500 ms.
  • logo=1: añade la marca de LoadFocus a la izquierda, en cualquiera de las variantes anteriores.
![Uptime](https://acme.loadfoc.us/badge.svg?component=c-1a2b3c4d5e6f&metric=uptime&days=30)

Un id de componente desconocido devuelve una insignia gris con "not found" en lugar de un error, así que un snippet mal escrito nunca muestra una imagen rota. Las insignias se cachean 60 segundos y no se sirven para páginas protegidas con contraseña o restringidas por IP.

Estilos de shields.io

GET /badge.json devuelve la misma insignia en el formato endpoint de shields.io, con los mismos parámetros, así que funciona cualquier estilo de shields:

![Latency](https://img.shields.io/endpoint?url=https://acme.loadfoc.us/badge.json%3Fcomponent%3Dc-1a2b3c4d5e6f%26metric%3Dlatency&style=flat-square)

La cadena de consulta dentro de url= debe ir codificada: ? como %3F, & como %26 y = como %3D.

Visibilidad en buscadores

Las páginas de estado son indexables por defecto. Una página creada en la aplicación guarda hideFromSearch: false, así que no sirve noindex, su robots.txt devuelve Allow: / con una línea Sitemap:, y /sitemap.xml lista la página, sus incidencias y su historial de mantenimiento.

Para ocultar una página de los buscadores, pon hideFromSearch a true. Entonces la página sirve <meta name="robots" content="noindex,follow">, robots.txt devuelve Disallow: /, /sitemap.xml responde 404, y se suprimen las etiquetas canonical y Open Graph para que la página no se anuncie. No hay un control para esto en el editor: configúralo mediante la API.

Relacionado

Migrar desde Atlassian Statuspage

Si vienes de Atlassian Statuspage, dos endpoints replican su esquema, así que la mayoría de las integraciones existentes siguen funcionando con solo cambiar el host:

  • /api/v2/status.json: estado general de la página
  • /api/v2/summary.json: estado, componentes, incidencias sin resolver y mantenimientos previstos

LoadFocus no sirve los endpoints components.json ni incidents.json de Statuspage. Todo lo que devuelven ya está dentro de summary.json.

Consulta también la comparativa de alternativas a Statuspage.