Developers

PulsAPI Developer Hub

PulsAPI reads the official status pages of 2463+ cloud and SaaS vendors every 60 seconds and normalises what they publish into one shape. Everything the dashboard renders is available to your own code: over HTTP, through an MCP server, or from a shell. Status reads are open — no account, no key.

Four ways to call PulsAPI

Same data behind all four. Pick the one that fits where your code already lives.

REST API

Read status, components, incidents, uptime, and SLA metrics over plain HTTP. Status reads need no credential.

See the endpoints

OpenAPI 3.1 specification

Every operation typed, with a unique operationId and a description, so a client or a function-calling bridge can be generated straight from it.

/openapi.json

MCP server

Model Context Protocol over Streamable HTTP. Point Claude, ChatGPT, or any MCP client at one URL and it can query vendor status as a tool.

Connect an agent

Command-line interface

Check a vendor, list incidents, and pull an uptime report from a shell or a CI job, with JSON output and a non-zero exit when something is down.

Install the CLI

REST API

Base URL https://www.pulsapi.com/api. Responses are JSON; timestamps are ISO 8601 in UTC; collections come back in a page envelope with content and totalElements.

Is GitHub up right now?
curl -s https://www.pulsapi.com/api/services/github | jq '{name, currentStatus, uptimePercent}'
Every vendor currently not operational
curl -s "https://www.pulsapi.com/api/services?status=MAJOR_OUTAGE&limit=50" | jq '.content[].name'
An authenticated SLA report
curl -s -H "X-API-Key: $PULSAPI_KEY" \
  "https://www.pulsapi.com/api/user/services/stripe/sla?days=90"

The endpoints you will reach for first

OperationEndpointReturns
listServicesGET /api/servicesPaged catalog with current status and 30-day uptime
getServiceGET /api/services/{slug}One vendor with components and open incidents
getServiceHistoryGET /api/services/{slug}/historyWorst status per day, up to 90 days
getServiceUptimeGET /api/services/{slug}/uptime7/30/90-day uptime and MTTR
listIncidentsGET /api/incidentsCross-vendor incident feed
getProvidersOverviewGET /api/status/providers-overviewOne aggregate row per provider
getServiceSlaReportGET /api/user/services/{slug}/slaSLA report (needs sla:read)

The complete list, with typed parameters and response schemas, is in /openapi.json (YAML).

Authentication and scopes

Status reads are open. Anything account-specific — SLA reports, monitors, alert rules — needs an API key, created in Settings → API Keys. Send it as X-API-Key or as a bearer token.

Both forms are accepted
curl -H "X-API-Key: pb_..." https://www.pulsapi.com/api/user/api-keys
curl -H "Authorization: Bearer pb_..." https://www.pulsapi.com/api/user/api-keys

Scopes

Every key carries an explicit scope list, chosen when the key is created. An operation refuses a key that lacks its scope with 403 and names the scope it wanted, so an agent can ask for exactly what it needs and nothing more. Each operation in the OpenAPI document declares its requirement under x-required-scopes.

ScopeGrants
status:readRead public service, provider, and component status, uptime, and status history.
incidents:readRead incident timelines for the catalog and for individual services.
sla:readRead SLA reports, uptime percentages, MTTR, latency percentiles, and breach history.
monitors:readRead the monitors, boards, and groups configured on the account.
monitors:writeCreate, update, and delete monitors, boards, groups, and subscriptions.
alerts:readRead alert rules, routes, escalation policies, and delivered alert events.
alerts:writeCreate, update, and delete alert rules, routes, and escalation policies.
account:readRead account profile, plan, seats, and API-key metadata.
mcp:invokeCall the MCP server at /api/mcp as an AI agent tool surface.

Keys created before scopes existed hold every scope, so nothing that worked before stopped working. Narrow them when you rotate.

MCP server

PulsAPI speaks the Model Context Protocol at https://www.pulsapi.com/api/mcp over Streamable HTTP, protocol revision 2025-06-18. Anonymous clients get the public status tools under a per-IP budget; a key with mcp:invoke lifts that and unlocks the rest.

Claude Desktop / any MCP client
{
  "mcpServers": {
    "pulsapi": {
      "type": "http",
      "url": "https://www.pulsapi.com/api/mcp"
    }
  }
}
Or call it directly
curl -s https://www.pulsapi.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Tools

  • list_servicesList services monitored by PulsAPI with their current status, filterable by category and status.
  • get_service_statusGet the current status and details for one service by its slug.
  • list_incidentsList active or recent incidents across all monitored services.
  • get_component_statusGet the current status of the components inside a service, such as a region or subsystem.
  • get_uptime_reportkey requiredGet uptime statistics and SLA compliance for a service over a time range. Requires a plan with MCP access.

Command-line interface

@pulsapi/cli wraps the same public API. It needs no key for status commands, prints a table by default and JSON with --json, and exits non-zero when a vendor you asked about is not operational — which is what makes it usable as a CI gate.

Install
npm install -g @pulsapi/cli

# or, without installing:
npx @pulsapi/cli status github
Use
pulsapi status github                 # one vendor, human-readable
pulsapi status aws stripe --json      # several, machine-readable
pulsapi incidents --active            # what is broken right now
pulsapi uptime cloudflare --days 90   # uptime and MTTR
pulsapi check openai --fail-on degraded   # exit 1 if degraded or worse

Machine-readable index

Every discovery file PulsAPI publishes. The homepage also advertises them as RFC 8288 Link headers, so an agent can find them from a HEAD / alone.

  • /sitemap.xmlEvery indexable URL on the site, with real last-modified dates.
  • /llms.txtPlain-text site summary: what PulsAPI is, pricing, and the link map.
  • /openapi.jsonThe full public API surface, typed, with an operationId on every operation.
  • /.well-known/mcp.jsonModel Context Protocol server manifest, Streamable HTTP transport.
  • /.well-known/api-catalogRFC 9727 linkset pointing at the spec, docs, and health endpoint.

Something missing?

If an endpoint you need is not in the specification, it is internal rather than unpublished — tell us what you are building and we will look at promoting it.

PulsAPI Developer Hub: API, OpenAPI, MCP Server, CLI