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 (status es lo que el cliente ve ahora, el peor entre manual_status y los incidentes abiertos; version, la versión en producción del proyecto), páginas (url pública, slug, published, primary) e incidentes y mantenimientos recientes (phase: active, upcoming o closed).
  • POST /status/services y PATCH/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 trae monitor con el último resultado.
  • GET /status/pages/{id}, POST /status/pages y PATCH/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"]}]}. blocks reemplaza 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; null vuelve al nombre de la empresa), accent_color (#rrggbb; null vuelve al color por defecto), links (hasta 4 botones arriba, [{"label": "Soporte", "url": "https://..."}], https: o mailto:; reemplaza los que había), show_history y show_past_incidents (false oculta las barras de 90 días y los incidentes cerrados) y remove_logo: true; el logo se sube por la pantalla y vuelve en logo_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 exige starts_at y ends_at).
  • GET /status/incidents/{id} (con la línea de tiempo), POST /status/incidents/{id}/updates ({"message": "...", "status": "monitoring", "impact": "degraded"}; resolved o completed lo cierra), PATCH /status/incidents/{id} (corrige title, services, starts_at, ends_at e impact, y con message también publica una actualización) y DELETE /status/incidents/{id} (tracker:write).