# Health

JARVIS exposes one public endpoint for service status. It requires no credential.

## Endpoint

| Method | Path | Auth | Purpose |
| --- | --- | --- | --- |
| `GET` | `/api/health` | None | Current service status |

```bash
curl -s https://jarvis.spacekeep.dev/api/health \
  -H "Accept: application/json"
```

## Response

```json
{
  "status": "operational",
  "checks": {
    "core": { "ok": true, "detail": "Service responding" },
    "memory": { "ok": true, "detail": "Data store reachable" },
    "auth": { "ok": true, "detail": "Session service ready" }
  },
  "checkedAt": "2026-01-01T00:00:00.000Z"
}
```

## Status values

| `status` | Meaning | What to do |
| --- | --- | --- |
| `operational` | Every check passed | Nothing |
| `degraded` | At least one check failed | Retry shortly; see the failing check |

The HTTP status is `200` in both cases — read the `status` field rather than relying on the
response code alone.

## Checks

| Check | Question it answers |
| --- | --- |
| `core` | Is the service responding to requests? |
| `memory` | Can the service reach the data it needs to answer and to recall memories? |
| `auth` | Is the session service ready to authenticate you? |

Each check is a boolean with a short human-readable detail. The endpoint reports availability only
— no metrics, no configuration, no secrets.

## What it does not tell you

- Which specific component behind a check is failing.
- Capacity, latency, or throughput.
- Anything about your account.

If you need detail, that is deliberate — this endpoint is public and unversioned. Raise an issue
with [SpaceKeep Labs support](https://spacekeep.dev) instead of probing for diagnostics.

## Using it

### As a liveness probe

```js
const res = await fetch("https://jarvis.spacekeep.dev/api/health", {
  headers: { Accept: "application/json" },
  signal: AbortSignal.timeout(5000),
});
const { status } = await res.json();
if (status !== "operational") process.exitCode = 1;
```

### As a readiness probe

```bash
curl -sf https://jarvis.spacekeep.dev/api/health \
  | grep -q '"status":"operational"' \
  && echo ready \
  || echo not-ready
```

### Before you depend on it

Give your probe a timeout. Individual checks are bounded, but a slow network should not turn a
health check into a hang.

Responses are sent with `Cache-Control: no-store`, so a probe never reads a cached answer.

## In the app

The same status is shown in the interface — on the landing page, on the
[Developer page](https://jarvis.spacekeep.dev/developer), and in the dashboard. You do not need to
call the endpoint to check.

## Related

- [API Overview](/jarvis/api/) — the rest of the API
- [Global Enforcement](/jarvis/security/global-enforcement/) — the difference between degraded and restricted
- [Troubleshooting](/jarvis/troubleshooting/) — what to do when things are not working
