---
title: "Public service + data-quality status"
method: GET
path: "/status"
tags: ["Status"]
---

# Public service + data-quality status

`GET /status`

## Request

- Base URL: `https://madeonsol.com/api/v1`
- URL: `https://madeonsol.com/api/v1/status`
- Auth: none required

Live health of the 7 core services (KOL tracker, deployer listener, API server, database, WebSocket, plus Robinhood Chain node sync and trade-ingest freshness), 24h/7d uptime, and data-quality measures (accuracy, correctness, drift, serve-time). Per-service `status` is one of `healthy` | `degraded` | `down` | `stale` | `unknown` — `stale` means the monitor itself has not reported within 3x its 5-minute cadence (the last row's claim is unverifiable; `reported_status` carries what it said), `unknown` means no check row exists at all. Top-level `status` is computed over ALL 7 core services: `incident` if any is down, `degraded` if any is degraded/stale/unknown, `operational` only when every service has a fresh healthy check. `slo_target_pct` is an operating TARGET, not a measured result or a contractual guarantee. Public — no auth required.

## Response `200`

OK

- object
  - `status` 'operational' | 'degraded' | 'incident'
  - `services` object: Keyed by service name: kol_tracker, deployer_listener, nextjs_app, supabase_db, websocket, rhc_node_sync, rhc_trades_freshness
  - `uptime` object
    - `last_24h` number, nullable: Percent healthy checks
    - `last_7d` number, nullable
  - `data_quality` object
    - `slo_target_pct` number
    - `window` string
    - `secondary_window` string
    - `accuracy` object
      - `pct` number, nullable
      - `samples` integer
      - `week` object
        - `pct` number, nullable
        - `samples` integer
    - `correctness` object
      - `pct` number, nullable
      - `samples` integer
      - `week` object
        - `pct` number, nullable
        - `samples` integer
    - `drift` object
      - `pct` number, nullable
      - `samples` integer
      - `week` object
        - `pct` number, nullable
        - `samples` integer
    - `serve_time` object
      - `pct` number, nullable
      - `samples` integer
      - `week` object
        - `pct` number, nullable
        - `samples` integer
  - `verification` object: Latest run of each automated verification tier
    - `fast` object, nullable
      - `cases` integer, nullable
      - `failing` integer, nullable
      - `cadence` string
      - `last_run` string, date-time
    - `full` object, nullable
      - `cases` integer, nullable
      - `failing` integer, nullable
      - `cadence` string
      - `last_run` string, date-time
    - `nightly` object, nullable
      - `cases` integer, nullable
      - `failing` integer, nullable
      - `cadence` string
      - `last_run` string, date-time
  - `checked_at` string, date-time

## Other responses

- `429`: Too many requests. Every 429 carries `Retry-After`. A quota 429 (`rate_limit_exceeded`, with `X-RateLimit-*`), a heavy-query concurrency 429 (`error_kind` `concurrency`/`capacity`), or the per-IP authentication-failure block (30 failed auths/min; plain `error` + `retry_after_seconds`, no `X-RateLimit-*`).

---

[API](https://skmtc.dev/madeonsol/apis/madeonsol-api.md) · [All operations](https://skmtc.dev/madeonsol/apis/madeonsol-api/llms.txt) · [OpenAPI document](https://skmtc.dev/madeonsol/apis/madeonsol-api/revisions/96ce84657f55?raw)
