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 endpointsOpenAPI 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.jsonMCP 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 agentCommand-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 CLIREST 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.
curl -s https://www.pulsapi.com/api/services/github | jq '{name, currentStatus, uptimePercent}'curl -s "https://www.pulsapi.com/api/services?status=MAJOR_OUTAGE&limit=50" | jq '.content[].name'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
| Operation | Endpoint | Returns |
|---|---|---|
| listServices | GET /api/services | Paged catalog with current status and 30-day uptime |
| getService | GET /api/services/{slug} | One vendor with components and open incidents |
| getServiceHistory | GET /api/services/{slug}/history | Worst status per day, up to 90 days |
| getServiceUptime | GET /api/services/{slug}/uptime | 7/30/90-day uptime and MTTR |
| listIncidents | GET /api/incidents | Cross-vendor incident feed |
| getProvidersOverview | GET /api/status/providers-overview | One aggregate row per provider |
| getServiceSlaReport | GET /api/user/services/{slug}/sla | SLA 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.
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-keysScopes
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.
| Scope | Grants |
|---|---|
| status:read | Read public service, provider, and component status, uptime, and status history. |
| incidents:read | Read incident timelines for the catalog and for individual services. |
| sla:read | Read SLA reports, uptime percentages, MTTR, latency percentiles, and breach history. |
| monitors:read | Read the monitors, boards, and groups configured on the account. |
| monitors:write | Create, update, and delete monitors, boards, groups, and subscriptions. |
| alerts:read | Read alert rules, routes, escalation policies, and delivered alert events. |
| alerts:write | Create, update, and delete alert rules, routes, and escalation policies. |
| account:read | Read account profile, plan, seats, and API-key metadata. |
| mcp:invoke | Call 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.
{
"mcpServers": {
"pulsapi": {
"type": "http",
"url": "https://www.pulsapi.com/api/mcp"
}
}
}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.
npm install -g @pulsapi/cli
# or, without installing:
npx @pulsapi/cli status githubpulsapi 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 worseMachine-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.