---
title: "Health Check"
method: GET
path: "/health"
tags: ["health"]
---

# Health Check

`GET /health`

## Request

- Base URL: `https://api.alert.camp` (the document declares no server; this is the origin it was published from)
- URL: `https://api.alert.camp/health`
- Auth: none declared

Health check endpoint.

Performs real checks against database, polling loop, and circuit
breaker. Returns overall status: healthy, degraded, or unhealthy.
Uptime Robot keyword monitoring should check for "healthy".

## Response `200`

Successful Response

- HealthResponse: Full health check response.
  - `status` 'healthy' | 'degraded' | 'unhealthy', required: Overall health status of the application.
  - `app` string, required
  - `version` string, required
  - `environment` string, required
  - `uptime_seconds` number, required
  - `started_at` string, required
  - `checked_at` string, required
  - `min_app_version` string, required
  - `database` DatabaseHealth, required: Database component health.
    - `status` 'ok' | 'warn' | 'fail', required: Health status of an individual component.
    - `latency_ms` number, nullable
    - `error` string, nullable
  - `polling` PollingHealth, required: Polling loop component health.
    - `status` 'ok' | 'warn' | 'fail', required: Health status of an individual component.
    - `task_running` boolean, required
    - `last_poll_at` string, nullable
    - `seconds_since_last_poll` number, nullable
    - `sites_polled_total` integer
    - `sites_successful` integer
    - `sites_failed` integer
    - `sites_skipped` integer
    - `cancellations_detected` integer
    - `alerts_matched` integer
    - `api_calls_total` integer
    - `success_rate` number
    - `sites_polled_by_tier` object
    - `backlog` PollingBacklog: Polling backlog metrics — shows whether the backend can keep up.
      - `sites_tracked` integer
      - `sites_overdue` integer
      - `max_overdue_seconds` number
      - `max_overdue_ratio` number
      - `max_overdue_tier` string, nullable
    - `stats_backlog` PollingBacklog: Polling backlog metrics — shows whether the backend can keep up.
      - `sites_tracked` integer
      - `sites_overdue` integer
      - `max_overdue_seconds` number
      - `max_overdue_ratio` number
      - `max_overdue_tier` string, nullable
    - `stress_mode` object
    - `maintenance_mode` boolean
    - `maintenance_since` string, nullable
    - `maintenance_providers` string[]
    - `maintenance_since_by_provider` object
    - `provider_status` object
    - `provider_tier_status` object
    - `error` string, nullable
  - `circuit_breaker` CircuitBreakerHealth: Circuit breaker component health.
    - `status` 'ok' | 'warn' | 'fail', required: Health status of an individual component.
    - `state` string, required
    - `failure_count` integer
    - `opened_at` string, nullable
  - `notifications` NotificationHealth, required: Notification service stats.
    - `total` integer
    - `push_sent` integer
    - `push_failed` integer
    - `email_sent` integer
    - `email_failed` integer
    - `sms_sent` integer
    - `sms_failed` integer
  - `cluster` ClusterHealth: Aggregate health of all nodes in the cluster.
    - `status` 'ok' | 'warn' | 'fail', required: Health status of an individual component.
    - `total_nodes` integer, required
    - `healthy_nodes` integer, required
    - `workers` WorkerStatus[], required
      - `node_name` string, required
      - `instance_role` string, required
      - `polling_tiers` string, required
      - `status` string, required
      - `uptime_seconds` number, required
      - `last_heartbeat_seconds_ago` number, required
      - `polling_task_running` boolean, required
      - `error` string, nullable
      - `sites_polled_total` integer
      - `sites_successful` integer
      - `sites_failed` integer
      - `success_rate` number
      - `sites_polled_by_tier` object
      - `sites_tracked` integer
      - `sites_overdue` integer
      - `stats_sites_tracked` integer
      - `stats_sites_overdue` integer
    - `cluster_sites_polled` integer
    - `cluster_sites_successful` integer
    - `cluster_sites_failed` integer
    - `cluster_success_rate` number
    - `cluster_alerts_matched` integer
    - `cluster_requests_per_second` number
    - `cluster_backlog` PollingBacklog: Polling backlog metrics — shows whether the backend can keep up.
      - `sites_tracked` integer
      - `sites_overdue` integer
      - `max_overdue_seconds` number
      - `max_overdue_ratio` number
      - `max_overdue_tier` string, nullable
    - `cluster_stats_backlog` PollingBacklog: Polling backlog metrics — shows whether the backend can keep up.
      - `sites_tracked` integer
      - `sites_overdue` integer
      - `max_overdue_seconds` number
      - `max_overdue_ratio` number
      - `max_overdue_tier` string, nullable
    - `cluster_provider_status` object
    - `cluster_maintenance_providers` string[]
    - `cluster_maintenance_since` object
    - `provider_tier_status` object
    - `stuck_targets` StuckTarget[]
      - `provider` string, required
      - `tier` string, required
      - `worst_overdue_seconds` number, required
      - `max_window_seconds` number, required
      - `windows_overdue` number, required
      - `stuck_since` string, required

---

[API](https://skmtc.dev/alert/apis/alertcamp.md) · [All operations](https://skmtc.dev/alert/apis/alertcamp/llms.txt) · [OpenAPI document](https://skmtc.dev/alert/apis/alertcamp/revisions/864c8c9ef833?raw)
