EvoHub Docs Sign in

API reference

Status API

Use with AI
View as MarkdownThis page as plain text, for pasting into an AI tool Open in ClaudeAsk Claude questions about this page Open in ChatGPTAsk ChatGPT questions about this page
Connect to Cursor / VS Code / ClaudeSearch and read these docs from your AI tool (MCP server)

MCP server URL

https://docs-dev.evohub.io/mcp

Claude Code

claude mcp add --transport http evohub-docs-docs https://docs-dev.evohub.io/mcp

Claude (claude.ai and Claude Desktop): Settings → Connectors → Add custom connector, and paste the URL above.

Claude Desktop — claude_desktop_config.json

{
  "mcpServers": {
    "evohub-docs-docs": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://docs-dev.evohub.io/mcp"
      ]
    }
  }
}

Cursor — ~/.cursor/mcp.json

{
  "mcpServers": {
    "evohub-docs-docs": {
      "url": "https://docs-dev.evohub.io/mcp"
    }
  }
}

VS Code — .vscode/mcp.json

{
  "servers": {
    "evohub-docs-docs": {
      "type": "http",
      "url": "https://docs-dev.evohub.io/mcp"
    }
  }
}

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

  • bearerAuth HTTP Bearer
    An EvoHub API key (evohub_…) as a bearer token.
  • apiKeyHeader API key in the header X-API-Key
    An EvoHub API key (evohub_…).

Pages

Status pages and their settings.

GET/api/v1/pagesList pages
POST/api/v1/pagesCreate 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-settingsUpdate content and SEO settings

Page appearance

Theme, header links, layout of groups, logos and favicon.

PATCH/api/v1/pages/{pageID}/themeUpdate the theme
PATCH/api/v1/pages/{pageID}/linksUpdate the header
PATCH/api/v1/pages/{pageID}/product-groupsSet how groups are laid out
POST/api/v1/pages/{pageID}/logoUpload the logo
DELETE/api/v1/pages/{pageID}/logoRemove the logo
POST/api/v1/pages/{pageID}/faviconUpload the favicon
DELETE/api/v1/pages/{pageID}/faviconRemove the favicon
GET/api/v1/pages/{pageID}/groups/logosList group logos
POST/api/v1/pages/{pageID}/groups/logoUpload a group's logo
DELETE/api/v1/pages/{pageID}/groups/logoRemove a group's logo

Components

The services a page shows, and their status.

Incidents

Incidents on a page and their timeline.

Maintenance

Scheduled maintenance on a page and its timeline.

Subscribers

People who follow a page by email.

Custom domain

Serve a page on your own subdomain.

GET/api/v1/pages/{pageID}/domainGet the custom domain
POST/api/v1/pages/{pageID}/domainSet the custom domain
DELETE/api/v1/pages/{pageID}/domainRemove the custom domain

Analytics

Cookieless visitor analytics, incidents published and subscriber growth.

GET/api/v1/pages/{pageID}/analyticsGet a page's visitor analytics
GET/api/v1/pages/{pageID}/analytics/hourlyGet a page's views by the hour
GET/api/v1/pages/{pageID}/analytics/export.csvExport analytics as CSV
PATCH/api/v1/pages/{pageID}/analytics/settingsUpdate analytics settings
GET/api/v1/pages/analyticsGet analytics across pages

Overview

Every page's state in one read.

GET/api/v1/pages/summarySummarize every page
GET/api/v1/pages/overviewGet every page's state

Audit log

Who changed what in Status.

GET/api/v1/status-audit-logsList the Status audit log

Public pages

What visitors of a public page read. No API key.

Last updated