upok.dev — uptime checks with email alerts
GETs a URL every 10 minutes; 2xx = up. Emails you when a check goes down and<br>when it comes back. Every check has a public status page. No signup.
QUICKSTART
1. Key: curl -X POST https://upok.dev/v1/keys<br>2. Check: curl -X POST https://upok.dev/v1/checks -H "Authorization: Bearer KEY" \<br>-H "Content-Type: application/json" \<br>-d '{"url":"https://api.example.com/health","email":"you@example.com"}'<br>3. Status: curl https://upok.dev/v1/checks/ID -H "Authorization: Bearer KEY"
ENDPOINTS
(auth) = "Authorization: Bearer upok_...". Errors: {"error": "..."} with the<br>matching HTTP status. Timestamps: epoch ms.
POST /v1/keys -> 201 {"key"}. Never stored; keep it.<br>POST /v1/checks (auth) body {"url", "email", "name"?} (name 201 check | 400 invalid | 429 over 100 checks<br>GET /v1/checks (auth) -> {"checks": [check, ...]}<br>GET /v1/checks/:id (auth) -> check | 404 if not yours<br>DELETE /v1/checks/:id (auth) -> 204<br>GET /c/:id.json -> check without email fields, plus<br>"incidents": [{started_at, ended_at|null, duration_ms|null, error}]<br>"recent": [{ts, ok, latency_ms, status}] (last 144)<br>GET /c/:id status page (HTML)<br>GET /llms.txt this document
No auth; reached from mails and the landing form:<br>GET /confirm/:account/:token asks first; POST to the same URL enables alerts<br>GET /c/:id/delete/:token asks first; never deletes on GET<br>POST /c/:id/delete/:token deletes the check<br>POST /new form (url, email): key + check in one step
check = {<br>"id", "name", "url", "email", "email_confirmed",<br>"status": "pending" | "up" | "down",<br>"since": ,<br>"last_checked_at", "last_status", "last_latency_ms", "last_error",<br>"uptime": {"24h", "7d", "30d"} (ratio of ok results, null without data)<br>"interval_seconds": 600, "status_url", "created_at"
RULES
- Every 10 minutes, 10 s timeout, redirects followed. 2xx = up; anything<br>else is retried once and the retry is what gets recorded.<br>- Mail only on change: one when down, one when back up.<br>- Alerts need the address confirmed once per key. The first check for an<br>address sends a confirmation link; until it is confirmed, checks run but no<br>mail is sent (email_confirmed: false).<br>- Alert mails carry the status page link and a delete link.<br>- History: 30 days.