StatusPage.me Help Center

Popular topics: creating a status page, connecting monitors, automatic incidents, custom domains, integrations and billing.

StatusPage.me Dec 22, 2025 Monitoring

Heartbeat Monitors (Cron Jobs & Scheduled Tasks)

Updated: 2026-06-15

Heartbeat monitors are designed for work that runs on a schedule (cron jobs, background workers, backups, sync tasks). Instead of us checking an endpoint, your job pings us. If we don’t receive a ping within the expected interval + grace period, we alert you.


When to use heartbeats

Use heartbeat monitors for:

  • Cron jobs (nightly backups, reports)
  • Scheduled tasks (queues, workers)
  • ETL/data syncs
  • Any job that should run regularly and “phone home”

If you need to monitor a website/API uptime, use regular monitors instead.


How it works

  1. Create a heartbeat monitor from the heartbeat dashboard. Edit or delete existing monitors via the icons on each row.
  2. Copy its unique ping URL.
  3. Add a curl/HTTP request to your job after it completes successfully.
  4. We mark it healthy when pings arrive on time; missed when they don’t.

Ping URL (public endpoint)

The ping endpoint is intentionally public so cronjobs can call it directly.

  • GET and POST are supported.
  • The token is the secret (treat it like a password).

Endpoint:

https://statuspage.me/api/heartbeat/{token}

Simple GET ping

curl -s https://statuspage.me/api/heartbeat/{token} > /dev/null

POST ping with optional metadata

You can attach small JSON metadata (up to ~4KB) for later troubleshooting.

curl -s -X POST https://statuspage.me/api/heartbeat/{token} \
  -H "Content-Type: application/json" \
  -d '{"job":"daily_backup","records":1234,"duration_ms":45678}' > /dev/null

Response

{
  "status": "ok",
  "message": "Ping recorded"
}

If the token is unknown, the endpoint returns 404.


Expected interval & grace period

Each heartbeat has:

  • Expected interval: how often you expect pings (e.g. every 5 minutes, every 24 hours)
  • Grace period: extra buffer before marking it missed (default: 5 minutes)

If you leave expected interval empty, we’ll auto-infer it from the first few pings. This is ideal when a job is “about every N minutes” but may drift slightly.


Status meanings

  • Pending: waiting for the first pings
  • Healthy: receiving pings on time
  • Missed: no ping within expected interval + grace
  • Paused: manually disabled

Monitor dashboard

The heartbeat monitor list page (/user/heartbeats) provides real-time visual feedback on all your heartbeat monitors.

Quota usage

A progress bar at the top of the page shows how many heartbeat monitors you’re using against your plan’s limit (e.g., “2 / 15 heartbeats used”). The bar changes color as you approach the limit:

  • Green — under 60% used
  • Yellow — 60–85% used
  • Red — over 85% used (near quota)

If you reach the quota, you’ll need to delete an existing monitor before creating a new one.

Live auto-refresh

Heartbeat rows update in real time — no page reload needed. Every 15 seconds the page polls for fresh data and refreshes:

  • Status badges — Healthy / Missed / Pending / Paused
  • Last ping times — relative timestamps with color coding (green when on-time, yellow approaching deadline, red when missed)
  • Next expected countdown — a live countdown timer showing “in 34s” or “12s overdue” that ticks every second, color-coded green → yellow → red
  • Delta sparkline — an inline SVG mini-chart showing the last 20 ping deltas (seconds between pings) as a smoothed curve; hover over any data point to see the exact delta value (e.g., “5m 5s”)
  • Delta bar — a thin progress bar showing elapsed time since the last ping vs. the total deadline (interval + grace), color-coded from green through yellow to red

Refresh pauses automatically when the browser tab is hidden to avoid unnecessary requests.

Editing & deleting

Edit or delete any heartbeat monitor directly from the row:

  • Edit (pencil icon) — opens a Bootstrap form modal pre-filled with current settings (name, description, interval, grace, visibility, auto-infer). Save changes and the row updates in place without reloading the page.
  • Delete (trash icon) — opens a confirmation dialog. Deleting permanently removes the monitor and all ping history.

Detail view

Click any heartbeat name to open the detail page (/user/heartbeats/:id), which provides deeper insight into a single monitor.

Delta chart

A time-series area chart (ApexCharts) shows delta_seconds over your last ~100 pings. The chart includes:

  • A smooth gradient fill showing the trend of ping intervals
  • A dashed reference line at your expected interval (amber) so you can spot drift at a glance
  • Hover tooltips with exact delta values and timestamps
  • If deltas consistently exceed the expected interval by a large margin, the chart area turns red to draw attention

Live pings table

Recent pings appear in a table with relative timestamps, delta values, source IPs, and user agents. The table auto-refreshes every 15 seconds — new pings appear without reloading the page.

Status card

The sidebar status card shows the current countdown (“in 12s” or “45s overdue”), sample count, and basic configuration — all updating in real time.


Alerts & notifications

Heartbeat alerts use your status page’s configured notification channels.

Common workflow:

  • Get alerted when a heartbeat becomes missed
  • Get a recovery notification when a ping arrives again

Escalation reminders (still-missed alerts)

If a heartbeat stays missed for an extended period, you’ll receive escalation reminders even without a new ping:

Reminder stageFires after
Stage 11 hour since first missed
Stage 224 hours since first missed

This ensures your team isn’t silently waiting for a recovery that never comes. The reminder stage resets automatically when a ping arrives.

Interval drift alert

Before a heartbeat is fully missed, we track whether each ping is arriving progressively later than expected. If five consecutive pings show a monotonically increasing delta and the latest delta is more than 80% of the expected interval, a heartbeat drift warning fires.

This catches cron jobs or background workers that are degrading — running slower each cycle — before they miss an interval entirely.

The drift alert has a 6-hour cooldown per monitor to avoid repeated noise.

See also:


Troubleshooting

  • Getting 404 Heartbeat not found: the token is wrong, rotated, or belongs to another environment.
  • Still showing missed even though job runs:
    • ensure the ping runs after the job succeeds
    • check networking/DNS from the job environment
    • confirm the job is hitting the correct base URL for your account/region
  • Accidental token leak: regenerate the token in the heartbeat settings and update your job.

Security notes

  • The ping endpoint is public by design.
  • The token is high-entropy and should be kept secret.
  • Avoid logging the full ping URL in CI/CD output.
  • Rotate/regenerate tokens if you suspect exposure.
Was this article helpful?