Everything in the dashboard is a REST call. Keep your monitors in git and reconcile from CI. Trigger checks on deploy and post them to pull requests. Connect Claude Code or Cursor and ask in plain English. One org-scoped key does all of it.
clean REST API · single self-hostable binary · your data, your rules
Monitors, groups, incidents, on-call, policies, channels, status pages, maintenance windows — all of it behind a clean, predictable REST API with org-scoped Bearer keys and team roles.
# list your monitors curl -H "Authorization: Bearer $KEY" \ https://uptime.ooo/api/v1/monitors # create one curl -X POST -H "Authorization: Bearer $KEY" \ -d '{"name":"api","type":"http", "target":"https://api.acme.com/health"}' \ https://uptime.ooo/api/v1/monitors
Export the account to a JSON file, commit it, and reconcile from CI. apply creates and updates monitors to match the file — matched by name, idempotent, and it never deletes. Review changes in a pull request like any other code.
monitor export -o monitors.json # commit this monitor apply -f monitors.json --dry-run create checkout-flow (browser …) update api-health (http …) plan: 1 to create, 1 to update, 3 untouched monitor apply -f monitors.json ✓ applied
Trigger a check the instant CI ships instead of waiting for the interval — and post the result straight onto the pull request as a commit status. A single monitor or a whole suite.
curl -X POST -H "Authorization: Bearer $KEY" \ -d '{"github":{"repo":"you/app", "sha":"'$GITHUB_SHA'"}}' \ https://uptime.ooo/api/v1/groups/<id>/run ● uptime.ooo / release suite pending ✓ uptime.ooo / release suite all 4 checks passed
Connect Claude Code, Cursor, or any MCP client and ask about your monitors in plain English. The agent can read status, incidents, and who's on call — and act reversibly: run a check, pause, resume, acknowledge, open a monitor. There are no delete tools.
{
"mcpServers": {
"uptime": {
"command": "monitor",
"args": ["mcp"],
"env": { "UPTIME_API_KEY": "mk_…" }
}
}
}
# "which monitors are down, and who's on call?"
Hosted, or the exact same binary on your own boxes.
The whole control plane — API, dashboard, scheduler, workers — is one Go binary plus Postgres. Docker Compose up and you're running.
Run probe agents in any region and alert only when a quorum agrees it's down. Bring your own boxes; mix providers for ASN independence.
Probes can't be turned against your internal network or cloud metadata. Self-hosters watching a LAN can opt in explicitly.
No third-party analytics on your monitoring data. Two-factor auth, argon2id, org-scoped keys, and team roles built in.
free plan · full API access · self-host anytime