heartguard

Docs

One endpoint to register, a worker that does the rest.

Create a monitor

curl -s -X POST http://localhost:8115/api/monitors \
  -H "Content-Type: application/json" \
  -d '{"email":"you@saas.dev","name":"api","url":"https://api.saas.dev/healthz"}'

# 201 -> { "id": "...", "token": "...", "status": "up" }
# the first probe runs immediately

The owner token authorizes reads, deletes, pause/resume, and webhook configuration for that monitor.

Probe behavior

  • HEAD first; servers rejecting HEAD get a GET fallback.
  • Any 2xx/3xx counts as up unless you set an exact expected_status.
  • TTFB recorded per check (status + timing only, no content stored).
  • SSRF guards block private-network targets; robots respected.

Incidents and alerts

Two consecutive failed checks open an incident and fire DOWN alerts (email on Free, email plus webhook on Pro). The first successful check closes the incident with its duration attached and fires RECOVERED. Single blips never page you.

API

GET  http://localhost:8115/api/monitors?email=you@saas.dev
GET  http://localhost:8115/api/monitors/{id}/history?days=7   (Bearer token)
POST http://localhost:8115/api/monitors/{id}/pause|resume|check

Plan limits

Free Pro $19/mo Team $49/mo
Monitors550200
Interval floor5 min1 min1 min
History30 days90 days90 days