Authentication

All API requests require a Bearer token in the Authorization header. Generate API keys from your dashboard under Settings → API Keys.

curl https://uptimeclaw.com/api/v1/monitors \ -H "Authorization: Bearer uc_live_abc123def456"

API keys come in two types:

TypePrefixAccess
Liveuc_live_Full read/write access
Read-onlyuc_read_Read access only — cannot create, update, or delete

Base URL

All endpoints are relative to:

https://uptimeclaw.com/api/v1

All responses return JSON with Content-Type: application/json.

Errors

The API returns standard HTTP status codes. Error responses include a JSON body with error and message fields.

// 401 Unauthorized { "error": "unauthorized", "message": "Invalid or expired API key" }
CodeMeaning
200Success
201Created
400Bad request — check parameters
401Unauthorized — invalid API key
404Not found
429Rate limited — 100 requests/min
500Server error

List monitors

Returns all monitors for your account, ordered by creation date.

GET /monitors

Query parameters

ParameterTypeDescription
statusstringFilter by status: up, down, paused
typestringFilter by type: http, keyword, ping, port
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 25, max: 100)
# List all monitors curl https://uptimeclaw.com/api/v1/monitors \ -H "Authorization: Bearer uc_live_***" # Response { "data": [ { "id": 1842, "name": "Production API", "url": "https://api.example.com/health", "type": "http", "status": "up", "interval": 60, "last_checked_at": "2026-03-22T21:14:00Z", "response_time": 142 } ], "meta": { "total": 47, "page": 1, "per_page": 25 } }

Create monitor

Create a new monitor. It starts checking immediately after creation.

POST /monitors

Body parameters

ParameterTypeRequiredDescription
urlstringYesURL or hostname to monitor
namestringNoDisplay name (defaults to URL)
typestringNohttp, keyword, ping, port (default: http)
intervalintegerNoSeconds between checks (default: plan minimum)
alertsarrayNoAlert channels: email, whatsapp, webhook
keywordstringConditionalRequired if type is keyword
portintegerConditionalRequired if type is port
curl -X POST https://uptimeclaw.com/api/v1/monitors \ -H "Authorization: Bearer uc_live_***" \ -H "Content-Type: application/json" \ -d '{ "url": "https://api.example.com", "name": "Production API", "type": "http", "interval": 60, "alerts": ["whatsapp", "email"] }' # 201 Created { "id": 1843, "status": "active", "next_check_at": "2026-03-22T21:15:00Z" }

Get monitor

Retrieve a single monitor with full details including recent checks.

GET /monitors/:id

Update monitor

Update an existing monitor's configuration. Only include the fields you want to change.

PUT /monitors/:id

Delete monitor

Permanently delete a monitor and all its historical data. This action cannot be undone.

DELETE /monitors/:id

Alert channels

List all configured alert channels for your account.

GET /alerts/channels

Configure alerts

Update alert settings for a specific monitor.

PUT /monitors/:id/alerts
curl -X PUT https://uptimeclaw.com/api/v1/monitors/1842/alerts \ -H "Authorization: Bearer uc_live_***" \ -d '{ "channels": ["whatsapp", "email", "webhook"], "webhook_url": "https://hooks.slack.com/services/T00/B00/xxx", "escalation_minutes": 5 }'

List status pages

Retrieve all status pages for your account.

GET /status-pages

Create status page

Create a new public or private status page linked to your monitors.

POST /status-pages

Webhook events

UptimeClaw sends webhook events for monitor state changes. Configure webhook URLs per monitor or globally.

EventTrigger
monitor.downMonitor detects downtime
monitor.upMonitor recovers from downtime
monitor.degradedResponse time exceeds threshold
ssl.expiringSSL certificate expiring within 30 days

Webhook payloads

All webhooks are sent as POST requests with a JSON body and a X-UptimeClaw-Signature header for verification.

// monitor.down payload { "event": "monitor.down", "timestamp": "2026-03-22T21:14:00Z", "monitor": { "id": 1842, "name": "Production API", "url": "https://api.example.com/health", "status_code": 503, "response_time": null, "region": "us-east-1" } }