Skip to content

Monitoring & Health

PrepArr exposes health endpoints for orchestrator integration and observability.

EndpointMethodPurposeResponse Code
/healthGETReadiness probe200 / 503
/health/readyGETAlias for /health200 / 503
/health/liveGETLiveness probeAlways 200
/health/livenessGETAlias for /health/liveAlways 200
/health/statusGETDetailed health statusAlways 200
/metricsGETPrometheus metrics200
/reconciliation/statusGETReconciliation state200
/reconciliation/forcePOSTTrigger reconciliation200
{
"status": "healthy",
"timestamp": "2025-01-15T12:00:00.000Z",
"uptime": 3600,
"checks": {
"database": { "status": "pass", "lastChecked": "2025-01-15T12:00:00.000Z" },
"servarr": { "status": "pass", "lastChecked": "2025-01-15T12:00:00.000Z" },
"configuration": { "status": "pass", "lastChecked": "2025-01-15T12:00:00.000Z" }
},
"reconciliation": {
"status": "active",
"totalRuns": 42,
"errors": 0
}
}
preparr_uptime_seconds 3600
preparr_health_status 1
preparr_reconciliation_total 42
preparr_reconciliation_errors_total 0
sonarr-sidecar:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9001/health"]
interval: 30s
timeout: 10s
retries: 3
containers:
- name: preparr-sidecar
livenessProbe:
httpGet:
path: /health/live
port: 9001
initialDelaySeconds: 30
periodSeconds: 30
readinessProbe:
httpGet:
path: /health/ready
port: 9001
initialDelaySeconds: 10
periodSeconds: 10

Use /health/live for liveness (always returns 200 while the process runs) and /health/ready for readiness (returns 503 when unhealthy).

Trigger an immediate reconciliation cycle:

Terminal window
curl -X POST http://localhost:9001/reconciliation/force

Response:

{
"message": "Reconciliation triggered successfully"
}
Terminal window
# Detailed status
curl http://localhost:9001/health/status | jq .
# Check reconciliation state
curl http://localhost:9001/reconciliation/status | jq .