---
title: "Liveness and basic configuration probe."
method: GET
path: "/health"
tags: ["Health"]
---

# Liveness and basic configuration probe.

`GET /health`

Unauthenticated, cheap, returns immediately. Does NOT verify
downstream connectivity (Supabase, OpenRouter, Hydra) — it only
reports whether the gateway process has booted with the expected
config. Use this for container liveness checks; for readiness
probes that include downstream health, build a higher-level
check.

## Response `200`

Gateway is up. Response body describes the process — version,
identity, configured planner model, recipe count, uptime. The
200 status is informational, not a health gate: read `status`
and `ready` in the body to distinguish healthy from degraded.

- HealthResponse — Detailed gateway health payload. Shape aligned with the per-agent Bindu health (the one a `bindufy()`-built agent returns), adapted for the coordinator role: `gateway_id`/`gateway_did` replace the agent-side `penguin_id`/`agent_did`, and `runtime` reports gateway-specific knobs (planner model, recipe count, DID-signing status) instead of the agent's task-manager fields.
  - `version` string, required — Gateway package version, from gateway/package.json.
  - `health` 'healthy' | 'degraded' | 'unhealthy', required — Overall classification. - `healthy`: every boot invariant satisfied, planner model resolves. - `degraded`: non-critical subsystem missing (reserved — no current signals trigger this). - `unhealthy`: a required invariant is broken (e.g. no planner model configured).
  - `runtime` HealthRuntime, required
    - `storage_backend` 'stateless', required — The gateway's persistence model. Always `stateless` since the Path A migration — session state lives in memory for the lifetime of each `/plan` call only; the calling client owns durable history.
    - `bus_backend` string, required — Event bus driver. Today always `EffectPubSub` (in-process).
    - `planner` HealthPlanner, required — The planner LLM configuration — what model drives the agentic loop inside every `/plan` call. Sourced from `gateway/agents/planner.md` frontmatter (or config.agent.planner overrides).
      - `model` string, nullable, required — Full provider-prefixed model id as configured. Null when no planner agent is configured.
      - `provider` string, nullable, required — Provider segment (bit before the first `/`). Today always `openrouter`.
      - `model_id` string, nullable, required — Upstream model id the provider understands. For OpenRouter-proxied Anthropic this is `anthropic/claude-sonnet-4.6`.
      - `temperature` number, nullable, required — Sampling temperature configured on the planner agent.
      - `top_p` number, nullable, required — Nucleus sampling top_p.
      - `max_steps` integer, nullable, required — Cap on agentic loop steps per plan. Null when no cap is set (the planner will run until natural completion or context overflow).
    - `recipe_count` integer, required — Number of recipes discovered at boot (union across all scanned directories, after permission filtering for the default agent).
    - `did_signing_enabled` boolean, required — True when a gateway DID identity is loaded (env vars `BINDU_GATEWAY_DID_SEED` + friends all set). `did_signed` peers require this.
    - `hydra_integrated` boolean, required — True when a Hydra token provider was successfully wired at boot. `did_signed` peers without `tokenEnvVar` need this to auto-acquire tokens.
  - `application` HealthApplication, required
    - `name` '@bindu/gateway', required
    - `session_mode` 'stateless', required — Session persistence model. Always `stateless` — the `stateful` value (Supabase-backed) was removed in the Path A migration. Clients pass prior turns via `history` on each /plan call.
    - `gateway_did` string, nullable, required — The gateway's full DID, null when no identity is configured.
    - `gateway_id` string, nullable, required — Short identifier — last segment of the DID (UUID-ish hash of the public key for `did:bindu`).
    - `author` string, nullable, required — Author segment from the DID. Null for non-Bindu DIDs or when no identity is configured.
  - `system` HealthSystem, required
    - `node_version` string, required — Node.js runtime version.
    - `platform` string, required — Underlying OS kernel identifier from `process.platform`.
    - `architecture` string, required — CPU architecture from `process.arch`.
    - `environment` string, required — Value of `NODE_ENV`, or `"development"` when unset.
  - `status` 'ok' | 'error', required — Two-state mirror of `health` — `ok` when healthy, `error` when unhealthy. Provided for operators that prefer binary.
  - `ready` boolean, required — Liveness gate. True when every boot invariant is satisfied. Use this for k8s readiness probes via a `jq` post-processor.
  - `uptime_seconds` number, required — Seconds since gateway process boot (float, 2 decimal places).

## Changes

- **2026-05-16** `3c89680038fb` — 1 warning, 1 info
  - added the new `stateless` enum value to the `runtime/storage_backend` response property for the response status `200`
  - removed the `stateful` enum value from the `application/session_mode` response property for the response status `200`
- **2026-04-20** `6b31738748d9` — 4 breaking, 8 info
  - removed the required property `name` from the response with the `200` status
  - removed the required property `ok` from the response with the `200` status
  - removed the required property `session` from the response with the `200` status
  - removed the required property `supabase` from the response with the `200` status
  - …8 more

[Change history](https://skmtc.dev/getbindu/apis/bindu-gateway-api/changes/health/get.md)

---

[API](https://skmtc.dev/getbindu/apis/bindu-gateway-api.md) · [All operations](https://skmtc.dev/getbindu/apis/bindu-gateway-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getbindu/bindu-gateway-api/revisions/3c89680038fb/schema)
