API

API keys with scopes, bound to your organization. Regenerated from the product's OpenAPI contract on every build, so this page cannot drift from the code.

API keys are live. You create them in the app under Integrations, API keys (owner and admin only), and send them as a bearer token:

Authorization: Bearer pst_...

A key belongs to one organization. It carries scopes, monitors, incidents, status-pages and webhooks, each as :read or :write, plus org:read; a write scope implies read on the same resource. You can narrow a key further to selected projects, or to individual monitors. Revocation and expiry take effect on the next request, not at the end of some cache window.

Keys cannot manage keys. The management endpoints require a browser session by construction, so a leaked key can read what its scopes allow and can never mint itself a successor.

What accepts a key today

Key authentication is active on seven read endpoints:

endpointwhat it returns
monitors in a projectthe list with state, type, interval, regions
a single monitordetail as the cockpit shows it
monitor checksthe raw check results behind that monitor
monitor time seriesresponse times over a window
monitor incidentsincidents attached to that monitor
incidents in an organizationthe list
a single incidentdetail with its timeline

Every other endpoint below still requires a session, and write scopes are selectable but not yet honoured anywhere. The curated public reference, versioned 1.0.0-beta.1, follows with the next release; until then this page renders the full surface the apps speak to, so you can see the shape of what is coming.

Feature areas that are not released, such as multi-step checks, are excluded until they ship.

Perstat API v0.1.0 · 168 documented operations · regenerated per build

Auth and session

  • POST /auth/login
  • POST /auth/logout

    Ends the current session server-side. Sessions are revocable one by one and all at once.

  • POST /auth/magic

    Magic-link sign-in: takes an email address and sends a one-time sign-in link. Deliberately answers neutrally whether or not the address exists.

  • POST /auth/magic/verify
  • POST /auth/register
  • GET /me
  • GET /me/activity
  • GET /me/cockpit-bootstrap
  • GET /me/cockpit-stats
  • GET /me/devices
  • POST /me/devices
  • DELETE /me/devices/{id}
  • GET /me/downtimes
  • GET /me/invitations
  • POST /me/invitations/{inv_id}/accept
  • POST /me/locale
  • GET /me/logins
  • POST /me/logins/revoke-others
  • DELETE /me/logins/{id}
  • GET /me/notification-preferences
  • PUT /me/notification-preferences
  • GET /me/notifications
  • POST /me/notifications/read
  • GET /me/notifications/unread
  • GET /me/open-incidents
  • GET /me/org-summaries
  • GET /me/organizations
  • GET /me/phone
  • PUT /me/phone
  • POST /me/phone/verify
  • POST /me/phone/verify/request
  • GET /me/raw-down-days
  • GET /me/region-capabilities
  • GET /me/region-summaries
  • GET /me/resolve-host
  • GET /me/timeline
  • GET /organizations/{org_id}/members
  • PATCH /organizations/{org_id}/members/{user_id}
  • DELETE /organizations/{org_id}/members/{user_id}

Organizations and members

  • POST /invitations/accept
  • POST /invitations/inspect
  • POST /organizations
  • PATCH /organizations/{org_id}
  • DELETE /organizations/{org_id}
  • GET /organizations/{org_id}/activity
  • POST /organizations/{org_id}/convert
  • GET /organizations/{org_id}/downtimes
  • GET /organizations/{org_id}/entitlements
  • GET /organizations/{org_id}/invitations
  • POST /organizations/{org_id}/invitations
  • DELETE /organizations/{org_id}/invitations/{inv_id}
  • GET /organizations/{org_id}/project-summaries
  • GET /organizations/{org_id}/raw-down-days
  • GET /organizations/{org_id}/timeline

Projects

  • GET /organizations/{org_id}/projects
  • POST /organizations/{org_id}/projects
  • POST /organizations/{org_id}/projects/reorder
  • PATCH /projects/{project_id}
  • DELETE /projects/{project_id}
  • GET /projects/{project_id}/activity
  • GET /projects/{project_id}/downtimes
  • GET /projects/{project_id}/monitors
  • POST /projects/{project_id}/monitors
  • POST /projects/{project_id}/monitors/reorder
  • POST /projects/{project_id}/move
  • GET /projects/{project_id}/raw-down-days
  • GET /projects/{project_id}/timeline

Monitors and checks

  • PATCH /alert-profiles/{id}
  • DELETE /alert-profiles/{id}
  • GET /monitors/{monitor_id}
  • PATCH /monitors/{monitor_id}
  • DELETE /monitors/{monitor_id}
  • GET /monitors/{monitor_id}/alarm-state
  • GET /monitors/{monitor_id}/checks
  • POST /monitors/{monitor_id}/clone
  • GET /monitors/{monitor_id}/incidents
  • POST /monitors/{monitor_id}/move
  • POST /monitors/{monitor_id}/run
  • GET /monitors/{monitor_id}/series
  • GET /organizations/{org_id}/alert-profiles
  • POST /organizations/{org_id}/alert-profiles
  • POST /organizations/{org_id}/monitors/{monitor_id}/discard-day

