---
title: "ADMIN-OPS-002 — systems registry: every external/infra dependency + honest status"
method: GET
path: "/api/v1/admin/systems"
tags: ["admin"]
---

# ADMIN-OPS-002 — systems registry: every external/infra dependency + honest status

`GET /api/v1/admin/systems`

## Request

- Base URL: `https://api.badgeia.com`
- URL: `https://api.badgeia.com/api/v1/admin/systems`
- Auth: none declared

Return the curated systems registry with live-computed status.

ADMIN-OPS-002. The operator's "is everything wired?" answer on one
screen: backend API, database, redis, cert-signing, backups, Sentry,
PostHog, email, Stripe, Hetzner, GitHub, DNS, support mailbox.

Read-only — no mutation, no audit row (nothing changes). Reuses the same
live probes as GET /health/dependencies (DB SELECT 1, Redis PING) rather
than inventing a second health path.

HONESTY (the point of this surface):
    - "ok" only when we actually probed it live this request (backend,
      DB, Redis).
    - "configured" reflects safe configuration presence or current
      declarative proof for services we can't ping (Sentry, PostHog,
      Resend, Stripe, WireGuard); "not_configured" means the required
      configuration/posture declaration is absent.
    - "unknown" for posture this API cannot independently verify
      (Hetzner, GitHub, DNS, the GH-Actions-scoped backup workflow, the
      support mailbox, the frontend web app, and declaration-only controls
      such as the WireGuard deployment plane).

SECRET SAFETY: the response contains ONLY booleans + public labels. No
DSN / API key / connection string value is ever emitted (see
`services/admin_systems.py`).

Authorization:
    - Anonymous → 401 (auth dep on ``require_admin``).
    - Authenticated non-admin → 403 (``require_admin``).
    - Admin (email in ``ADMIN_EMAILS``) → 200.

Flag gate (rule #4): 404 when ``ADMIN_DASHBOARD_ENABLED`` is off, so the
whole ``/admin/*`` surface stays uniformly gated.

Response shape:
    {
      "computed_at": "<ISO8601 UTC>",
      "environment": "<env>",
      "version": "<app version>",
      "categories": ["frontend", "backend", "data", ...],
      "systems": [
        {"id": "database", "name": "Database", "category": "data",
         "provider": "Neon serverless Postgres (EU · Frankfurt)",
         "status": "ok", "status_detail": "...",
         "metrics": [{"label": "Reachable", "value": "yes"}, ...],
         "dashboard_url": "https://console.neon.tech",
         "runbook_url": "https://github.com/.../RUNBOOK-postgres.md",
         "description": "..."},
        ...
      ]
    }

## Response `200`

Successful Response

- object

---

[API](https://skmtc.dev/badgeia/apis/badge.md) · [All operations](https://skmtc.dev/badgeia/apis/badge/llms.txt) · [OpenAPI document](https://skmtc.dev/badgeia/apis/badge/revisions/7e7f7fee8b77?raw)
