IncidentHub-Bay Docs
Documentation for the site, alerts, and public API
Use IncidentHub-Bay as a live monitoring dashboard, a searchable outage archive, an alerting layer for AI providers, or a JSON API for your own tools and status surfaces.
Use cases
Site, alerts, API
Public read access
No auth
Tracked usage
API keys
Refresh cadence
5 min
Quick Start
Get started in 60 seconds
Fetch your first data from the API with a single request. No authentication required for public read endpoints.
curl https://incidenthub-bay.com/api/incidents?company=openai&severity=critical
Website guide
How to use the website
The main product is the website itself. Most teams start here before wiring the API into internal tools.
Monitoring
Live view of provider health with real-time status indicators, active incident counts, and 24h/7d incident history for every tracked service.
Open monitoring →Provider pages
Dedicated outage history pages per provider with timelines, severity distribution charts, reliability scores, and incident detail drilldowns.
Browse providers →Incident archive
Full-text search across all incidents with multi-filter support: company, severity, date range, and tags. Paginated results with detail views.
Search incidents →Reports and analysis
Annual outage reports with year-over-year comparison, reliability rankings across providers, and global platform statistics.
Open reports →Alerts
Set up alerting for the providers you track
Alerting is plan-aware and tied to the signed-in user. Each subscription can target email or webhooks, with optional severity and provider filters.
- 1
Create an account
Register and sign in so the app can associate alerts, plan limits, and delivery logs with your user.
- 2
Choose providers
Pick tracked companies from the alerts screen. Free, Pro, and Teams plans enforce different watchlist limits.
- 3
Pick a destination
Use webhook delivery for Slack-style cards, Google Chat, PagerDuty, OpsGenie, or generic webhooks. Use email for simple routing.
- 4
Test delivery
Use the test-send action on each subscription to verify formatting and destination health before relying on it in production.
/api/alertsSessionList your active alert subscriptions.
Example
/api/alerts
/api/alertsSessionCreate a new alert subscription for email or webhook delivery.
Parameters
webhookUrlstringWebhook destination. Provider type is auto-detected.emailstringEmail destination for alert delivery.companyIdsnumber[]Tracked company IDs. Empty means all tracked providers.severityFilterstring[]Severity filter. Empty means all severities.slackFormatbooleanSend Slack Block Kit payloads.Example
POST /api/alerts
{
"webhookUrl": "https://hooks.slack.com/services/...",
"companyIds": [],
"severityFilter": ["critical", "high"],
"slackFormat": true
}/api/alerts/:idSessionDelete an alert subscription.
Parameters
idnumberSubscription ID.Example
DELETE /api/alerts/1
/api/alerts/:id/testSessionSend a test alert to verify your webhook or email destination.
Parameters
idnumberSubscription ID.Example
POST /api/alerts/1/test
Webhook integrations
Connect alerts to Slack, PagerDuty, OpsGenie, or Google Chat
Webhook type is auto-detected from the URL pattern. Each platform gets a native payload format with appropriate severity mapping.
Slack
Rich Block Kit cards with action buttons. Auto-detected from hooks.slack.com URLs.
URL pattern
https://hooks.slack.com/services/T.../B.../xxxGoogle Chat
Plain text messages. Auto-detected from chat.googleapis.com URLs.
URL pattern
https://chat.googleapis.com/v1/spaces/.../messages?key=...PagerDuty
Events API v2 with severity mapping. Auto-detected from events.pagerduty.com URLs.
URL pattern
https://events.pagerduty.com/v2/enqueue?routing_key=...OpsGenie
Alert creation with priority mapping. Auto-detected from opsgenie.com URLs.
URL pattern
https://api.opsgenie.com/v2/alerts?apiKey=...Generic Webhook
Standard JSON payload sent to any HTTP endpoint.
URL pattern
https://your-server.com/webhookAPI
Public API reference
Public read endpoints return JSON and are intended for dashboards, scripts, and programmatic access to outage history and current status.
/api/incidentsNo authList incidents with filtering and pagination.
Parameters
companystringCompany slug such as aws or github.severitystringSeverity filter: critical, high, medium, low.searchstringCase-insensitive search on title and summary.tagstringTag filter such as network or api.dateFromstringStart date in YYYY-MM-DD format.dateTostringEnd date in YYYY-MM-DD format.pagenumberPage number. Default: 1.page_sizenumberResults per page. Default: 20.Example
/api/incidents?company=aws&severity=critical&page=1
Returns up to page_size results (default 20), sorted by startTime descending.
/api/incidents/:idNo authGet detailed incident data, including timeline and sources.
Parameters
idnumberIncident ID.Example
/api/incidents/413
/api/incidents/:id/similarNo authFind similar incidents based on shared tags.
Parameters
idnumberIncident ID.limitnumberMaximum results. Default: 5.Example
/api/incidents/413/similar
/api/companiesNo authList all tracked companies and the services attached to them.
Example
/api/companies
/api/companies/:slugNo authGet company details by slug.
Parameters
slugstringCompany slug such as aws.Example
/api/companies/aws
/api/companies/:slug/statsNo authCompany-specific incident volume, severity mix, uptime, and reliability score.
Parameters
slugstringCompany slug.Example
/api/companies/aws/stats
/api/statsNo authGlobal statistics across the dataset.
Example
/api/stats
/api/reliabilityNo authReliability leaderboard across tracked providers.
Example
/api/reliability
Accounts and keys
Authentication, API keys, and account flows
Most read endpoints are public. Authentication matters when you need account management, API key generation, or user-scoped alerting.
/api/registerNo authCreate a user account and start the selected plan flow.
Parameters
namestringUser display name.emailstringEmail address.companystringOptional company name.passwordstringPassword, minimum 8 characters.planstringfree, pro, or teams.Example
POST /api/register
{
"name": "Ada Lovelace",
"email": "ada@example.com",
"password": "correct horse battery staple",
"plan": "pro"
}/api/loginNo authSign in and establish the session cookie.
Parameters
emailstringAccount email.passwordstringAccount password.Example
POST /api/login
{
"email": "ada@example.com",
"password": "correct horse battery staple"
}/api/logoutSessionSign out and clear the session cookie.
Example
POST /api/logout
/api/meSessionReturn the current signed-in user, if any.
Example
/api/me
/api/keysSessionGenerate a new API key for tracked usage and higher rate limits.
Example
POST /api/keys
The full key is only returned once. Store it securely.
/api/keysSessionRevoke the current API key.
Example
DELETE /api/keys
/api/forgot-passwordNo authRequest a password reset link via email.
Parameters
emailstringAccount email address.Example
POST /api/forgot-password
{ "email": "ada@example.com" }/api/reset-passwordNo authComplete the password reset with token from email.
Parameters
tokenstringReset token from the email link.passwordstringNew password, minimum 8 characters.Example
POST /api/reset-password
{ "token": "abc123...", "password": "new secure password" }Bearer key example
curl -H "Authorization: Bearer ih_YOUR_API_KEY" \ https://incidenthub-bay.com/api/v1/status/openai
Generate API keys from Profile Settings.
Real-time status
Status API and response shape
Use the status API for live provider health in bots, health dashboards, or lightweight operational checks. Requires a Bearer API key.
curl -H "Authorization: Bearer ih_YOUR_API_KEY" \ https://incidenthub-bay.com/api/v1/status/openai
/api/v1/status/:providerBearerFetch a single provider or use "all" for the full provider roster.
Parameters
providerstringProvider slug such as openai, aws, or "all".Example
/api/v1/status/all
Example response
{
"provider": "openai",
"name": "OpenAI",
"status": "operational",
"activeIncidents": [],
"incidents24h": 0,
"incidents7d": 3,
"lastIncident": {
"title": "Elevated error rates",
"severity": "high",
"startedAt": "2026-03-06T12:00:00.000Z",
"resolvedAt": "2026-03-06T13:20:00.000Z"
},
"updatedAt": "2026-03-13T09:30:00.000Z"
}Cache-Control: public, s-maxage=300). Use "all" to fetch every tracked provider in a single request.Rate limits by plan
| Plan | Requests / day |
|---|---|
| Free | 100 |
| Pro | 5,000 |
| Teams | 50,000 |
| Enterprise | Unlimited |
Error handling
Error responses and status codes
All error responses return JSON with an error field. Rate-limited requests return 429 with a Retry-After suggestion.
| Status | Label | Description |
|---|---|---|
| 400 | Bad Request | Missing or invalid parameters. |
| 401 | Unauthorized | Authentication required or invalid API key. |
| 403 | Forbidden | Plan limit exceeded (e.g., watchlist quota). |
| 404 | Not Found | Resource does not exist. |
| 429 | Too Many Requests | Rate limit exceeded. Back off and retry. |
| 500 | Server Error | Unexpected server error. Contact support. |
Example error response
{
"error": "Provider not found",
"available": ["aws", "openai", "anthropic", "cloudflare", ...]
}Embeds
Badges, widgets, and embed codes
Use the embeddable surfaces when you want live status without building a client from scratch.
Badge embed (Markdown)
[](https://incidenthub-bay.com/openai-outages)
Badge embed (HTML)
<a href="https://incidenthub-bay.com/openai-outages">
<img src="https://incidenthub-bay.com/api/badge/openai"
alt="OpenAI Status" />
</a>Widget embed
<script src="https://incidenthub-bay.com/api/widget?providers=openai,anthropic,aws" async></script>
Add the script tag to any HTML page. The widget renders a compact status strip for the specified providers.