Everything the interface does, the API does.
One REST API at https://app.upfour.io/v1 — 233 endpoints,
the same ones the product itself runs on. This page is the contract: how requests are shaped,
how they fail, and what we promise not to break. Every reference page has a
“Try it” panel that runs real requests from your browser with your own key.
Authentication
Create an API key in the app under Settings → API tokens and send it as a Bearer token.
Live keys start with pls_live_, test keys with
pls_test_ — test keys operate on your
sandbox organization, so you can
experiment without touching production monitors. Keys carry fine-grained scopes such as
monitor.read, monitor.write,
incident.write and webhook.write;
each endpoint below names the scope it needs.
curl -s https://app.upfour.io/v1/me \
-H "Authorization: Bearer $UP4_API_KEY"Response envelope
Successful responses wrap their payload in a flat envelope; lists add cursor metadata:
{ "data": { "id": "…" } }
{
"data": [ … ],
"pagination": {
"cursor": null,
"next_cursor": null,
"prev_cursor": null,
"limit": 50,
"has_more": false
}
}Errors
One shape across all 4xx and 5xx responses — sanitized, with a request id you can send us:
{
"error": {
"code": "permission_denied",
"message": "API token does not have the required scope",
"request_id": "req_…"
}
}Pagination
List endpoints use signed keyset cursors, not page numbers. Pass
limit (max 250) and follow
pagination.next_cursor. Cursors expire after 24 hours and
are bound to their sort and filters; the errors are stable:
cursor_invalid,
cursor_expired,
cursor_parameters_changed.
Idempotency
Send Idempotency-Key on mutating requests. Replaying the
same key with the same body returns the stored response with
Idempotency-Status: replayed; the same key with a
different body returns 409 idempotency_key_conflict.
Stored for 24 hours.
Versioning
The URL version is /v1 and additive changes land there.
Breaking changes would require /v2, 12 months of parallel
support and Sunset/Deprecation
headers. X-API-Version pins compatible behavior; keys
remember their default version.
Rate limits
Every response tells you where you stand:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed in the current window |
X-RateLimit-Remaining | Requests left |
X-RateLimit-Reset | When the window resets |
Retry-After | Sent with 429 — wait this long |
Buckets are per token for authenticated calls, per IP for unauthenticated ones, per slug for heartbeat pings.
Conventions
IDs are UUIDs. Timestamps are RFC 3339 in UTC. Boolean query values are a strict
true or false.
Browser API calls use Authorization,
Idempotency-Key and
X-API-Version. Documentation and marketing origins are
bearer-only CORS origins and never receive credentialed session access; only the exact app origin
may send the product's HttpOnly session cookie.
Machine-readable
The whole contract as files — generated from the same route inventory that gates our releases, so they cannot drift from production: OpenAPI 3.1 (YAML) · OpenAPI 3.1 (JSON) · Postman collection. For AI tooling there is an llms.txt index of every docs page.
Reference
Monitoring| Monitors | The heart of the API: create, list, pause, resume and delete the things we check every ten seconds. | 23 endpoints |
| Monitor groups | Folders for monitors — group fleets per project or per customer. | 6 endpoints |
| Scheduled jobs (heartbeats) | Cron jobs and backups that must call in before a deadline. Silence becomes an incident. | 12 endpoints |
| Scheduled job groups | Folders for scheduled jobs. | 6 endpoints |
| Resource metadata | Free-form key/value metadata on monitors and scheduled jobs — owner, playbook link, cost center. | 2 endpoints |
| Incidents | Open, acknowledge, comment, escalate, resolve. Everything the incident timeline shows, writable. | 26 endpoints |
| Severities | Your incident severity ladder (SEV1…), fully customizable. | 1 endpoints |
| Severity groups | Group severities into reusable sets. | 1 endpoints |
| Alert channels | Where alerts go: email, Slack, Telegram, PagerDuty and friends. | 6 endpoints |
| Alert plans (escalation policies) | Who is told, in what order, after how long. | 6 endpoints |
| On-call rotations | Rotations, overrides, and "who is on call right now". | 12 endpoints |
| Playbooks (runbooks) | The steps you take when something breaks, attached to monitors, with shared progress. | 7 endpoints |
| Status pages | Public and client-facing uptime pages: structure, updates, subscribers, translations. | 39 endpoints |
| Reports | Availability and SLA reporting: summaries, trends, exports, schedules, share links. | 21 endpoints |
| SLA policies | Targets and business-hours masks that reports measure against. | 5 endpoints |
| Share links | Read-only client views — no accounts, no seats. | 1 endpoints |
| Organization | Company-level settings. | 16 endpoints |
| Teams | Teams and membership. | 14 endpoints |
| Invites | Invite colleagues — seats are unlimited everywhere. | 4 endpoints |
| Clients (agency mode) | The agency partition: clients, client teams, share links, archive/unarchive. | 12 endpoints |
| Client templates | Materialize monitors, pages and alert plans for a new client in one step. | 5 endpoints |
| Token introspection | Who am I? What can this key do? The first call to make. | 1 endpoints |
| Webhook subscriptions | Outbound, signed webhooks — subscribe, test, inspect deliveries, redeliver. | 7 endpoints |