analytics

Get System Health

Fleet-wide detection-pipeline health — the Analytics → System Health tab.

OWNER + SUPPORT (require_diagnostics_reader; support since the owner ask of 2026-10-14) and NOT the monitoring manager — note that /summary beside it was relaxed to require_ops_lead by owner decision 2026-09-15 while this route deliberately was not (the decision's "Out of scope" list names GET /analytics/system-health alongside Training and logs/*). The two no longer share a dependency, and that divergence is the point: every block here is a cross-tenant fleet aggregate (fail-open share across the whole fleet, per-camera accept-rate outliers naming cameras under every parent). There is deliberately no scoped variant — one would leak fleet facts by construction — so there are no filter parameters and nothing for ensure_analytics_filter_in_scope to check. Adding a filter later is therefore a deliberate act, not a default.

No query parameters in v1: the windows are fixed (1h / 24h / 7-day band per block, each block self-describing), and the service serves the whole payload from a ~5-minute in-process cache, so polling it is cheap by construction.

get/analytics/system-health

Request

  • Base URL
    https://api.verdun.ai (the document declares no server; this is the origin it was published from)
  • URL
    https://api.verdun.ai/analytics/system-health
  • Auth
    HTTP bearer

Response

Successful Response

generated_atstring date-time required

When this payload was computed. Served from a ~5-minute per-process cache, so two consecutive polls can land on different API tasks and see slightly different values — key any freshness banner off your own fetch time, not off this alone.

cache_age_secondsinteger required

How old the served payload is, in seconds. 0 means this request computed it.

Example response

{
  "cache_age_seconds": 42,
  "fail_open": {
    "window_1h": {
      "fail_open": 12,
      "total": 1004,
      "pct": 1.2
    },
    "window_24h": {
      "fail_open": 12,
      "total": 1004,
      "pct": 1.2
    },
    "legacy_validator_24h": {
      "fail_open": 12,
      "total": 1004,
      "pct": 1.2
    },
    "band_7d_pct": {
      "p50": 0.8,
      "p90": 2.1,
      "days": 7
    }
  },
  "gate": {
    "window_24h": {
      "stopped": 310,
      "total": 990,
      "stop_pct": 31.3,
      "fire_screens": 118,
      "fire_screen_cost_usd": 4.91
    },
    "band_7d_stop_pct": {
      "p50": 0.8,
      "p90": 2.1,
      "days": 7
    }
  },
  "queue": {
    "depth": 41,
    "age_p95_minutes": 122,
    "oldest_unreviewed_minutes": 611,
    "expiry_horizon_hours": 24
  },
  "heightened": {
    "window_24h": {
      "heightened_evals": 420,
      "ai_escalated": 356,
      "ai_escalate_pct": 84.8,
      "operator_graded": 190,
      "operator_false_alarm": 155,
      "benign_pct": 81.6
    },
    "band_7d_benign_pct": {
      "p50": 0.8,
      "p90": 2.1,
      "days": 7
    }
  },
  "camera_accept": {
    "window_days": 7,
    "cameras": 65,
    "fleet_accept_pct": 68.5,
    "band": {
      "p25": 61,
      "p75": 74,
      "eligible_cameras": 58,
      "min_cameras": 4
    },
    "band_rule": "fleet p25/p75 ± 1.5 × IQR over cameras with total >= min_volume",
    "min_volume": 50,
    "outliers": [
      {
        "camera_label": "18 - SW Exterior Quad - SW",
        "total": 412,
        "accept_pct": 99.3,
        "fail_open": 2,
        "direction": "high"
      }
    ]
  },
  "second_look": {
    "window_24h": {
      "low_band_rows": 130,
      "traces": 126,
      "trace_pct": 96.9,
      "status_mix": {
        "ran": 96,
        "skipped": 30
      },
      "skipped_reasons": {
        "not_gated": 8,
        "timeout": 22
      },
      "decision_mix": {
        "defer_to_2b": 65,
        "would_conclude_benign": 61
      }
    }
  },
  "policy": {
    "window_24h": {
      "version_mix": {
        "boundary-live-v2": 980,
        "preboundary-v2": 24
      },
      "fallback_nonzero": 24
    }
  }
}

Changes

No recorded changes to this operation across all 2 revisions of this API.