---
title: Platform status and health
description: How to check whether the platform is up, what each health surface means, and how to distinguish down, idle and intentionally paused.
locale: en
version: 0.2.0
canonical: https://enterium-developer-docs.pages.dev/developers/reference/status/
---

> Documentation index: https://enterium-developer-docs.pages.dev/developers/llms.txt — every page of this portal has a Markdown twin at <route>.md; the frozen API contract is at https://enterium-developer-docs.pages.dev/developers/api/openapi.json.

## The health endpoints

```sh
curl -fsS https://entherium.duckdns.org:8443/healthz
```

Returns `{"status": "ok", "service": …, "version": …}` — the `version`
field doubles as "which build is live". `/health` is an alias.

| Signal | Meaning |
| --- | --- |
| `200` on `/healthz` | Platform up. Everything else on this page is about interpretation, not availability |
| `502` / connection refused | The platform instance is not serving — down **or intentionally paused** (maintenance windows exist; a paused instance is not an incident) |
| `200` but idle metrics | Normal between nightly runs — see below |

## Live status

<div id="live-status-panel" data-src="https://entherium.duckdns.org:8443/api/status.json">Loading live status from <code>/api/status.json</code>…</div>
<script>
(function () {
  var el = document.getElementById('live-status-panel');
  if (!el || !window.fetch) return;
  fetch(el.getAttribute('data-src'), { cache: 'no-store' })
    .then(function (r) { return r.json(); })
    .then(function (s) {
      var rows = (s.components || []).map(function (c) {
        return '<li><b>' + c.name + '</b>: ' + String(c.status).replace(/_/g, ' ') + (c.description ? ' <span class="muted">— ' + c.description + '</span>' : '') + '</li>';
      }).join('');
      el.innerHTML = '<p><b>' + s.status.description + '</b> · checked ' + (s.checked_at || s.page.updated_at) + ' · build ' + (s.version || '') + '</p><ul>' + rows + '</ul>';
    })
    .catch(function () {
      el.textContent = 'Live status could not be loaded from this page (the API host did not answer, or the browser blocked the request). Open the JSON directly: https://entherium.duckdns.org:8443/api/status.json';
    });
})();
</script>

`GET /api/status.json` (no token) renders the same data in the **Statuspage v2
`summary.json` shape** — `status.indicator` (`none` / `minor` / `major` /
`critical`), `components[]` for the three public surfaces (API, MCP, Developer
docs) and `page.updated_at` — so any status widget or agent that already reads
that format works unchanged. It answers `503` when the database is down and
sends `Access-Control-Allow-Origin: *`.

```sh
curl -sS https://entherium.duckdns.org:8443/api/status.json | jq '.status, [.components[] | {name, status}]'
```

## Freshness of this documentation

Every page shows the API contract version and the agent capability version it
was built against (the badges under the title). The build itself is described
by [`versions.json`](/developers/versions.json) (`version`, `builtAt`) and
[`manifest.json`](/developers/manifest.json) (a content hash per page); the `Developer
docs` component above carries the portal version the API host currently sees.

## Idle is the default state

Production runs on a nightly batch; between runs there is no orchestrator
process by design. The definitive interpretation table lives at
[Interpreting platform status](../../mcp/interpreting-status/) — read it
before reporting an outage based on `orchestrator.present: false`,
`velocity: 0`, or a quiet afternoon.

## Deeper surfaces (authenticated)

| Surface | What it shows |
| --- | --- |
| `GET /api/v1/ops/overview` | The live operational snapshot: orchestrator state, per-contract backlogs, alerts |
| `GET /api/v1/errors` | The durable error sink ([how to read it](../../guides/reading-errors/)) |
| The `cycles` domain | The actual execution funnel of the nightly runs |
| Run records (`pipeline_run` / `run_step`) | Ground truth for any specific execution |

## If you operate through MCP

A platform deploy kills live MCP sessions without restoring them — an
empty tools list right after a version bump is reconnect-time, not an
outage ([details](../../mcp/connecting/#if-it-fails)). After reconnecting,
`start_here` tells you if the capability surface changed while you were
away.
