All posts Guides

Status Page API: Automate Incidents and Maintenance

How status page APIs work, what the Atlassian Statuspage API offers, and how to open incidents, post updates and schedule maintenance with the Statusentry REST API, with code examples.

A status page API lets you open incidents, post updates and schedule maintenance from your own code: a deploy script, a monitoring alert or a Slack bot. This guide explains the two kinds of status page API, how Atlassian Statuspage's API works, and how to automate your status page with the Statusentry REST API, with working request examples.

What is a status page API?

Most status page tools offer two different APIs, and search results often mix them up:

  • A management API (authenticated, read/write). Your systems use it to create incidents, post incident updates, change component status and schedule maintenance. This is what you automate against.
  • A public status API (read-only). Other people use it to read your page's current status as JSON, for example to show a banner in your app or to aggregate the status of vendors you depend on.

If you are searching for the “Statuspage API” to automate your own page, you want the management API. If you want to read another company's status, you want their public status API.

The Atlassian Statuspage API at a glance

Atlassian Statuspage documents its management API at developer.statuspage.io. The essentials:

Atlassian Statuspage
Base URLhttps://api.statuspage.io/v1/
AuthenticationAPI key in the header: Authorization: OAuth <api-key> (or an api_key query parameter)
Rate limit1 request per second per API token, measured over a 60-second window; 420 or 429 when exceeded
Key permissionsFull read/write keys; no read-only keys
Main resourcesPages, components and groups, incidents and updates, scheduled maintenance, subscribers, metrics, templates, users
Public status APIEvery page also exposes read-only JSON such as /api/v2/summary.json and /api/v2/status.json
From Atlassian's Statuspage API reference and Statuspage API overview, checked October 2026.

The Statuspage API is broad, which is useful if you manage subscribers or metrics in code. Many teams only need three things from it, though: open an incident, post updates until it is resolved, and schedule maintenance. That is exactly what the Statusentry API covers.

The Statusentry REST API

Statusentry is a hosted status page with a REST API for incidents and scheduled maintenance. The API is included on every paid plan, starting with Start Up at $9.99/month (see pricing). All endpoints live under https://api.statusentry.com/v1/.

ResourceEndpointsWhat you can do
IncidentsGET/POST /v1/incidents, GET/DELETE /v1/incidents/:idList, get, create and delete incidents with a status and impact
Incident updates (entries)GET/POST /v1/incidents/:id/entries, GET/PUT/DELETE /v1/incidents/:id/entries/:entryIdPost an update, set the incident status, mark components degraded, choose whether subscribers are notified
Scheduled maintenanceGET/POST /v1/maintenances, GET/PUT/DELETE /v1/maintenances/:idAnnounce a maintenance window with affected components, as public or internal-only
Full request and response formats: Incident API, Incident Entry API, Maintenance API.

Incident status follows the usual lifecycle: investigating, identified, monitoring and resolved. Impact is none, minor, major or critical. Component status is operational, degraded_performance, partial_outage, major_outage or under_maintenance. Those are the same values Statuspage uses, so existing scripts map over easily.

Create API keys

Create a key pair under API keys in the Statusentry admin panel. You get an access key and a secret key. The secret key is shown only once, so store it in your secret manager straight away.

Creating an API key pair in the Statusentry admin panel
Create an API key pair from the admin panel
List of API keys in the Statusentry admin panel
Manage and revoke API keys

Authenticate requests

Statusentry never sends your secret key over the wire. Instead, each request carries a short-lived JWT signed with it (HS256), with your access key as the issuer and www.statusentry.com as the audience. The Authorization header looks like this:

Header format

Authorization: StatusEntry <ACCESS_KEY>:<SIGNED_JWT>

Most languages have a JWT library (jwt.io lists them). A minimal Python helper using PyJWT:

Python

import time
import jwt  # pip install pyjwt requests
import requests

ACCESS_KEY = "AK..."   # from the admin panel
SECRET_KEY = "SK..."   # keep this in a secret manager
API = "https://api.statusentry.com/v1"

