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/healthThe health endpoint is unauthenticated so container platforms, reverse proxies, and
uptime monitors can call it. It returns JSON with Cache-Control: no-store.
| Status | Meaning |
|---|---|
200 | The app can reach the database and runtime checks completed. |
503 | The 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:
| Endpoint | Purpose |
|---|---|
GET /health/live | Confirms the worker process and HTTP server are alive. |
GET /health/ready | Confirms the BullMQ consumer is accepting jobs and Dragonfly responds. |
GET /health | Compatibility alias for readiness. |
GET /health/details | Returns component status, queue latency, environment, and uptime. |
GET /workbench | Opens 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.