StatusHub Public API (3.0-R1)
StatusHub API V3 is a REST API with JSON as a content type for both request body and responses.
Current version of API V3 is still a work in progress. Certain features or endpoints are still missing.
The goal is to provide the API that will allow exactly the same actions as StatusHub Control Panel.
All API requests should be made on hostname used to sign-in into StatusHub Control Panel.
For example if team members sign into account on:
https://company.app.statushub.io
then API requests should be made with following prefix:
https://company.app.statushub.io/api/v3
Same rule follows for customers using EU region and then the example would be:
If team members sign into account on:
https://company.app-eu1.statushub.io
then API requests should be made with following prefix:
https://company.app-eu1.statushub.io/api/v3
StatusHub API has two rate limits:
- GET requests - 30 requests per second
- All other requests - 5 requests per second
Rate limit is bounded to API Key used for authentication.
When rate limit will be exceeded, StatusHub API will respond with:
- 429 response code
{"error":"Too many requests - please retry later"}
response- Retry-After response header
In special cases certain API method may have different rate limit which will be mentioned in API method description.
All date/time parameters should be passed in UTC zone no matter the default zone Hub settings.
Events like Incident or Maintenance events can be filtered by time range.
There are two optional parameters in INDEX endpoints:
start_time
,end_time
.
Filtering logic is returning those events which period of occurrence overlaps with start_time
and end_time
range.
Also, providing just one of range params, still uses the range but with a default value of not provided one:
- Providing just
start_time
assumesend_time
as far in the future, - Providing just
end_time
assumesstart_time
as far in the past. - Not providing
start_time
norend_time
results instart_time
being far in the past andend_time
being far in the future and as a result all events are returned by time range filter.
Below are few examples to better understand the logic:
Maintenance example
Let's assume maintenance that started on 2025-02-01 and finished on 2025-02-08.
Using start_time=2025-01-01T00:00:00Z
and end_time=2025-02-02T00:00:00Z
will return the event because there is an overlap of both ranges:
<2025-01-01 00:00:00 UTC, 2025-02-02 00:00:00 UTC> and
<2025-02-01 00:00:00 UTC, 2025-02-08 00:00:00 UTC> overlap in
<2025-02-01 00:00:00 UTC, 2025-02-02 00:00:00 UTC>.
Open incident example
Let's assume incident that started on 2025-02-01 and hasn't been resolved.
Using start_time=2025-03-01T00:00:00Z
and not provind end time will return the event because there is an overlap of both ranges:
<2025-01-01 00:00:00 UTC, far in future due to incident still being open> and
<2025-03-01 00:00:00 UTC, far in future due to not providing end_time
> overlap in
<2025-03-01 00:00:00 UTC, far in future>.
StatusHub API V3 supports extended versions of certain response properties. By default less frequently required fields are returned in basic form with most common properties but if more information is needed extend
query parameter can be used.
Currently StatusHub API V3 supports extending:
- Incident flags,
- Incident Update flags,
- Maintenance event flags,
- Subscription flags.
Example for Maintenance flags: - Request path with basic flags:
/api/v3/hubs/hub-subdomain/maintenances
, - Request path with extended flags:
/api/v3/hubs/hub-subdomain/maintenances?extend=flags
https://{accountSubdomain}.app.statushub.io/api/v3/
https://{accountSubdomain}.app-eu1.statushub.io/api/v3/
Incident
Incident is a most important event type.
Incident represents an event that:
- Started in the past,
- Have updates which can be added while incident is being handled,
- During creation and during its duration the total duration or end of the incident is not known,
- Is resolved when
resolved
Incident Update is created for this incident, - Have non-0 duration. This means that Incident can't be created with
resolved
incident type.
Most typical use case:
- Hub page list various customer-facing services,
- When one of the services has an outage, Incident is created manually or through automation,
- While team is working on restoring the service Incident Update entries are added manually or through automation to this incident to let customers know what's happening,
- Once issue is resolved, Incident Update with
monitoring
incident type is being created while team is keeping an eye on service health, - Once situation is stable, Incident Update with
resolved
incident type is being created which ends the Incident.
Maintenance
Maintenance represents an event that:
- Has known start time which is typically in future - planned maintenance,
- Has known end time during the moment of creation,
- Is a single message.
Most typical use case:
- Hub page list various custom-facing services,
- One of the service will undergo a maintenance that will take it offline for duration of the maintenance,
- Ahead of time, Maintenance event is created to let customers know that service will not be available during specific time-frame.
Platform Alert
Platform Alert is a state of Hub which typically represent major event affecting whole product as opposed to Incident or Maintenance which affects specific services.
Platform Alert is not connected with any service and therefore notification about Platform Alert are sent to all subscriptions regardless of their service selection.
Request
Creates new Subscription. Creates Subscriber record as well.
Besides regular validation - like address correctness - there are few additional constraints: - Address has to be unique for current Hub, - Single Subscriber can't have multiple subscriptions with same method name. For example it's not allowed for one Subscriber to have for example two email subscriptions.
Address for a subscription. Exact meaning depends on method name:
- email - email address,
- sms - phone number,
- webhook - URL,
- slack - Slack Incoming Webhook URL,
- teams - MS Teams Incoming Webhook URL.
"all" has precedence over "services". If "all" is false, "services" can't be empty. If "all" is true, "services" value is being ignored
true
it means that Subscription is subscribed to all current and future Services in current Hub.
When false
, service_ids
can not be empty.
StatusHub ID's of services to which Subscription should be subscribed to.
If contains same values as all Service ID's for current Hub, it automatically implies all
to be true
so subscribing to all current and future Services for current Hub.
Additional configuration for this method name or this Subscription
Additional information to add better meaning for subscription.
Typically used to add responsible person name or team to SMS or URL-based subscriptions where address alone is not enough to know who is receiving the notifications.
Not available for email subscriptions.
Subscription will receive the minimum number of notifications per incident - typically first and final.
Subscription is protected which means it doesn't have the ability of self-service like editing the services list or subscription options as well as doesn't have the ability to self-unsubscribe.
Typically used for group email subscriptions where without this option, any member of an email group could use unsubscribe through the unsubscribe link sent in every notification. And as a result the whole group would stop receiving notifications.
- Main US region
https://subdomain-of-your-account.app.statushub.io/api/v3/hubs/{subdomain}/subscriptions
- EU region
https://subdomain-of-your-account.app-eu1.statushub.io/api/v3/hubs/{subdomain}/subscriptions
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
'https://{accountsubdomain}.app.statushub.io/api/v3/hubs/{subdomain}/subscriptions?api_version=V3-R1' \
-H 'Authorization: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"address": "example@statushub.com",
"method_name": "email",
"services_selection": {
"all": false,
"service_ids": [
449,
24221,
2
]
},
"configuration": {
"content_type": "application/json"
},
"label": "Responsible person name",
"less_verbose": true,
"protected": false,
"subscriber_id": 0
}'
OK
Address for a subscription. Exact meaning depends on method name:
- email - email address,
- sms - phone number,
- webhook - URL,
- slack - Slack Incoming Webhook URL,
- teams - MS Teams Incoming Webhook URL.
Additional configuration for this method name or this Subscription
Additional information to add better meaning for subscription.
Typically used to add responsible person name or team to SMS or URL-based subscriptions where address alone is not enough to know who is receiving the notifications.
Not available for email subscriptions.
Timestamp of record creation.
ISO8601 formatted time (UTC).
{ "id": 82, "address": "example@statushub.com", "configuration": { "content_type": "application/json" }, "method_name": "email", "subscriber_id": 83, "services_selection": { "all": true, "services": [ … ] }, "flags": { "deleted": false }, "label": "Responsible person name", "created_at": "2020-09-01T08:29:00Z", "updated_at": "2020-09-01T08:29:00Z" }
Filters subscriptions by deletion status:
true
- return only subscriptions that were deleted,false
- return only subscriptions that were not deleted,all
- return subscriptions without filtering by deleted status.
Filters Subscriptions by the timestamp of record deletion.
Looks for Subscriptions deleted on or after the deleted_after
timestamp.
ISO8601 formatted time (UTC).
Specifies which properties should be expanded.
Expanded properties contains more detailed information which is less frequently needed in typical usage.
Currently supported only for flags
.
Determines which property results should be sorted by.
- Main US region
https://subdomain-of-your-account.app.statushub.io/api/v3/hubs/{subdomain}/subscriptions
- EU region
https://subdomain-of-your-account.app-eu1.statushub.io/api/v3/hubs/{subdomain}/subscriptions
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://{accountsubdomain}.app.statushub.io/api/v3/hubs/{subdomain}/subscriptions?deleted=true&deleted_after=2020-09-01T08%3A29%3A00Z&q=string&extend=flags&sort_prop=created_at&sort_dir=asc&page=1&per_page=25&api_version=V3-R1' \
-H 'Authorization: YOUR_API_KEY_HERE'
{ "current_page": 1, "page_count": 4, "per_page": 25, "total": 1024, "data": [ { … } ] }
- Main US region
https://subdomain-of-your-account.app.statushub.io/api/v3/hubs/{subdomain}/subscriptions/{subscription_id}
- EU region
https://subdomain-of-your-account.app-eu1.statushub.io/api/v3/hubs/{subdomain}/subscriptions/{subscription_id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://{accountsubdomain}.app.statushub.io/api/v3/hubs/{subdomain}/subscriptions/{subscription_id}?extend=flags&api_version=V3-R1' \
-H 'Authorization: YOUR_API_KEY_HERE'
OK
Address for a subscription. Exact meaning depends on method name:
- email - email address,
- sms - phone number,
- webhook - URL,
- slack - Slack Incoming Webhook URL,
- teams - MS Teams Incoming Webhook URL.
Additional configuration for this method name or this Subscription
Additional information to add better meaning for subscription.
Typically used to add responsible person name or team to SMS or URL-based subscriptions where address alone is not enough to know who is receiving the notifications.
Not available for email subscriptions.
Timestamp of record creation.
ISO8601 formatted time (UTC).
{ "id": 82, "address": "example@statushub.com", "configuration": { "content_type": "application/json" }, "method_name": "email", "subscriber_id": 83, "services_selection": { "all": true, "services": [ … ] }, "flags": { "deleted": false }, "label": "Responsible person name", "created_at": "2020-09-01T08:29:00Z", "updated_at": "2020-09-01T08:29:00Z" }