The API

Read any public page with the public API, and manage pages, components, incidents, monitors, probes and subscribers with the management API. Every page also speaks Atlassian Statuspage’s read API.

The full reference, generated from the API itself, is at /api/docs ↗ (OpenAPI 3.1, the spec at /api/openapi.json).

Guides and contents

Create an API key

  1. Go to API keys → Create key.
  2. Name it and tick only the Scopes it needs: pages:read, pages:write, components:write, incidents:write, monitors:write, probes:write, subscribers:read or subscribers:write.
  3. Copy the key. It starts with sk_ and is shown once.

Keys are created and revoked by an admin signed in to the admin; a key can’t create another key.

Make a request

Send the key as a bearer token. Management endpoints are under /api/v1/admin/; public endpoints are under /api/v1/pages/ and need no key.

curl https://app.upstreamr.com/api/v1/admin/pages \
  -H "Authorization: Bearer sk_…"

{"data":[…]}

Answers come as { "data": … }; errors as { "error": { "code", "message" } }.

Rate limits

The management API allows 300 requests a minute per key or signed-in user, and public reads 300 a minute per address. Over the limit, the answer is 429 with a Retry-After header saying when to try again.

Statuspage-compatible API on your page

Every page answers Atlassian Statuspage’s public read API on its own address (your domain or <page>.upstreamr.page), with Statuspage’s fields, nesting and values, so tools built for Statuspage read your page as they are. No key, CORS open, cached for up to 30 seconds:

/api/v2/summary.json
/api/v2/status.json
/api/v2/components.json
/api/v2/incidents/unresolved.json
/api/v2/incidents.json
/api/v2/scheduled-maintenances/upcoming.json
/api/v2/scheduled-maintenances/active.json
/api/v2/scheduled-maintenances.json

Groups are entries with "group": true and their components’ ids; showcase is the component’s Show uptime. Texts come in the page’s language, or add ?lang=ro. What Upstreamr doesn’t have stays empty, as on a Statuspage page that doesn’t use it: no postmortem state, no affected_components per update, and a cancelled maintenance isn’t listed.

Your page’s /api lists these with its live answers, the feeds and the badge, for people who build on your status. Its /api/openapi.json describes only the public endpoints; this reference, with the management API, is on the admin’s address.

Feeds, calendar and badges

Every public page also has, with no key, a feed, a calendar and a badge. On the page’s own address they’re short: /feed.atom, /feed.rss and /maintenance.ics (plus /history.atom and /history.rss, the addresses Atlassian Statuspage uses, so feed readers keep working after a move). Through the API:

https://app.upstreamr.com/api/v1/pages/<page>/feed.atom
https://app.upstreamr.com/api/v1/pages/<page>/feed.rss
https://app.upstreamr.com/api/v1/pages/<page>/maintenance.ics
https://app.upstreamr.com/api/v1/pages/<page>/badge.svg
https://app.upstreamr.com/api/v1/pages/<page>/og.png
https://app.upstreamr.com/api/v1/pages/<page>/incidents/<id>/og.png

The two og.png paths are the link-preview pictures (1200 × 630), also at /og.png and /incidents/<id>/og.png on the page’s address. They redirect to the current picture’s own address, which changes with the page’s state; private pages have none.

A push monitor’s URL is https://app.upstreamr.com/api/v1/push/<token>; the admin shows it once, when you create the monitor.