Uptimely

API

The /v1 REST API, authentication, limits, and the official TypeScript SDK.

Everything in the dashboard is programmable. The public REST API lives at https://app.getuptimely.com/v1 and covers monitors, incidents, alerts, scheduled maintenance, status pages, on-call, usage, and outbound webhook endpoints — 22 operations, documented in the interactive API reference.

Authentication

Create a key under Settings → API Keys → Public API keys in your project (keys are shown once and stored hashed), then send it as a Bearer token:

curl https://app.getuptimely.com/v1/monitors \
  -H "Authorization: Bearer $UPTIMELY_API_KEY"

Keys are project-scoped and carry the scopes you select at creation.

TypeScript SDK

npm install @uptimely/sdk — typed end to end from the same schemas the API validates with, with built-in retries, idempotency keys and auto-pagination. Source is mirrored at github.com/DevinoSolutions/uptimely-sdk.

import Uptimely from "@uptimely/sdk";

const uptimely = new Uptimely(); // reads UPTIMELY_API_KEY

for await (const monitor of uptimely.monitors.list()) {
  console.log(monitor.name, monitor.status.name);
}

Errors

Every error is an RFC 9457 application/problem+json document with a stable code to branch on and a type URI that resolves to a docs page — for example rate_limited or validation_failed.

Rate limits & quotas

  • Free — read-only API access, 1,000 requests/month, 60 requests/minute burst.
  • Pro — full read + write access and webhook management, 100,000 requests/month, 300 requests/minute burst.
  • GET /v1/usage shows live consumption — it never consumes quota and never denies. Webhook deliveries don't count against your quota.

Responses carry live ratelimit headers; 429s carry Retry-After.

Idempotency

POST requests accept an Idempotency-Key header: one unique key per logical operation, reused only for byte-identical retries. The SDK does this automatically.

Other machine endpoints

Not everything Uptimely exposes to machines belongs to /v1. These also live on https://app.getuptimely.com and authenticate their own way:

  • Prometheus scrape — GET /api/metrics?projectId=<id>, carrying monitor status and response times in the Prometheus exposition format. It authenticates with a legacy project API key (the "API Keys" card under Settings → API Keys, below the public keys — the same key class the MCP tools take), sent as Authorization: Bearer …. A public uptimely_live_… key is for /v1 and is not accepted here.
  • OpenTelemetry ingestion — POST /api/otlp/v1/logs, /traces and /metrics accept OTLP and store the data in ClickHouse. Authenticate with a telemetry ingestion key in the x-uptimely-ingestion-key header (x-uptimely-service-token and x-uptimely-token are accepted as aliases, for OTel distros that send one of those).
  • Health probe — GET /api/health is public and reports the platform's own status, including the probe pipeline. Monitored by Uptimely itself, naturally.
  • Status page machine surfaces — GET /status/<slug>/badge returns an embeddable SVG status badge and GET /status/<slug>/rss an incident feed. Both are anonymous, and both answer only for a status page marked public.

The MCP endpoint is separate again — see MCP & AI.

The machine surface, in one place

On this page