Skip to content
Keenpix docs
API reference

Operations

Runtime endpoints for deployment health and automation.

These endpoints are for operators and deployment platforms. They are separate from the public image transform endpoint and the authenticated SDK API.

Health

GET /api/health

The health endpoint is unauthenticated so container platforms, reverse proxies, and uptime monitors can call it. It returns JSON with Cache-Control: no-store.

StatusMeaning
200The app can reach the database and runtime checks completed.
503The database health check failed or the instance is degraded.

Example response:

{
  "ok": true,
  "service": "keenpix",
  "status": "ok",
  "timestamp": "2026-06-12T02:30:00.000Z",
  "uptimeSeconds": 123,
  "checks": {
    "cache": {
      "diskSizeBytes": 1048576,
      "diskMaxBytes": 2147483648,
      "memorySizeBytes": 262144,
      "memoryMaxBytes": 67108864
    },
    "database": {
      "ok": true,
      "latencyMs": 2
    },
    "prewarmQueue": {
      "active": 0,
      "waiting": 0,
      "delayed": 0,
      "queued": 0,
      "failed": 0,
      "status": "ready"
    }
  },
  "latencyMs": 3
}

The exact cache and prewarm queue fields may grow as the operations dashboard grows, so treat ok, status, checks.database.ok, and the HTTP status as the stable monitoring contract.

Worker operations

The worker has a separate internal ops server on KEENPIX_WORKER_PORT (default 3001). Compose keeps this port private and uses the cheap liveness endpoint for container health:

EndpointPurpose
GET /health/liveConfirms the worker process and HTTP server are alive.
GET /health/readyConfirms the BullMQ consumer is accepting jobs and Dragonfly responds.
GET /healthCompatibility alias for readiness.
GET /health/detailsReturns component status, queue latency, environment, and uptime.
GET /workbenchOpens the embedded BullMQ queue dashboard.

Set both KEENPIX_WORKBENCH_USERNAME and KEENPIX_WORKBENCH_PASSWORD before assigning the worker service a private admin domain. Never expose port 3001 publicly without authentication; an SSH tunnel or access-controlled internal domain is preferred.

On this page