API Reference
The Upwatch REST API lets you manage monitors, query check results, and access uptime data programmatically.
Base URL:https://app.upwatch.dev/api
Auth:Pass Authorization: Bearer YOUR_JWT_TOKEN on all protected endpoints.
Authentication
/api/auth/registerPublicCreate a new account. Returns JWT access and refresh tokens.
Request Body
Response 201
/api/auth/loginPublicAuthenticate with email and password. Returns JWT tokens.
Request Body
/api/auth/refreshExchange a refresh token for a new access/refresh token pair. Pass the refresh token as Authorization: Bearer REFRESH_TOKEN.
/api/auth/meReturns the authenticated user's profile: id, email, name, slug, created_at.
Monitors
/api/monitorsList all monitors for the authenticated user. Each includes current status (up/down/unknown) and latest check result.
/api/monitorsCreate a new monitor. Checks start immediately.
Request Body
/api/monitors/:idGet monitor detail including recent checks, active incident, and current status.
/api/monitors/:idUpdate monitor settings. Only send fields you want to change. Scheduler automatically reschedules with new settings.
/api/monitors/:idDelete a monitor and stop all checks. Returns 204 on success. Check history is retained.
Checks & Uptime
/api/monitors/:id/checksPaginated check history for a monitor.
Query Params
/api/monitors/:id/uptimeComputed uptime percentages for 24h, 7d, and 30d windows. Cached in Redis for fast reads.
Incidents
/api/incidentsList all incidents across your monitors, sorted by most recent. Includes monitor name, cause, duration, and resolution status.
Query Params
Public Endpoints
/api/status/:slugPublicPublic status page data. No authentication required. Returns the owner name and a list of monitors with name, status, and uptime stats (no URLs or config exposed).
/healthPublicAPI health check. Returns system status, MongoDB connection state, scheduler state, and uptime.
Error Responses
All errors return a consistent JSON format:
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 204 | Deleted (no content) |
| 400 | Invalid input / validation error |
| 401 | Missing or expired token |
| 404 | Resource not found |
| 409 | Conflict (duplicate name/email) |