API reference
Automate your monitors.
Every API request uses a bearer key generated in Settings. Responses use JSON and standard HTTP status codes.
Authentication
Bearer token
Send your API key in the Authorization header. Invalid or revoked keys return 401.
curl https://es-uptime.vercel.app/api/v1/clients \ -H "Authorization: Bearer esu_your_key"Clients
List and create clients
GET /api/v1/clients lists all clients. POST /api/v1/clients creates one.
curl -X POST https://es-uptime.vercel.app/api/v1/clients \ -H "Authorization: Bearer esu_your_key" \ -H "Content-Type: application/json" \ -d '{ "name": "Acme Studio", "contact_email": "hello@acme.example", "slug": "acme-studio", "monthly_report_enabled": true, "public_status_enabled": false }'Monitors
List and create monitors
GET /api/v1/monitors accepts an optional client_id query. POST /api/v1/monitors creates a monitor.
curl -X POST https://es-uptime.vercel.app/api/v1/monitors \ -H "Authorization: Bearer esu_your_key" \ -H "Content-Type: application/json" \ -d '{ "client_id": "00000000-0000-0000-0000-000000000000", "name": "Main website", "monitor_type": "http", "url": "https://example.com", "interval_minutes": 10, "expected_status": 200, "keyword": null, "timeout_seconds": 10, "active": true, "alert_emails": ["you@example.com"] }'Heartbeats
Monitor scheduled jobs
Create a monitor with monitor_type: "heartbeat" and no URL. The response contains a heartbeat_token. Ping its public endpoint after every successful job.
curl https://es-uptime.vercel.app/api/heartbeat/HEARTBEAT_TOKENManage
Update, delete and inspect status
- PATCH /api/v1/monitors/:id — update any monitor field except client.
- DELETE /api/v1/monitors/:id — delete a monitor and its history.
- GET /api/v1/monitors/:id/status — state, p95 response time and 24-hour, 7-day and 30-day uptime.
curl -X PATCH https://es-uptime.vercel.app/api/v1/monitors/MONITOR_ID \ -H "Authorization: Bearer esu_your_key" \ -H "Content-Type: application/json" \ -d '{"active": false}'Bulk create
Create up to 100 monitors
POST /api/v1/monitors/bulk accepts a monitors array. The full request is rejected with 409 if a URL is duplicated for one client.
curl -X POST https://es-uptime.vercel.app/api/v1/monitors/bulk \ -H "Authorization: Bearer esu_your_key" \ -H "Content-Type: application/json" \ -d '{"monitors": [{ ... }, { ... }]}'Errors
Response codes
400 means invalid input, 401 means the API key is missing or invalid, 404 means the resource does not exist, and 409 means the client slug or client URL is already in use.