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 | |
|---|---|---|---|
| Monitors | 5 | 50 | 200 |
| Interval floor | 5 min | 1 min | 1 min |
| History | 30 days | 90 days | 90 days |