Get from zero to first monitor in under 3 minutes
Get an API key
Section titled “Get an API key”Sign in with GitHub, create a key, and label it for your environment.
Authorization: Bearer umk_live_...- Go to app.uptimemonitoring.com
- Sign in with GitHub
- Create an API key and label it (e.g.
ci-prod,local-dev,mcp)
Create your first monitor
Section titled “Create your first monitor”curl -X POST https://api.uptimemonitoring.com/api/v1/monitors \ -H "Authorization: Bearer $UPTIMEMONITORING_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"myapp","url":"https://myapp.com/healthz","type":"http"}'The hostname must resolve at creation time — typos and unreachable targets fail immediately. The response wraps the monitor record and its first state snapshot:
{ "monitor": { "id": 1287, "name": "myapp", "url": "https://myapp.com/healthz", "type": "http", "interval_sec": 60, "expected_status": "200", "enabled": true }, "state": { "status": "up", "last_check_at": "2026-05-07T10:21:01Z", "evidence_buffer": [ { "region": "EU", "status_code": 200, "ttfb_ms": 182 } ] }}Capture the ID for the rest of the Quickstart:
MONITOR_ID=1287Check current status
Section titled “Check current status”Capture the monitor ID from the create response, then poll it:
curl https://api.uptimemonitoring.com/api/v1/monitors/$MONITOR_ID \ -H "Authorization: Bearer $UPTIMEMONITORING_API_KEY"Add a webhook
Section titled “Add a webhook”Webhooks are account-level recipients, reusable across any number of monitors — not scoped to one monitor. Create one:
curl -X POST https://api.uptimemonitoring.com/api/v1/recipients \ -H "Authorization: Bearer $UPTIMEMONITORING_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"ops-webhook","type":"webhook","config":{"url":"https://hooks.example.com/incident"}}'The response includes the recipient’s id and a plaintext secret — copy the secret now, since no later read of this recipient returns it. Capture the ID:
RECIPIENT_ID=42PUT on a monitor’s recipients replaces the complete set, so read the monitor’s current recipients first — a brand-new monitor can already carry the account’s default recipients:
curl https://api.uptimemonitoring.com/api/v1/monitors/$MONITOR_ID/recipients \ -H "Authorization: Bearer $UPTIMEMONITORING_API_KEY"Then submit the full set, adding the new recipient to whatever came back:
curl -X PUT https://api.uptimemonitoring.com/api/v1/monitors/$MONITOR_ID/recipients \ -H "Authorization: Bearer $UPTIMEMONITORING_API_KEY" \ -H "Content-Type: application/json" \ -d '{"recipients":[{"id":'"$RECIPIENT_ID"',"down_delay_s":0}]}'See Webhooks for signature verification and the account-wide /api/v1/webhook-deliveries log, and Choose who gets alerts for the full attach/detach model. The older PUT /api/v1/monitors/{monitorID}/webhook endpoint still works but is deprecated — see Legacy monitor-scoped webhook endpoint.
Connect via MCP
Section titled “Connect via MCP”Set up UptimeMonitoring as an MCP server in your preferred tool:
- Claude — Add the MCP server in Claude Desktop settings or Claude Code
- ChatGPT — Configure via the ChatGPT plugin/MCP settings
- Cursor — Add to
.cursor/mcp.json - OpenAI API — Use the MCP endpoint in your tool configuration
See the MCP docs for detailed setup instructions per host.
Use in GitHub Actions
Section titled “Use in GitHub Actions”- name: Verify deploy health uses: uptimemonitoring/assert-healthy@v1 with: api-key: ${{ secrets.UPTIMEMONITORING_API_KEY }} monitor-id: ${{ vars.MONITOR_ID }} timeout: 120This step waits up to 120 seconds for the monitor to report healthy, then fails the workflow if it doesn’t recover. See the GitHub Action docs for advanced options.