UptimeRobot's free plan is the most generous headline number in uptime monitoring: 50 monitors, checked every 5 minutes, no credit card. If you want a dashboard watching production websites, it's the deserved default and this page will say so again below. What their free plan doesn't include is the alert plumbing most automation actually wants: webhook alerts sit on the Team plan (from β¬35β41/month), Slack alerts start on Solo (paid), and heartbeat/cron-job monitoring is paid-only. And everything begins with a dashboard signup.
This page is the other way around: one curl arms a monitor with a webhook that fires once on down and once on recovery β Slack and Discord formats auto-detected, everything else HMAC-signed JSON β plus a public status page, README badge and Atom feed. No account anywhere in the loop. Small free capacity, honestly stated below.
Facts from their own pricing page, September 2026 (they even publish a machine-readable pricing.md for AI agents β genuinely commendable): Free = 50 monitors at 5-minute intervals, HTTP/port/ping/keyword checks, 1 basic status page, and 5 alert integrations (Google Chat, Discord, Pushover, Pushbullet, Splunk). Their management API is included even on Free. Paid plans buy faster checks (60s/30s/15s), SSL and domain-expiry monitoring, heartbeats, maintenance windows β and the integrations most teams pipe alerts through: Slack from Solo (from β¬9β10/mo), webhooks/Zapier/PagerDuty from Team (from β¬35β41/mo). Verify current numbers yourself; pricing moves.
If you're monitoring a production website fleet and living in a dashboard, sign up there. The gap this page fills: you're in a terminal, a CI job, or you're a script or agent that wants a machine-readable alert contract right now β and you'd rather not put "get a webhook when it breaks" behind a team-tier subscription.
curl -X POST https://mockbird.mockbird.workers.dev/api/status/monitor \
-H 'content-type: application/json' \
-d '{"url":"https://api.example.com/health","notify":"https://hooks.slack.com/services/T000/B000/XXXX"}'
We GET your URL every 30 minutes from Cloudflare's network (8s timeout, redirects followed, 2xx/3xx = up). The response contains everything: the current check result (your URL is probed immediately), a secret for managing the monitor, and three public artifacts β
No webhook handy? Both work webhook-less: omit notify and the create response includes a poll URL that returns the transitions since your last poll (plus the current state) — no endpoint to host. How poll mode works.
{
"id": "mon-XXXX",
"secret": "β¦",
"current": { "ok": true, "http_status": 200, "ms": 87 },
"checked_every_minutes": 30,
"status_page": "https://mockbird.mockbird.workers.dev/status/mon-XXXX",
"badge_svg": "https://mockbird.mockbird.workers.dev/status/mon-XXXX/badge.svg",
"feed_atom": "https://mockbird.mockbird.workers.dev/status/mon-XXXX/feed.xml"
}
The status page and badge are public but live at unguessable URLs and show the hostname only. Drop the badge in a README:
[](https://mockbird.mockbird.workers.dev/status/mon-XXXX)
notify takes a Slack incoming webhook, a Discord webhook, or any HTTPS endpoint β the format is sniffed from the host: hooks.slack.com gets {"text": β¦}, discord.com/api/webhooks gets {"content": β¦}, and anything else gets JSON signed with your monitor's secret (x-mockbird-signature: sha256=hex(hmac-sha256(secret, body)) β verify it like a Stripe webhook). A confirmation delivery hits your webhook at create time so you know the channel works before you rely on it.
Alerting is deliberately quiet: one POST when the URL goes down, one when it recovers, debounced β two consecutive checks must agree, so a single blip never pages you. No retries, best-effort delivery, and 5 consecutive failed deliveries auto-remove the monitor (a dead webhook can't rot forever).
On UptimeRobot, heartbeat monitoring β "my job pings you; alert me when the pings stop" β starts on the Solo plan. Here it's the same one-curl pattern:
curl -X POST https://mockbird.mockbird.workers.dev/api/status/heartbeat \
-H 'content-type: application/json' \
-d '{"name":"nightly backup","period_minutes":1440,"notify":"https://hooks.slack.com/services/T000/B000/XXXX"}'
The response includes a secret ping URL; append && curl -fsS -m 10 <ping_url> to the cron job so it only checks in on success. Miss the period + grace, one service.down fires; resume, one service.up. Full walkthrough with crontab/systemd/GitHub Actions recipes: cron-job monitoring with one curl β and the two-curls-together story is the Cronitor page.
UptimeRobot is launching "3rd party service monitoring" β alerts when services you depend on go down β in September 2026, on paid plans (1β5 services on Solo, 20 on Team, per their pricing page). We already run a public tracker of 50+ developer APIs (JSONPlaceholder, ReqRes, httpbin, DummyJSON, GitHub, npm and friends) at /status, and subscribing an alert to any of them is free and doesn't use a monitor slot:
curl -X POST https://mockbird.mockbird.workers.dev/api/status/watch \
-H 'content-type: application/json' \
-d '{"service":"reqres","url":"https://hooks.slack.com/services/T000/B000/XXXX"}'
Any id from /status.json works, or "*" for all of them. Same formats, same one-down-one-up contract.
| UptimeRobot concept | Here |
|---|---|
| HTTP(s) monitor | POST /api/status/monitor {"url": β¦, "notify": β¦} β no account, response includes current check |
| Alert contact / integration | notify webhook β Slack/Discord formats auto-detected, else HMAC-signed JSON (webhooks are Team-plan there) |
| Heartbeat monitor (Solo+) | POST /api/status/heartbeat β free, secret ping URL, dead man's switch |
| Status page | /status/mon-XXXX β public, unguessable URL, hostname-only; badge.svg + Atom feed alongside |
| Dependency monitoring (Sept '26, paid) | POST /api/status/watch against 52 already-tracked dev APIs β free, no slot |
| Dashboard | None β GET /api/status/monitor/:id?secret=β¦ returns info, 24h ok-rate and recent checks as JSON |
| Management API | Same URLs you created with; both endpoints self-document on a bare GET |
Facts checked September 2026 against UptimeRobot's own pricing page β verify current numbers yourself:
| Free tier | Pick it when | |
|---|---|---|
| UptimeRobot | 50 monitors, 5-min checks, HTTP/port/ping/keyword, 1 basic status page, 5 integrations (no Slack, no webhooks), API access; Slack from Solo (β¬9β10/mo), webhooks/PagerDuty from Team (β¬35β41/mo), heartbeats paid | You're watching production websites and want a real dashboard, mobile app, history and many monitors β the generous default choice. |
| StatusCake | 3 monitors, 15-min checks, HTTP(S) only, email to 1 address; webhooks/Slack/integrations from $24.49/mo (details) | Far fewer free monitors than UptimeRobot, but faster free checks than ours β and email is enough. |
| Site24x7 | 1-min checks (faster than anyone's free tier), email alerts, 1 status page; webhooks from ~$36/mo (details) | Fastest free detection interval in the category β and email is enough. |
| OnlineOrNot | 3 monitors, 3-min checks, free Slack/Discord/Telegram alerts β rare at $0; raw webhooks from $15/mo (details) | Your alert destination is a chat channel β the rare free tier that covers that. |
| Better Stack | 10 monitors + 10 heartbeats, 3-min checks, Slack + e-mail alerts, 1 status page (details) | You want the most generous free package in the category and a signup is fine. |
| Hyperping | 20 monitors, 5-min checks from 18 regions, free Slack + Teams alerts + cron healthchecks; API paid-only (details) | You want free chat alerts and multi-region checks in a polished dashboard. |
| Checkly | 10 monitors, 2-min checks, free Slack + signed-webhook alerts, 10k API + 1k Playwright runs/mo, MCP/CLI/Terraform free β account + API key required (details) | An account is fine and you want the strongest free tier + Playwright synthetics. |
| Mockbird | URL monitors: 3 live per IP (deleting frees the slot), 30 total, 30-min checks. Heartbeats: 5 live per IP. Webhook + Slack + Discord alerts, status page/badge/feed β all free, no account. | You want the webhook alert armed this minute from a terminal, CI step, script or agent β and the alert channel matters more than the check frequency. |
Where UptimeRobot wins, plainly: 50 monitors to our 30-total free capacity, 5-minute detection to our 30, port/ping/keyword checks (we only GET URLs), multi-location probes, SMS/voice/mobile push, incident history and retention, status page customization, and a decade of production trust at seven-million-monitor scale. We do: one curl, no signup, one webhook down + one up, HMAC-signed payloads, public status artifacts, and cron heartbeats β all at the price their free tier charges for none of it.
# info + 24h ok-rate + recent checks Β· then stop
curl "https://mockbird.mockbird.workers.dev/api/status/monitor/mon-XXXX?secret=YOUR_SECRET"
curl -X DELETE "https://mockbird.mockbird.workers.dev/api/status/monitor/mon-XXXX?secret=YOUR_SECRET"
Both endpoints are self-documenting: GET /api/status/monitor and GET /api/status/heartbeat return full usage as JSON. The complete walkthrough of the monitor feature is the uptime monitor API guide.