---
title: "Aggregate dependency health for uptime monitoring"
method: GET
path: "/v1/admin/health"
tags: ["meta"]
---

# Aggregate dependency health for uptime monitoring

`GET /v1/admin/health`

## Request

- Base URL: `https://api.hyperresearch.ai`
- URL: `https://api.hyperresearch.ai/v1/admin/health`
- Auth: API key in cookie `hr_session`

`/v1/health` deliberately touches nothing so it stays green through a control-plane incident — the right answer for a load balancer, the wrong one for a human. This one asks each binding a question: `SELECT 1` on D1, a `head()` on R2 (a miss is a healthy answer), `GET /healthz` over the orchestrator service binding. It adds today's platform model spend and every open alert the scheduled provider check has written. No vendor is called and no customer identifier is returned.

## Response `200`

Dependency health

- PlatformHealth
  - `status` 'ok' | 'degraded' | 'down', required
  - `checked_at` string, required
  - `environment` string, required
  - `components` object[], required
    - `component` 'd1' | 'r2' | 'orchestrator' | 'queues', required
    - `status` 'ok' | 'degraded' | 'down' | 'skipped', required: `skipped` is a third answer, not a pass: a binding this deployment does not have, or a depth a Workers queue producer cannot read. "We did not look" must never render as "fine".
    - `latency_ms` integer, nullable, required
    - `detail` 'binding_absent' | 'probe_failed' | 'unexpected_status' | 'not_supported' | 'null', nullable, required
  - `spend` object, nullable, required
    - `day` string, required: UTC calendar day this total covers.
    - `ceiling_cents` integer, required: `PLATFORM_DAILY_SPEND_CENTS`, or the built-in default when it is unset or unusable.
    - `spent_cents` integer, required
    - `spent_micros` integer, required: Millionths of a USD. The authoritative figure; model calls cost fractions of a cent and cents round.
    - `remaining_cents` integer, required
    - `exhausted` boolean, required: True once new runs are being refused with `platform_capacity`. Runs already in flight are unaffected.
    - `calls` integer, required
    - `providers` object[], required
      - `provider` string, required
      - `micros` integer, required
      - `cents` integer, required
      - `calls` integer, required
      - `updated_at` string, required
  - `alerts` PlatformAlert[], required
    - `id` string, required
    - `kind` string, required
    - `severity` string, required
    - `subject` string, required
    - `detail` string, nullable, required: An operator sentence written by us. NEVER a provider response body — a vendor that echoes the Authorization header into an error would otherwise publish our key here.
    - `first_seen_at` string, required
    - `last_seen_at` string, required
    - `occurrences` integer, required
    - `resolved_at` string, nullable, required

## Other responses

- `400`: Invalid request
- `401`: Authentication failed
- `403`: Insufficient scope or plan
- `404`: Not found
- `429`: Rate limited or over quota
- `500`: Internal error

---

[API](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api.md) · [All operations](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api/revisions/726ef831ebf4?raw)
