Liveness probe
Unauthenticated liveness/health check (`GET /v1/health`). Returns 200 with a minimal status document whenever the API process is serving requests. It does no tenant work, requires no credential (note the empty `security` below), and is safe to poll. It backs the deploy health-gate, `scripts/smoke.sh`, Caddy, and the Uptime Kuma status page — NOT a deep dependency (DB/provider) check.
Unauthenticated liveness/health check (GET /v1/health). Returns 200 with a minimal status document whenever the API process is serving requests. It does no tenant work, requires no credential (note the empty security below), and is safe to poll. It backs the deploy health-gate, scripts/smoke.sh, Caddy, and the Uptime Kuma status page — NOT a deep dependency (DB/provider) check.
Response Body
application/json
curl -X GET "https://example.com/health"{ "status": "ok", "version": "1.0.0"}Update a rate plan PATCH
Previous Page
Readiness probe GET
Unauthenticated **readiness** check (`GET /v1/ready`) — the deep sibling of `/health`, not a replacement for it. Where `/health` reports only that the process is serving, this one verifies the dependency every other endpoint needs. It pings the database inside a short timeout, then answers `503` (`status: degraded`) when it is unreachable and `200` (`status: ok`) otherwise. Use `/health` to ask "is the process alive?" (liveness — e.g. a restart decision) and `/ready` to ask "can it actually serve?" (readiness — e.g. load-balancer rotation or an uptime monitor). It requires no credential and returns no tenant data, but it is rate-limited per source IP, so poll it on the order of once a minute rather than continuously.