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. En una página pública no requieren autenticación. Están limitados a 120 solicitudes por minuto y por IP, y los endpoints JSON se cachean 30 segundos (los feeds 5 minutos, las insignias 1 minuto). En una página privada (contraseña o lista de IP permitidas) no se sirven a quien llama de forma anónima.
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, las integraciones existentes que solo leen status.json o summary.json siguen funcionando al apuntarlas al nuevo host.
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": "c-1a2b3c4d5e6f","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". En ese caso status.json devuelve un objeto page vacío e indicator: "none", así que comprueba que page.id exista antes de fiarte del indicador.
Feeds de incidencias
Para lectores y bots que siguen feeds en vez de sondear:
GET /history.rss- historial de incidencias en RSSGET /history.atom- lo mismo en AtomGET /feed.rss- un alias dehistory.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:
[](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ñadedays=30odays=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.

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:

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 las páginas de estado, de mantenimiento y de incidencias.
Para ocultar una página de los buscadores, marca Ocultar de los buscadores en el editor (sección Historial de estado) o pon hideFromSearch a true mediante la API. 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.
Relacionado
- Crear una página de estado pública para tus monitores
- Añadir un dominio personalizado a tu página de estado
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.