Health check

GET /api/health — for uptime monitoring, load balancer probes, and Railway / Fly health checks.

Endpoint

GET /api/health

Open, no auth. Returns JSON with subsystem status:

{
  "ok": true,
  "version": "1.0.3",
  "uptime_seconds": 86400,
  "db": { "ok": true, "size_bytes": 12345678 },
  "cron": { "ok": true, "last_tick_ms_ago": 22000 },
  "queue": { "ok": true, "pending": 0, "running": 0 }
}

Use cases

  • Load balancer probe: the Docker image's healthcheck and Railway's deploy-readiness probe both hit this.
  • Uptime monitor: hit it from BetterStack / Pingdom / UptimeRobot every minute. Alert on non-200 or ok: false.
  • Self-diagnostic: the dashboard's diagnostics page renders this same data with timestamps.

What "ok" means

  • db.ok — SQLite is reachable and a trivial SELECT succeeds.
  • cron.ok — last cron tick was less than 90 seconds ago.
  • queue.ok — no jobs stuck in running for over 15 minutes.

Top-level ok is true only if all three subsystems are ok.

Don't use this on the public internet without rate limiting
Health endpoints are unauthenticated by design — but if exposed on a public URL with no rate limit, they can leak DB size hints to anyone curious. Front the host with a reverse proxy that rate-limits the path.