API REST
Páginas de estado
Servicios, páginas, incidentes y mantenimientos.
GET /status(tracker:read, admin o dueño de la empresa): páginas de estado. Servicios (statuses lo que el cliente ve ahora, el peor entremanual_statusy los incidentes abiertos;version, la versión en producción del proyecto), páginas (urlpública,slug,published,primary) e incidentes y mantenimientos recientes (phase: active, upcoming o closed).POST /status/servicesyPATCH/DELETE /status/services/{id}(tracker:write):{"name": "App del conductor", "project": "MOB", "description": "...", "status": "operational|degraded|partial_outage|major_outage|maintenance", "show_version": true, "check_url": "https://api.ejemplo.com/health", "sentry_alerts": true}. En el PATCH, solo cambia lo que venga.check_url: un healthcheck cada minuto (más de 3 s es Lento; dos fallas seguidas, Caído);sentry_alerts: un error nuevo en el Sentry del proyecto lo deja en Lento durante 30 minutos. La respuesta traemonitorcon el último resultado.GET /status/pages/{id},POST /status/pagesyPATCH/DELETE /status/pages/{id}(tracker:write):{"title": "Estado", "intro": "...", "published": true, "blocks": [{"kind": "projects", "projects": ["MOB"]}, {"kind": "projects", "title": "Plataforma", "projects": ["PLT", "API"], "hidden_services": ["Cola interna"]}, {"kind": "services", "title": "Destacados", "services": ["App del conductor"]}]}.blocksreemplaza todos los bloques, en orden; sin él, quedan como están. Servicio por id o nombre; proyecto por prefijo, slug o id.slug: dirección legible en la dirección de la empresa (/status/<slug>; sin él, sale del título);primary: true: la página que se abre en/status(una por empresa). La clave de la página sigue abriendo en cualquier dirección. Apariencia (lo que no venga queda como está):brand_name(la marca de la página;nullvuelve al nombre de la empresa),accent_color(#rrggbb;nullvuelve al color por defecto),links(hasta 4 botones arriba,[{"label": "Soporte", "url": "https://..."}],https:omailto:; reemplaza los que había),show_historyyshow_past_incidents(falseoculta las barras de 90 días y los incidentes cerrados) yremove_logo: true; el logo se sube por la pantalla y vuelve enlogo_url.POST /status/incidents(tracker:write): abre un incidente o agenda un mantenimiento.{"kind": "incident|maintenance", "title": "...", "services": ["App del conductor"], "message": "<lo que lee el cliente>", "impact": "degraded|partial_outage|major_outage", "status": "...", "starts_at": "2026-10-18T23:00:00-03:00", "ends_at": "..."}(el mantenimiento exigestarts_atyends_at).GET /status/incidents/{id}(con la línea de tiempo),POST /status/incidents/{id}/updates({"message": "...", "status": "monitoring", "impact": "degraded"};resolvedocompletedlo cierra),PATCH /status/incidents/{id}(corrigetitle,services,starts_at,ends_ateimpact, y conmessagetambién publica una actualización) yDELETE /status/incidents/{id}(tracker:write).