Incidents and post-mortems

  • GET /organizations/{org_id}/incidents
  • POST /organizations/{org_id}/incidents
  • GET /organizations/{org_id}/incidents/feed
  • GET /organizations/{org_id}/incidents/{incident_id}
  • POST /organizations/{org_id}/incidents/{incident_id}/ack
  • GET /organizations/{org_id}/incidents/{incident_id}/action-items
  • POST /organizations/{org_id}/incidents/{incident_id}/action-items
  • PUT /organizations/{org_id}/incidents/{incident_id}/action-items/{item_id}
  • DELETE /organizations/{org_id}/incidents/{incident_id}/action-items/{item_id}
  • POST /organizations/{org_id}/incidents/{incident_id}/assign
  • POST /organizations/{org_id}/incidents/{incident_id}/delete
  • POST /organizations/{org_id}/incidents/{incident_id}/discard-downtime
  • GET /organizations/{org_id}/incidents/{incident_id}/discard-preview
  • GET /organizations/{org_id}/incidents/{incident_id}/events
  • POST /organizations/{org_id}/incidents/{incident_id}/note
  • GET /organizations/{org_id}/incidents/{incident_id}/on-call
  • POST /organizations/{org_id}/incidents/{incident_id}/on-call/ack
  • GET /organizations/{org_id}/incidents/{incident_id}/pages
  • POST /organizations/{org_id}/incidents/{incident_id}/pages
  • DELETE /organizations/{org_id}/incidents/{incident_id}/pages/{page_id}
  • GET /organizations/{org_id}/incidents/{incident_id}/postmortem
  • PUT /organizations/{org_id}/incidents/{incident_id}/postmortem
  • POST /organizations/{org_id}/incidents/{incident_id}/postmortem/publish
  • POST /organizations/{org_id}/incidents/{incident_id}/resolve
  • POST /organizations/{org_id}/incidents/{incident_id}/restore
  • POST /organizations/{org_id}/incidents/{incident_id}/restore-downtime
  • POST /organizations/{org_id}/incidents/{incident_id}/severity
  • POST /organizations/{org_id}/incidents/{incident_id}/snooze
  • POST /organizations/{org_id}/incidents/{incident_id}/summary

On-call and paging

  • GET /organizations/{org_id}/on-call/duty
  • GET /organizations/{org_id}/on-call/members
  • PUT /organizations/{org_id}/on-call/members
  • GET /organizations/{org_id}/on-call/settings
  • PUT /organizations/{org_id}/on-call/settings
  • GET /organizations/{org_id}/paging-usage

Status pages

  • GET /badge.svg
  • GET /organizations/{org_id}/status-pages
  • POST /organizations/{org_id}/status-pages
  • GET /organizations/{org_id}/status-pages/archived
  • GET /public/status-pages/resolve
  • GET /public/status-pages/{slug}
  • GET /public/status-pages/{slug}/badge.svg
  • GET /public/status-pages/{slug}/feed.rss
  • POST /public/status-pages/{slug}/login
  • GET /public/status-pages/{slug}/logo
  • GET /public/status-pages/{slug}/logo/dark
  • POST /public/status-pages/{slug}/subscribe
  • POST /public/status-pages/{slug}/unlock
  • GET /status-pages/{id}
  • PATCH /status-pages/{id}
  • DELETE /status-pages/{id}
  • GET /status-pages/{id}/domains
  • POST /status-pages/{id}/domains
  • POST /status-pages/{id}/domains/reorder
  • DELETE /status-pages/{id}/domains/{domain_id}
  • POST /status-pages/{id}/domains/{domain_id}/verify
  • DELETE /status-pages/{id}/logo
  • DELETE /status-pages/{id}/logo/dark
  • POST /status-pages/{id}/monitors
  • PUT /status-pages/{id}/shared-password
  • DELETE /status-pages/{id}/shared-password
  • GET /status-pages/{id}/subscribers
  • DELETE /status-pages/{id}/subscribers/{subscriber_id}
  • POST /status-pages/{id}/unarchive
  • GET /status-pages/{id}/versions
  • POST /status-pages/{id}/versions
  • POST /status-pages/{id}/versions/{version_id}/restore
  • GET /status-pages/{id}/viewers
  • POST /status-pages/{id}/viewers
  • DELETE /status-pages/{id}/viewers/{viewer_id}

Maintenance and curation

  • POST /organizations/{org_id}/exclusions/{exclusion_id}/restore
  • GET /organizations/{org_id}/maintenance-windows
  • POST /organizations/{org_id}/maintenance-windows
  • PATCH /organizations/{org_id}/maintenance-windows/{id}
  • DELETE /organizations/{org_id}/maintenance-windows/{id}
  • POST /organizations/{org_id}/maintenance-windows/{id}/cancel

Host agents

  • POST /organizations/{org_id}/agent-enroll-tokens
  • GET /organizations/{org_id}/agents
  • PATCH /organizations/{org_id}/agents/{agent_id}
  • DELETE /organizations/{org_id}/agents/{agent_id}

Webhooks

  • GET /organizations/{org_id}/webhooks
  • POST /organizations/{org_id}/webhooks
  • PATCH /organizations/{org_id}/webhooks/{target_id}
  • DELETE /organizations/{org_id}/webhooks/{target_id}
  • POST /organizations/{org_id}/webhooks/{target_id}/rotate-secret
  • POST /organizations/{org_id}/webhooks/{target_id}/test