Health

The public JARVIS health endpoint — service availability, liveness, and readiness, without exposing diagnostics.

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

Endpoint

Method Path Auth Purpose
GET /api/health None Current service status
curl -s https://jarvis.spacekeep.dev/api/health \
  -H "Accept: application/json"

Response

{
  "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 instead of probing for diagnostics.

Using it

As a liveness probe

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

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, and in the dashboard. You do not need to call the endpoint to check.