API Documentation

Access IncidentHub data programmatically. All endpoints return JSON and require no authentication for read access.

Base URL

https://incidenthub-bay.vercel.app

Data Endpoints

GET/api/incidents

List incidents with filtering and pagination

Parameters

companystringFilter by company slug (e.g. aws, github)
severitystringFilter by severity: critical, high, medium, low
searchstringFull-text search on title and summary
tagstringFilter by tag name (e.g. network, api)
dateFromstringStart date filter (YYYY-MM-DD)
dateTostringEnd date filter (YYYY-MM-DD)
pagenumberPage number (default: 1)
page_sizenumberResults per page (default: 20)

Example

/api/incidents?company=aws&severity=critical&page=1
GET/api/incidents/:id

Get detailed incident by ID, including timeline and sources

Parameters

idnumberIncident ID

Example

/api/incidents/413
GET/api/incidents/:id/similar

Find similar incidents based on shared tags

Parameters

idnumberIncident ID
limitnumberMax results (default: 5)

Example

/api/incidents/413/similar
GET/api/companies

List all tracked companies with service info

Example

/api/companies
GET/api/companies/:slug

Get company details by slug

Parameters

slugstringCompany slug (e.g. aws)

Example

/api/companies/aws
GET/api/companies/:slug/stats

Company-specific stats: incidents, severity breakdown, reliability score, uptime

Parameters

slugstringCompany slug

Example

/api/companies/aws/stats
GET/api/stats

Global statistics: incident counts, monthly trends, reliability leaderboard, resolution times

Example

/api/stats
GET/api/reliability

Reliability leaderboard: all companies ranked by reliability score

Example

/api/reliability

Alert Endpoints

GET/api/alerts

List your active alert subscriptions

Example

/api/alerts
POST/api/alerts

Create a new alert subscription (webhook, Slack, PagerDuty, OpsGenie, or email)

Parameters

webhookUrlstringWebhook URL — auto-detects Slack, Google Chat, PagerDuty, OpsGenie
emailstringEmail address for alert delivery
companyIdsnumber[]Filter by company IDs (empty = all)
severityFilterstring[]Filter by severity (empty = all)
slackFormatbooleanSend Slack Block Kit formatted payloads

Example

POST /api/alerts
{
  "webhookUrl": "https://hooks.slack.com/services/...",
  "companyIds": [],
  "severityFilter": ["critical", "high"],
  "slackFormat": true
}
DELETE/api/alerts/:id

Delete an alert subscription

Parameters

idnumberSubscription ID

Example

DELETE /api/alerts/1

Webhook Payload Format

When a new incident is detected, subscribed webhooks receive a POST request with this payload:

{
  "event": "new_incident",
  "incident": {
    "id": 413,
    "title": "Elevated Error Rates for API",
    "severity": "high",
    "company": "OpenAI",
    "sourceUrl": "https://status.openai.com/...",
    "timestamp": "2026-03-06T12:00:00.000Z"
  }
}

Slack Integration

Set slackFormat: true when creating an alert subscription. The webhook will send Slack Block Kit formatted messages:

{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "🚨 New Incident: OpenAI"
      }
    },
    {
      "type": "section",
      "fields": [
        { "type": "mrkdwn", "text": "*Title:*\nElevated Error Rates" },
        { "type": "mrkdwn", "text": "*Severity:*\nšŸ”“ critical" }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": { "type": "plain_text", "text": "View Incident" },
          "url": "https://incidenthub-bay.vercel.app/incident/413"
        }
      ]
    }
  ]
}

Public Status API

GET/api/v1/status/:provider

Get real-time status for a specific provider. Use 'all' for all providers.

Parameters

providerstringCompany slug (e.g. openai, aws) or "all"

Example

/api/v1/status/openai

Response

{
  "provider": "openai",
  "name": "OpenAI",
  "status": "operational",
  "activeIncidents": [],
  "incidents24h": 0,
  "incidents7d": 3,
  "lastIncident": { ... },
  "updatedAt": "2026-03-11T..."
}

Uptime Badge

Embed a live status badge in your README or documentation. Updates every 5 minutes.

OpenAI StatusAnthropic StatusAWS Status

Markdown

[![OpenAI Status](https://incidenthub-bay.vercel.app/api/badge/openai)](https://incidenthub-bay.vercel.app/openai-outages)
[![Anthropic Status](https://incidenthub-bay.vercel.app/api/badge/anthropic)](https://incidenthub-bay.vercel.app/anthropic-outages)

HTML

<a href="https://incidenthub-bay.vercel.app/openai-outages">
  <img src="https://incidenthub-bay.vercel.app/api/badge/openai" alt="OpenAI Status" />
</a>

Embeddable Status Widget

Add a live status widget to your website. Shows real-time status for your chosen AI and cloud providers.

Basic usage

<script src="https://incidenthub-bay.vercel.app/api/widget?providers=openai,anthropic,aws" async></script>

Dark theme

<script src="https://incidenthub-bay.vercel.app/api/widget?providers=openai,anthropic&theme=dark" async></script>

Parameters

providersComma-separated provider slugs. Omit for all providers.
theme"light" (default) or "dark"

Authentication

Public endpoints work without authentication. For tracked usage and higher rate limits, pass your API key as a Bearer token:

curl -H "Authorization: Bearer ih_YOUR_API_KEY" \
  https://incidenthub-bay.vercel.app/api/v1/status/openai

Generate your API key in Profile Settings.

Rate Limits

Rate limits depend on your plan. Without an API key, fair usage applies.

PlanRequests / Day
Free100
Pro5,000
Teams50,000
EnterpriseUnlimited