Monitor types
Choose the monitor type that matches how your work is triggered.
Four types. Same POST /v1/monitors call, different type and schedule:
# Cron: a clock-based schedule
-d '{"type": "JOB_CRON", "schedule": "0 2 * * *", "timezone": "Europe/Amsterdam", ...}'
# Heartbeat: a repeating interval
-d '{"type": "JOB_HEARTBEAT", "schedule": "5m", ...}'
# Event-driven: no schedule to be late against
-d '{"type": "JOB_BASIC", "schedule": "0 0 * * *", "max_duration_seconds": 300, ...}'
# Uptime: Drumbeats polls your URL
-d '{"type": "UPTIME_HTTP", "schedule": "5m", "uptime_url": "https://api.example.com/health", ...}'# Cron: a clock-based schedule
-d '{"type": "JOB_CRON", "schedule": "0 2 * * *", "timezone": "Europe/Amsterdam", ...}'
# Heartbeat: a repeating interval
-d '{"type": "JOB_HEARTBEAT", "schedule": "5m", ...}'
# Event-driven: no schedule to be late against
-d '{"type": "JOB_BASIC", "schedule": "0 0 * * *", "max_duration_seconds": 300, ...}'
# Uptime: Drumbeats polls your URL
-d '{"type": "UPTIME_HTTP", "schedule": "5m", "uptime_url": "https://api.example.com/health", ...}'Pick the type once, when you create the monitor. Changing it later means creating a new monitor.
Pick a type#
Two questions settle it. First, does Drumbeats call you or do you call Drumbeats? Public endpoints get Uptime, everything else pings in. Second, is the work on a clock? A cron expression means Cron, a self-driven loop means Heartbeat, and work triggered by a queue message or a webhook means Event-driven.
What each type detects#
| Type | Detects | Cannot detect |
|---|---|---|
| Cron | Missed runs, failed runs, hung runs, slow runs | Nothing about the job between runs |
| Heartbeat | Missed intervals, failed intervals, hung runs | Whether individual work items succeeded |
| Event-driven | Failed runs, hung runs | A worker that stopped consuming entirely, since silence is normal |
| Uptime | Non-2xx responses, timeouts, DNS failures, refused connections, missing keywords, expiring certificates | Anything not visible from outside your service |
What happens when it breaks#
| Type | Trigger | Incident event | Monitor goes DOWN |
|---|---|---|---|
| Cron, Heartbeat | No success ping by the expected time plus grace_period_seconds | MISSED | After schedule_tolerance misses in a row |
| All job types | A failure ping or a non-zero exit code | FAILED | After failure_tolerance failures in a row |
| All job types | A start ping with no finish inside max_duration_seconds | FAILED | Yes |
| Cron, Heartbeat, Event-driven | Run finishes slower than max_duration_seconds | DURATION_HIGH | No. This is a warning |
| Cron, Heartbeat, Event-driven | Run finishes faster than min_duration_seconds | DURATION_LOW | No. This is a warning |
| Uptime | Check fails, then two retries fail | FAILED | Yes |
| Uptime | TLS certificate crosses 30, 14, 7, or 1 day remaining | SSL_EXPIRING | No. The monitor stays UP |
How you get alerted#
Every type routes the same way. The incident pages the notification groups assigned to the monitor, and every channel in those groups fires in parallel. The message carries the monitor name, the incident event, the timestamp, and a link to the incident.
Recovery is automatic on all four types. A success ping, or a passing check for Uptime, resolves the incident, flips the monitor back to UP, and sends a recovery message with the outage duration. The consecutive-failure and consecutive-miss counters reset, so the next outage starts clean.
Compare the four#
| Capability | Cron | Heartbeat | Event-driven | Uptime |
|---|---|---|---|---|
| Drumbeats polls a URL for you | no | no | no | yes |
| Alerts on missed runs | yes | yes | no | no |
| Alerts on explicit failure pings | yes | yes | yes | no |
| Detects hung runs | yes | yes | yes | no |
| Response-time tracking | no | no | no | yes |
| Certificate expiry warnings | no | no | no | yes |
run_id correlation | optional | optional | required | not used |
| Eligible for status pages | yes | yes | no | yes |
Set a schedule Drumbeats accepts#
Cron monitors take a standard five-field cron expression. Six-field expressions with seconds are rejected. Heartbeat and Uptime monitors take an interval string: 30s, 5m, 1h, 1d, 1w.
Your plan sets a floor on how often a monitor may fire. Free accounts cannot go below 60 seconds, paid plans cannot go below 30 seconds. A schedule under the floor is rejected at create time with a 400.
Next#
Read the page for the type you picked: Cron, Heartbeat, Event-driven, or Uptime. Incidents covers what happens after a monitor goes DOWN.