status.postmarkapp.com

Incidents often cause a chain reaction, use this API to build our service status into your own workflow.

Simple Overview

Anchor for Simple Overview

GET

/api/v1/status

Get the overall status for a page, without all the complexities of components and notices.

State

operational
No current incidents or underway maintenance.

degraded
One or more current incidents are marked as 'investigating' or 'identified'. Incidents marked as 'recovering' are no longer considered current.

under_maintenance
One or more current maintenance marked as 'underway'

*In the event that both a current incident and an underway maintenance are present, 'degraded' takes priority.
curl \
    "https://status.postmarkapp.com/api/v1/status"

Response

{
    "page": {
        "name": "Postmark Status",
        "state": "operational",
        "state_text": "All systems are go!",
        "url": "https://status.postmarkapp.com",
        "links": {
            "components": {
                "href": "/v1/components",
                "count": 50
            },
            "notices": {
                "href": "/v1/notices",
                "count": 100
            },
        },
        "created_at": "2023-01-01T00:00:00.000Z",
        "updated_at": "2023-01-01T00:00:00.000Z"
    }
}

List Components

Anchor for List Components

GET

/api/v1/components

Retrieve a paginated list of components and their status, useful to those who want a more detailed explanation of what’s impacted, or just the status of a subset of components.

State
Can be any of “operational”, “degraded” or “under_maintenance”

Filtering Components

If you want to search for certain components, such as those at the top of the tree, or the children of a given parent you can pass the filter parameter.

Example: Only top level components

GET /api/v1/components?filter[parent_id_null]=true

Example: Children of X

GET /api/v1/components?filter[parent_id_eq]=x

curl \
    "https://status.postmarkapp.com/api/v1/components"

Response

{
    "components": [
        {
            "id": 1,
            "state": "operational",
            "name": "Example Component",
            "description": "This is an example component.",
            "parent_id": null,
            "links": {
                "children": {
                    "href": "/api/v1/components?filter[parent_id_eq]=1",
                    "count": 1,
                }
            },
            "created_at": "2023-01-01T00:00:00.000Z",
            "updated_at": "2023-01-01T00:00:00.000Z"
        },
        {
            "id": 2,
            "state": "operational",
            "name": "Sub-Component",
            "description": "This is an example sub-component.",
            "parent_id": 1,
            "links": {
                "children": {
                    "href": "/api/v1/components?filter[parent_id_eq]=2",
                    "count": 0,
                }
            },
            "created_at": "2023-01-01T00:00:00.000Z",
            "updated_at": "2023-01-01T00:00:00.000Z"
        }
    ],
    "meta": {
        "count": 25,
        "total_count": 50,
        "next_page": "/api/v1/components?page=2"
    }
}

List Notices

Anchor for List Notices

GET

/api/v1/notices

Retrieve a paginated list of notices for a page, past, present and future.

Type
Can be "general", "planned" or "unplanned"

Timeline State
Can be any of “future”, “present”, “past_recent” or “past_distant”

State
For “unplanned” notices can be any of “investigating”, “identified”, “recovering”, “resolved” or “false_alarm”
For "planned" notices can be any "scheduled", "underway", "complete" or "cancelled"

This list only contains basic details, for more information such as the impacted components, or the entire progress update history request detailed notice information.

Filtering Notices

If you want to search for certain notices, such as planned maintenances, or only current incidents you can do so by passing the “filter” query string parameter.

Example: Only retrieve planned maintenance.

GET /api/v1/notices?filter[type_eq]=planned

Example: Only retrieve current unplanned notices.

GET /api/v1/notices?filter[timeline_state_eq]=present&filter[type_eq]=unplanned

You can mix and match other "type" and "timeline_state" values in the filter, so you have the flexibility to return just the records you need.

curl \
    "https://status.postmarkapp.com/api/v1/notices"

Response

