Docs
Everything you need to connect a project to Status, expose a working /api/health endpoint, and surface the results on your own site.
What Status does
Status is a per-project uptime board. Each monitored project exposes a tiny HTTP health endpoint (usually /api/health). A poller calls that endpoint every 5 minutes, records one result per sub-component, and Status publishes a live page per project (/p/[slug]) with uptime bars, a one-year incident calendar, and a JSON API you can embed anywhere.
Connecting a project is a two-part job:
- You expose a working GET /api/health endpoint (see the contract and code examples).
- Us register the project (name + slug + health URL) in the Status /admin console — the next poll picks it up automatically.
How a check works
every 5 minutes
│
▼
Cloudflare cron Worker ──POST /api/poll (x-poll-secret)──▶ Status (Vercel)
│
loops each enabled project, │
fetch(healthUrl) with a 15s timeout │
│ │
▼ ▼
your store / service Supabase „checks" rows
GET /api/health ──► JSON ▲
│
public pages + /api/status/[slug] read this
One checks row is stored per component per poll. The status app is poll-driven — there is no agent, no SDK, and nothing installed on your server.
What you need to provide
| Requirement | Notes |
|---|---|
| https:// public URL | Health URLs are enforced to HTTPS. No localhost, no internal IPs. |
| Responds within 15s | Anything slower is treated as unreachable (marked down). |
| Valid JSON body | { "status": "ok", "results": [...] } — see the contract. |
| No auth required | The endpoint must be callable anonymously (like a status/health check should be). |
Getting started
Step-by-step from zero to a monitored, live project page.
Health endpoint contract
The exact JSON schema, statuses, latency rules, and failure handling.
Code examples
Reference implementations: Next.js, Express, Laravel, static JSON.
Link, embed & JSON API
Sharing options: badge link, iframe, and the public JSON endpoints.
Troubleshooting & FAQ
Common pitfalls, edge cases, and how to debug a broken check.