Docs & examples
What to watch, and how.
Holter watches two ways. Inbound heartbeats — your jobs ping us when they finish, and we alert if a ping goes missing. Outbound checks — we request your URL, cert, port or DNS from the outside on a schedule. No server agent, no access to your servers. And on Business, dependencies — we watch the status pages of the vendors you rely on, so you hear about their outages first.
Inbound heartbeats
A dead-man switch: ping us on success, and we alert if it goes quiet. Great for backups, queue workers, crons, pipelines and webhooks.
1 · Create your inbound heartbeat
How Holter watches
Name
Alert if no ping in
Your ping URL
Holter generates this — copy it from the dashboard.
2 · Then curl it from your job
# success — at the end of the job
pg_dump … | gzip | aws s3 cp - s3://… \
&& curl -fsS "$HOLTER_URL"
# failure — alert right away
curl -fsS "$HOLTER_URL/fail"
Miss the window and Holter opens an incident and alerts your channels. Same pattern for queue workers (ping every few minutes) and crons (append the curl to the line).
Prefer email? Switch the heartbeat to a unique address (…@in.holter.sh) and have your app send to it on a schedule. If your mail stops going out, Holter tells you — it watches the whole send pipeline, not just your code.
Outbound checks
We reach your service from the public internet on a schedule — nothing to install. Great for uptime, API health, SSL, domain, DNS and TCP.
Create an outbound check
How Holter watches
What to check
Endpoint
Healthy status
Alert if slower than
What it catches
- ● Down, or the wrong status code
- ● Up but slow past your latency budget (degraded)
- ● Recovered — with the outage duration
Switch What to check to SSL, Domain, DNS or Redirect — same screen, just a URL, no extra fields. Cert and domain checks warn you days before expiry.
Tip: inside Holter, “What to watch” sets any of these up for you in a click.
Watch what you depend on Business
Some outages aren't yours. When Stripe, AWS, your auth provider or database host has an incident, your app feels it — and your customers blame you. Add those vendors as dependencies and Holter watches their public status pages, so you hear it from an alert first.
Add a dependency
Vendor
Status page URL
Or pick from 24 popular vendors we already know how to read.
What depends on this?
Alert me
What it catches
- ● A vendor — or one of its components — reports degraded service
- ● A vendor reports a full outage — alerted to your channels
- ● Recovered — the upstream incident cleared
Holter reads each vendor's own published status page every few minutes — it doesn't probe their systems. Works for any page with a public status feed (most SaaS), with built-in support for AWS, Google Cloud and Azure.
Optionally list chosen dependencies on your own status page as “Upstream services.”
Status badges
Every public status page exposes an embeddable SVG badge — a live snapshot of your status or uptime you can drop into a README, wiki, or your own site. No API key, and it refreshes on its own.
Grab the snippet
Badge URL
Markdown
Uptime variant
Live example
- ✓ Self-updating — reflects your real status within a minute
- ✓ Public and self-contained — renders anywhere an image does
Set it up with your coding agent (MCP)
Rather than fill in the forms above by hand, let your agent do the first pass. Holter runs an MCP server — connect Claude Code, Cursor, or any MCP-capable agent with a team-scoped token and it reads your repo locally, proposes the monitors it finds (crons, queues, health checks, domains), and writes the heartbeat code for you to review.
1 · Add the MCP server
{
"mcpServers": {
"holter": {
"type": "http",
"url": "https://app.holter.sh/api/mcp",
"headers": { "Authorization": "Bearer ${HOLTER_TOKEN}" }
}
}
}
Grab a team-scoped token from Settings → MCP and set it as HOLTER_TOKEN. The token is the only thing the agent needs — it is scoped to your Holter team and carries no access to your code, servers, or cloud.
2 · Then just ask
"Set up Holter monitoring for this repo —
read holter.sh/use and follow it."
- ✓ It reads your codebase locally — Holter never gets your source
- ✓ It proposes the monitors and heartbeat code; you review and apply every change
- ✓ It works through the token, never your keys — it can't touch your systems
Production monitoring checklist
Every line is a 3-minute setup — or one tap from “What to watch” inside the app.
-
Homepage / main app responds
Outbound HTTP check, expect 200
-
API or health endpoint responds
Outbound HTTP check on /health, optionally match a body string
-
Response time within budget
Add an "alert if slower than" latency budget
-
HTTP redirects to HTTPS
Outbound redirect check
-
TLS certificate not near expiry
Outbound SSL check
-
Domain not about to lapse
Outbound domain check (RDAP)
-
DNS still resolves
Outbound DNS check
-
Nightly backup completed
Inbound heartbeat from the backup script
-
Queue workers alive & draining
Inbound heartbeat from a scheduled worker ping
-
Scheduled jobs / crons ran
Inbound heartbeat at the end of each cron
-
Critical pipelines (ETL, billing runs)
Inbound heartbeat on success, /fail on error
-
Transactional email still sending
Inbound email monitor — your app emails a unique address on a schedule
-
Database / cache port reachable
Outbound TCP check (public host:port)
-
Third-party webhooks still firing
Inbound heartbeat from your webhook handler
-
Status page published
Turn one on so customers self-serve during incidents
-
Payment provider status
Add Stripe (or your processor) as a dependency
-
Cloud / hosting provider status
Add AWS, GCP, Azure, Vercel… as a dependency
-
Critical third-party APIs
Add OpenAI, Twilio, SendGrid… — anything core flows need
Start with one check.
Free for 5 monitors, no card. Tick off the rest of the list as you go.
Start watching free