Incidents often cause a chain reaction, use this API to build our service status into your own workflow.
Simple Overview
Anchor for Simple OverviewGET
/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'
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 ComponentsGET
/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 NoticesGET
/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 InformationGET
/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 UseThe 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.