{
    "notices": [
        {
            "id": 1,
            "type": "unplanned",
            "timeline_state": "present",
            "state": "investigating",
            "subject": "Current Incident",
            "url": "https://status.postmarkapp.com/notices/xxx-current-incident",
            "began_at": "2023-01-01T00:00:00.000Z",
            "ended_at": null,
            "created_at": "2023-01-01T00:00:00.000Z",
            "updated_at": "2023-01-01T00:00:00.000Z",
            "tag_list": [],
            "links": {
                "self": "/api/notices/1"
            },
            "latest_update": {
                "state": "investigating",
                "content": "We are currently investigating an issue with our service."
                "created_at": "2023-01-01T00:00:00.000Z",
                "updated_at": "2023-01-01T00:00:00.000Z"
            }
        },
        {
            "id": 2,
            "type": "planned",
            "timeline_state": "future",
            "state": "scheduled",
            "subject": "Planned Maintenance",
            "url": "https://status.postmarkapp.com/notices/xxx-planned-maintenance",
            "begins_at": "2023-01-01T00:00:00.000Z",
            "ends_at": "2023-01-01T01:00:00.000Z",
            "began_at": null,
            "ended_at": null,
            "created_at": "2023-01-01T00:00:00.000Z",
            "updated_at": "2023-01-01T00:00:00.000Z",
            "tag_list": [],
            "links": {
                "self": "/api/notices/2"
            },
            "latest_update": {
                "state": "scheduled",
                "content": "We have some upcomming maintenance planned."
                "created_at": "2023-01-01T00:00:00.000Z",
                "updated_at": "2023-01-01T00:00:00.000Z"
            }
        },
        {
            "id": 3,
            "type": "general",
            "timeline_state": "past_recent",
            "subject": "Intermittent 500 errors on Dashboard",
            "tag_list": ["bugfix"],
            "url": "https://status.postmarkapp.com/notices/xxx-intermittent-500-errors",
            "created_at": "2023-01-01T00:00:00.000Z",
            "updated_at": "2023-01-01T00:00:00.000Z",
            "links": {
                "self": "/api/notices/3"
            },
            "latest_update": {
                "content": "We identified and resolved a bug that was causing intermittent 500 errors on the Dashboard.",
                "created_at": "2023-01-01T00:00:00.000Z",
                "updated_at": "2023-01-01T00:00:00.000Z"
            }
        }
    ],
    "meta": {
        "count": 25,
        "total_count": 100,
        "next_page": "/api/v1/notices?page=2"
    }
}

Detailed Notice Information

Anchor for Detailed Notice Information

GET

/api/v1/notices/:id

Retrieve the detail for a given notice, including its impacted components and its full list of progress updates.

curl \
    "https://status.postmarkapp.com/api/v1/notices/:id"

Response

{
    "notice": {
        "id": 1,
        "type": "unplanned",
        "timeline_state": "present",
        "state": "investigating",
        "subject": "Current Incident",
        "url": "https://status.postmarkapp.com/notices/xxx-current-incident",
        "began_at": "2023-01-01T00:00:00.000Z",
        "ended_at": null,
        "created_at": "2023-01-01T00:00:00.000Z",
        "updated_at": "2023-01-01T00:00:00.000Z",
        "tag_list": [],
        "links": {
            "self": "/api/notices/1"
        },
        "components": [
            {
                "id": 1,
                "state": "operational",
                "name": "Example Component",
                "description": "This is an example component.",
                "parent_id": null,
                "created_at": "2023-01-01T00:00:00.000Z",
                "updated_at": "2023-01-01T00:00:00.000Z"
            }
        ],
        "updates": [
            {
                "state": "investigating",
                "content": "We are currently investigating an issue with our service."
                "created_at": "2023-01-01T00:00:00.000Z",
                "updated_at": "2023-01-01T00:00:00.000Z"
            }
        ]
    }
}


Fair Use

Anchor for Fair Use

The Status API allows developers to build on and benefit from the Sorry™ platform. At the same time, we must protect our system and our users’ rights, rate limiting to 10 requests per second.

Read the original on status.postmarkapp.com ↗