Reachability of the backing services plus the indirect bus signal.
const url = 'https://example.com/api/v1/system-health';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/v1/system-health \ --header 'Authorization: Bearer <token>'Takes State rather than the Admin extractor on purpose: in skeleton mode this answers a
"degraded" body naming what is missing, not a 503. This is the page you open when something is
already broken.
Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”Per-dependency reachability; skeleton mode answers a degraded body rather than 503
Yagra’s own health: the reachability of its backing services.
object
NATS — inferred from a recent scheduler sweep, not a direct ping.
object
ClickHouse (flow store, ADR-031) — likewise reachable when not configured.
object
VictoriaLogs (event log, ADR-024) — reported reachable when not configured (events then live
in PostgreSQL), so an unconfigured log store never degrades overall.
object
"ok" when every dependency is reachable, else "degraded".
PostgreSQL (metadata store) — SELECT 1.
object
VictoriaMetrics (TSDB) — /-/healthy.
object
The WebUI’s TLS certificate. Reported unhealthy only when someone has to act: it has expired, or an imported certificate is inside its last 30 days. A self-signed one renews itself.
object
Examplegenerated
{ "bus": { "detail": "example", "reachable": true }, "flow": { "detail": "example", "reachable": true }, "logs": { "detail": "example", "reachable": true }, "overall": "example", "postgres": { "detail": "example", "reachable": true }, "tsdb": { "detail": "example", "reachable": true }, "web_tls": { "detail": "example", "reachable": true }}No valid bearer token
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}Role lacks the view permission
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}