API reference
Status API
Version 1.0 OpenAPI 3.1.0
The Status API: status pages, their components, incidents, scheduled maintenance, subscribers, custom domains, branding and visitor analytics. It is the API the EvoHub console itself uses.
Authentication. Send an API key as Authorization: Bearer evohub_… or
X-API-Key: evohub_…. A key works in one organization. See API keys and
scopes and Errors in these docs. The public page reads (tag Public pages)
need no key at all.
Permissions. Each operation names the permission it needs
(x-evohub-permission); an API key needs it among its scopes. A key is always
held to its scopes, even one made by an administrator. A refusal is
403 FORBIDDEN, never 401.
Teams. A page belongs to the whole organization (team_id is "") or to
one team. A key sees the organization-wide pages; an organization key scoped
to a team also sees that team's. A page the caller cannot
see, and everything under it (components, incidents, maintenance, subscribers,
domain, analytics), answers 404 NOT_FOUND, exactly like one that does not
exist.
Ids. Pages, components, incidents, maintenance windows, their updates and
subscribers have UUID ids. A path id that is not a UUID answers 404
NOT_FOUND before anything is read.
Responses. Success is {"data": …, "success": true}. Errors are
{"error": {"code", "message", "request_id"}}; this service's codes are
VALIDATION_ERROR (400, the message names the field), INVALID_BODY (400, not JSON
or an unknown field: bodies are decoded strictly), NOT_FOUND, and
INTERNAL_ERROR (500). The analytics endpoints answer a bad range with
VALIDATION_FAILED and details. Times are RFC 3339 in UTC.
Incidents and maintenance are On-Call's. On the console, incidents and
maintenance windows are published and run from On-Call, which calls these same
endpoints. Through this API you can run them on the page directly; set
managed_in: status_page so the console shows them as the page's own.
Every write reaches the public page. A successful write under a page drops the page's cached copy at the edge, so visitors see it on their next poll.
Not here. The subscribe form, its confirm and unsubscribe links, and the
visitor-analytics beacon are served to visitors by the status page itself
(x-route-check.not-public).
Servers
https://evohub.io
Authentication
bearerAuthHTTP BearerAn EvoHub API key (evohub_…) as a bearer token.apiKeyHeaderAPI key in the headerX-API-KeyAn EvoHub API key (evohub_…).
Pages
Status pages and their settings.
| GET | /api/v1/pages | List pages |
| POST | /api/v1/pages | Create a page |
| GET | /api/v1/pages/{pageID} | Get a page |
| PUT | /api/v1/pages/{pageID} | Update a page |
| DELETE | /api/v1/pages/{pageID} | Delete a page |
| PATCH | /api/v1/pages/{pageID}/content-settings | Update content and SEO settings |
Page appearance
Theme, header links, layout of groups, logos and favicon.
| PATCH | /api/v1/pages/{pageID}/theme | Update the theme |
| PATCH | /api/v1/pages/{pageID}/links | Update the header |
| PATCH | /api/v1/pages/{pageID}/product-groups | Set how groups are laid out |
| POST | /api/v1/pages/{pageID}/logo | Upload the logo |
| DELETE | /api/v1/pages/{pageID}/logo | Remove the logo |
| POST | /api/v1/pages/{pageID}/favicon | Upload the favicon |
| DELETE | /api/v1/pages/{pageID}/favicon | Remove the favicon |
| GET | /api/v1/pages/{pageID}/groups/logos | List group logos |
| POST | /api/v1/pages/{pageID}/groups/logo | Upload a group's logo |
| DELETE | /api/v1/pages/{pageID}/groups/logo | Remove a group's logo |
Components
The services a page shows, and their status.
| GET | /api/v1/pages/{pageID}/components | List a page's components |
| POST | /api/v1/pages/{pageID}/components | Add a component |
| PUT | /api/v1/pages/{pageID}/components/order | Reorder components |
| PUT | /api/v1/pages/{pageID}/groups/rename | Rename a group |
| GET | /api/v1/components/{componentID} | Get a component |
| PUT | /api/v1/components/{componentID} | Update a component |
| DELETE | /api/v1/components/{componentID} | Delete a component |
| PATCH | /api/v1/components/{componentID}/status | Set a component's status |
Incidents
Incidents on a page and their timeline.
| GET | /api/v1/pages/{pageID}/incidents | List a page's incidents |
| POST | /api/v1/pages/{pageID}/incidents | Create an incident |
| DELETE | /api/v1/pages/{pageID}/incidents/{id} | Delete an incident |
| PATCH | /api/v1/pages/{pageID}/incidents/{id} | Edit an incident |
| POST | /api/v1/pages/{pageID}/incidents/{id}/updates | Post an update |
| DELETE | /api/v1/pages/{pageID}/incidents/{id}/updates/{updateID} | Delete an update |
| PATCH | /api/v1/pages/{pageID}/incidents/{id}/updates/{updateID} | Edit an update's text |
| PUT | /api/v1/pages/{pageID}/incidents/{id}/postmortem | Save the postmortem |
Maintenance
Scheduled maintenance on a page and its timeline.
| GET | /api/v1/pages/{pageID}/maintenances | List a page's maintenance |
| POST | /api/v1/pages/{pageID}/maintenances | Schedule maintenance |
| DELETE | /api/v1/pages/{pageID}/maintenances/{id} | Delete maintenance |
| PATCH | /api/v1/pages/{pageID}/maintenances/{id} | Edit maintenance |
| POST | /api/v1/pages/{pageID}/maintenances/{id}/updates | Post a maintenance update |
| DELETE | /api/v1/pages/{pageID}/maintenances/{id}/updates/{updateID} | Delete a maintenance update |
| PATCH | /api/v1/pages/{pageID}/maintenances/{id}/updates/{updateID} | Edit a maintenance update's text |
Subscribers
People who follow a page by email.
| GET | /api/v1/pages/{pageID}/subscribers | List subscribers |
| DELETE | /api/v1/pages/{pageID}/subscribers/{id} | Remove a subscriber |
| PATCH | /api/v1/pages/{pageID}/subscription-settings | Update subscription settings |
Custom domain
Serve a page on your own subdomain.
| GET | /api/v1/pages/{pageID}/domain | Get the custom domain |
| POST | /api/v1/pages/{pageID}/domain | Set the custom domain |
| DELETE | /api/v1/pages/{pageID}/domain | Remove the custom domain |
Analytics
Cookieless visitor analytics, incidents published and subscriber growth.
| GET | /api/v1/pages/{pageID}/analytics | Get a page's visitor analytics |
| GET | /api/v1/pages/{pageID}/analytics/hourly | Get a page's views by the hour |
| GET | /api/v1/pages/{pageID}/analytics/export.csv | Export analytics as CSV |
| PATCH | /api/v1/pages/{pageID}/analytics/settings | Update analytics settings |
| GET | /api/v1/pages/analytics | Get analytics across pages |
Overview
Every page's state in one read.
| GET | /api/v1/pages/summary | Summarize every page |
| GET | /api/v1/pages/overview | Get every page's state |
Audit log
Who changed what in Status.
| GET | /api/v1/status-audit-logs | List the Status audit log |
Public pages
What visitors of a public page read. No API key.
| GET | /api/v1/public/pages/{pageID} | Read a public page |
| GET | /api/v1/public/pages/by-domain/{domain} | Read a public page by domain |
| GET | /api/v1/public/pages/{pageID}/feed.rss | RSS feed |
| GET | /api/v1/public/pages/by-domain/{domain}/feed.rss | RSS feed by domain |
| GET | /api/v1/public/pages/{pageID}/feed.atom | Atom feed |
| GET | /api/v1/public/pages/by-domain/{domain}/feed.atom | Atom feed by domain |