def headers():
    now = int(time.time())
    token = jwt.encode(
        {"iss": ACCESS_KEY, "aud": "www.statusentry.com", "iat": now, "exp": now + 300},
        SECRET_KEY,
        algorithm="HS256",
    )
    return {"Authorization": f"StatusEntry {ACCESS_KEY}:{token}",
            "Content-Type": "application/json"}

See how to authenticate with API key pairs in the docs for a Java example.

Example: open an incident

Create the incident and its first update in one request. Timestamps are epoch milliseconds. Set sendNotification to false if you want to post silently while you confirm the problem.

Python

import time
now_ms = int(time.time() * 1000)

incident = requests.post(f"{API}/incidents", headers=headers(), json={
    "name": "Signup page is having intermittent errors",
    "incidentStatus": "investigating",
    "incidentImpact": "minor",
    "entry": {
        "message": "We are investigating errors on the signup page. "
                   "Next update within 30 minutes.",
        "date": now_ms,
        "incidentStatus": "investigating",
        "affectedComponents": [
            {"componentId": "<COMPONENT_ID>", "componentStatus": "degraded_performance"}
        ],
        "sendNotification": True,
    },
}).json()

incident_id = incident["id"]

Example: post updates and resolve

Each update is an entry on the incident with its own status, so posting an entry with resolved closes the incident. Subscribers are notified by email, Slack and webhook unless you set sendNotification to false.

Python

requests.post(f"{API}/incidents/{incident_id}/entries", headers=headers(), json={
    "message": "The issue is resolved. Signups are working normally again.",
    "date": int(time.time() * 1000),
    "incidentStatus": "resolved",
    "affectedComponents": [
        {"componentId": "<COMPONENT_ID>", "componentStatus": "operational"}
    ],
    "sendNotification": True,
})

Example: schedule maintenance from a deploy pipeline

Announce a maintenance window when a risky migration is scheduled, so customers see it on the status page and subscribers get notice in advance. Set internal to true to notify only your own integration channels.

Python

start = int(time.time() * 1000) + 24 * 3600 * 1000   # tomorrow
requests.post(f"{API}/maintenances", headers=headers(), json={
    "name": "Database upgrade",
    "message": "We will upgrade our primary database. "
               "The dashboard may be read-only for up to 15 minutes.",
    "plannedStartTime": start,
    "plannedEndTime": start + 30 * 60 * 1000,
    "affectedComponents": ["<COMPONENT_ID>"],
    "sendNotification": True,
    "internal": False,
})

For wording, see our scheduled maintenance announcement templates.

Automation ideas

  • Slack slash command: one command opens the incident, creates the video call and posts the first status page update, so nobody leaves Slack during an outage.
  • Monitoring alert to incident: when your alerting tool fires, open an investigating incident with notifications off; a human confirms and publishes. Paid plans also include built-in endpoint monitoring that alerts your team when a URL fails.
  • CI/CD maintenance windows: create the maintenance from the same pipeline job that schedules a migration, and close it when the job finishes.
  • Consistent wording: keep message text in incident communication templates and fill them in from your scripts.

Moving from the Statuspage API to Statusentry

If you already automate Atlassian Statuspage, most calls translate one to one:

Atlassian Statuspage APIStatusentry API
POST /v1/pages/{page_id}/incidentsPOST /v1/incidents
PATCH an incident with a new status and bodyPOST /v1/incidents/:id/entries
Scheduled incidents (maintenance)POST /v1/maintenances
components object with component statusaffectedComponents with componentId and componentStatus
deliver_notificationssendNotification
Authorization: OAuth <key>Authorization: StatusEntry <access key>:<signed JWT>

There is no page ID in Statusentry paths: the key pair already identifies your status page.

What Statusentry's API doesn't cover yet: components, subscribers and metrics are managed in the dashboard, not through the API, and there are no SMS subscribers or private pages. If you manage those in code today, Statuspage's broader API may still suit you better. For a side-by-side feature view, see Statusentry vs Atlassian Statuspage.

Get started

Create a free account (every new account gets a 30-day Enterprise trial, no credit card), add your components, generate an API key pair and send your first request. The full reference is in the Statusentry API documentation, and you can see what a finished page looks like on the demo status page.

Try Statusentry

Communicate incidents calmly, transparently, instantly.

Start with a 30-day Enterprise trial. Afterwards, keep the free plan with no time limit.