REST API for uptime monitoring

Everything the dashboard does, the API does, with one project key.

Built for deploy scripts, provisioning, and agents.

  • Create takes a URL and nothing else; interval, thresholds, timeout, and the rest fall to the same defaults the dashboard's form uses. You can set any of them in the same request when you need to.

    The response is the monitor including the result of its first check, so a script knows straight away whether it pointed the monitor at the right thing, and can fail the deploy if it didn't.

  • POST /v1/monitors/test runs one check against a draft config without saving anything. Validate a URL, a header, a content rule, or an expected status before the monitor exists, and see the same latency breakdown a real check would log.

    It's how you answer "will this monitor pass?" in CI before you create it, and how an agent checks its own work.

  • A rollback script mutes the monitor for the hour it takes, a teardown deletes the one for the service that no longer exists, a migration pauses checks with enabled: false and turns them back on after. Each is one call.

    Mute suppresses down-detection and alerts until the time you set, capped at seven days; 0 clears it. The monitor keeps its history through all of it.

  • Keys are minted per project, in its Settings under Access tokens, optionally with an expiry. A key can read and write that project's monitors; account-level endpoints reject it, and it can never create more keys.

    That's the shape a deploy pipeline or an agent should hold: enough to watch what it ships, not enough to reach anything else. Revoke it from the same list the moment you're done with it.

Authenticate with a project key

The API authenticates with project API keys, revocable tokens that start with upk_. Create one in your project's Settings under Access tokens; the full key is shown once, at creation. Send it as a Bearer token on every request.

Every endpoint is documented from the API's own OpenAPI document, served at /openapi.json, so the reference always matches the deployed backend and any generator or typed HTTP client can be pointed straight at it. Errors come back as JSON with an error code you can branch on: monitor_limit means your plan's cap, rate_limited means slow down.

More for developers.

Your agents get the same API your engineers do.

A remote MCP server with five tools, so Claude or an agent you build can register, check, pause, and remove monitors on its own.

A POST to your endpoint when state changes.

The generic webhook carries a structured envelope, once when a monitor breaks and once when it recovers. Free on every plan.

A reference generated from the API itself.

Every endpoint, parameter, and schema comes from the OpenAPI document the API serves, so the docs can't describe a backend that isn't deployed.

One key, one project, revocable any time.

Project API keys authenticate the REST API and the MCP server alike. A key reads and writes its project's monitors and nothing else.

REST API questions

No. Full REST API access with project API keys is included on every plan, the free one included. Plan limits still apply: if a create fails with monitor_limit, you've hit your plan's monitor cap.

Exactly one project. A key reads and writes that project's monitors and nothing else; account-level endpoints reject API keys, and a key can never create more keys.

Yes, generated from the API's own OpenAPI document, so it always matches the deployed backend. The document itself is served at /openapi.json for generators and typed clients.

Yes. POST /v1/monitors/test runs one check against a draft config without saving anything, so you can validate a URL, headers, or content rules before the monitor exists.

Yes, per account: 30 requests a minute on Free, 120 on Pro, and 300 on Team. Over the limit the API answers 429 and tells you when to retry.

Know the second it breaks

Free to start. No credit card.