---
title: "Status Page API Guide: Statusentry vs Statuspage API | Statusentry"
description: "Automate your status page: create incidents, post updates and schedule maintenance via REST API. Statuspage API basics, auth, rate limits and code examples."
url: https://statusentry.com/blog/status-page-api
updated: 2026-10-20
---

[All posts](https://statusentry.com/blog) 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.

Dec 04, 2023 8 min read by Statusentry team

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](https://developer.statuspage.io/). The essentials:

|  | Atlassian Statuspage |
| --- | --- |
| Base URL | https://api.statuspage.io/v1/ |
| Authentication | API key in the header: Authorization: OAuth <api-key> (or an api_key query parameter) |
| Rate limit | 1 request per second per API token, measured over a 60-second window; 420 or 429 when exceeded |
| Key permissions | Full read/write keys; no read-only keys |
| Main resources | Pages, components and groups, incidents and updates, scheduled maintenance, subscribers, metrics, templates, users |
| Public status API | Every page also exposes read-only JSON such as /api/v2/summary.json and /api/v2/status.json |

From Atlassian's [Statuspage API reference](https://developer.statuspage.io/) and [Statuspage API overview](https://support.atlassian.com/statuspage/docs/what-are-the-different-apis-under-statuspage/), 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](https://statusentry.com/pricing)). All endpoints live under https://api.statusentry.com/v1/.

| Resource | Endpoints | What you can do |
| --- | --- | --- |
| Incidents | GET/POST /v1/incidents, GET/DELETE /v1/incidents/:id | List, 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/:entryId | Post an update, set the incident status, mark components degraded, choose whether subscribers are notified |
| Scheduled maintenance | GET/POST /v1/maintenances, GET/PUT/DELETE /v1/maintenances/:id | Announce a maintenance window with affected components, as public or internal-only |

Full request and response formats: [Incident API](https://docs.statusentry.com/incident-api), [Incident Entry API](https://docs.statusentry.com/incident-entry), [Maintenance API](https://docs.statusentry.com/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](https://statusentry.com/images/blog/wp-api-keys-panel-1.webp)

Create an API key pair from the admin panel

![List of API keys in the Statusentry admin panel](https://statusentry.com/images/blog/wp-api-keys-panel-2.webp)

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](https://jwt.io/)). 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](https://docs.statusentry.com/how-to-use-statusentry-api-key-pairs-to-authenticate-your-request) 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](https://statusentry.com/blog/how-to-announce-scheduled-maintenance).

## 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](https://statusentry.com/blog/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](https://statusentry.com/blog/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 API | Statusentry API |
| --- | --- |
| POST /v1/pages/{page_id}/incidents | POST /v1/incidents |
| PATCH an incident with a new status and body | POST /v1/incidents/:id/entries |
| Scheduled incidents (maintenance) | POST /v1/maintenances |
| components object with component status | affectedComponents with componentId and componentStatus |
| deliver_notifications | sendNotification |
| 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](https://statusentry.com/atlassian-statuspage-alternative).

## 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**](https://docs.statusentry.com/incident-api), and you can see what a finished page looks like on the [demo status page](https://demo.statusentry.com/).

## Keep reading

[All posts](https://statusentry.com/blog)

Guides 8 min read

### [Signup Source Tracking: Know Where Your Customers Really Come From](https://statusentry.com/blog/signup-source-tracking)

Analytics tells you where visitors come from. It rarely tells you where customers come from. Why signup source tracking matters for a SaaS business, and a practical way to set it up with UTM tags, referrers, ad click IDs and a first-touch cookie.

Guides 8 min read

### [How to Choose a SaaS Product: Criteria That Matter After the Demo](https://statusentry.com/blog/how-to-choose-a-saas-product)

Every SaaS vendor looks good in the demo. The differences show up during outages, growth spurts and urgent support tickets. The criteria that predict those moments — reliability, scalability, support response time and more — and how to check each before you sign.

Try Statusentry

## Communicate incidents calmly, transparently, instantly.

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

[Start free](https://app.statusentry.com/signup) [View demo status page](https://demo.statusentry.com/)
