Create your first monitor
Three minutes from sign-up to your first multi-region check.
Create your first monitor
Sign in or sign up
Go to happyuptime.com/sign-up. Email + password, or Google OAuth.
Decide what to check
The fastest path is an HTTP check against your homepage or /health endpoint. If your service is internal, pick heartbeat instead.
Create the monitor
Click + New monitor in the dashboard sidebar. Pick HTTP, paste your URL, leave defaults (60s interval, 3 regions on free, no assertions). Click Test to confirm the URL is reachable, then Create.
bashnpm i -g happyuptime-clihappy loginhappy monitors create \ --name "My App" \ --url https://myapp.com \ --interval 60
bashcurl -X POST https://happyuptime.com/api/v1/monitors \ -H "Authorization: Bearer hu_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "name": "My App", "url": "https://myapp.com", "type": "http", "interval_seconds": 60 }'
Confirm it's running
Within 60 seconds your monitor will receive its first check from each configured region. Refresh the monitor detail page — you should see a green status, response time, and a timing waterfall (DNS / connect / TLS / TTFB / transfer).
Wire up alerts (recommended)
A monitor without alerts is just a dashboard. Set up at least one channel:
What gets checked
For an HTTP monitor with default settings:
- TCP connect succeeds
- TLS handshake succeeds
- Response status is 2xx (override with
expected_status_codes) - Response received within 30s (override with
timeout_ms)
If the page contains a marketing iframe or a payment widget you want to verify rendered correctly, enable visual regression.
Common gotchas
Three causes most often:
- Your firewall blocks Cloudflare Worker IPs. Add
*.cloudflare.comegress to your allowlist. - Your site requires a
User-Agentthat isn'tMozilla/.... Add a custom header. - Your site is geo-blocked from one of the regions. Disable that region or pick a different one.
Increase the confirmation period. Either set confirmation_period_s: 120 (require 2 minutes of consistent down) or remove a flaky region.
Set maintenance_start / maintenance_end (HH:MM) and maintenance_days ([1,3] for Mon/Wed). Checks within the window return unknown, no alerts.