> ## Documentation Index
> Fetch the complete documentation index at: https://internal.september.wtf/llms.txt
> Use this file to discover all available pages before exploring further.

# Health endpoint

> The orchestrator's own liveness check.

## GET /health

Orchestrator liveness. The only endpoint that does not require any
auth header.

### Request

```http theme={null}
GET /health
```

### Response (200)

```json theme={null}
{
  "status": "ok"
}
```

A 200 with `status: "ok"` means:

* The orchestrator process is up.
* Postgres is reachable.
* The migrations are applied.

A 200 with `status` other than `"ok"` means a subsystem is degraded.
Future versions may include a `subsystems` field; today it's just
`status`.

### Non-2xx

If the orchestrator can't talk to Postgres or hasn't finished
applying migrations, `/health` returns a non-2xx status. Wire your
load balancer / k8s probe to this:

```yaml theme={null}
livenessProbe:
  httpGet:
    path: /health
    port: 8000
  initialDelaySeconds: 5
  periodSeconds: 10
  timeoutSeconds: 5
  failureThreshold: 3
```

### Use it for

* Load balancer / k8s liveness/readiness probes.
* Status page checks.
* A first sanity check when "the orchestrator seems broken."

### Don't use it for

* Per-engine health. Engines have their own `/health`. The
  orchestrator polls them in the background; ask via `/status` or
  `/engines/{user_id}` instead.
* Quota checks. The endpoint doesn't authenticate — it can't tell
  you anything about the calling product.

## See also

* [Health and auto-restart](../../health) — how the orchestrator
  monitors engines.
* [Fleet endpoints](./fleet) — `/status` for a richer view.
