quickstart
from nothing to a monitored job in about a minute. free for 2 projects with unlimited jobs; no credit card, no trial timer.
1. sign in and grab an API key
sign in (magic link or oauth, one click) and create a project. the project comes with an API key; copy it. a key can only send heartbeats, never read data, so it's safe to put in a cron job's environment.
2. add one line to the end of your job
# at the end of your cron job, backup script, whatever:
curl -fsS -X POST https://heartbeet.page/nightly-backup \
-H "Authorization: $HEARTBEET_API_KEY"that's the whole integration. the first heartbeat creates the job; there is no registration step, no dashboard form, no interval picker. any name you put in the path becomes a real monitored job, and that stays true forever: the tenth job is one invented name in a PR, and it just shows up, already watched, on the dashboard that's been glowing on the TV in the hall since week one. monitoring grows with the code instead of trailing behind it.
3. there is no step 3
the beets learn the job's rhythm from its heartbeats: a job that runs nightly is expected nightly, a flaky one that drifts a few minutes gets the slack it needs, a metronomic one gets a tight leash. when a heartbeat stays missing past the job's usual rhythm and grace period, you get an email.
worth knowing early
- slow jobs: before the second heartbeat the beets have nothing to learn from, so a brand-new job is bounded by the project's cold-start window (24h by default; daily jobs fit). for a weekly or monthly job, send a hint on the first heartbeat:
?hint=weekly. a hint is a prior, not a setting: real heartbeats outweigh it quickly, though it keeps a little influence while the job's history is short. - deploys and maintenance: pausing is its own command, never folded into a heartbeat:
POST /pause/nightly-backup?wait=30m, or pause a whole tag at once withPOST /pause?tag=api. after a pause the beets wait one normal heartbeat window before paging again. - tags: label heartbeats with
?tag=prod&tag=api; tags drive grouping, muting, and (on the team plan) who gets paged for what. - POST, not GET: heartbeats are POST-only on purpose; link previewers in Slack or email GET every url they see, and a monitor whose premise is "this job is actually alive" shouldn't believe a link unfurler.
next
- how it works: what the beets learn and when they page.
- the full API: hints, tags, idempotent retries, pausing.