API Reference
Free REST API to monitor the status of 500+ services. No authentication required — optional API keys unlock higher rate limits.
Base URL
https://www.bluemonitor.org/api/v1Authentication
Authentication is optional. All endpoints work without an API key, but authenticated requests get higher rate limits (60/min vs 15/min).
To get an API key, sign in with GitHub and create one from your dashboard.
curl -H "Authorization: Bearer bm_your_api_key" \
https://www.bluemonitor.org/api/v1/services| Tier | Rate Limit | Auth Required |
|---|---|---|
| Anonymous | 15 req/min per IP | No |
| Authenticated | 60 req/min per key | Authorization: Bearer bm_... |
Rate Limiting
All endpoints are rate limited. Rate limit information is included in response headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per window (60) |
X-RateLimit-Remaining | Remaining requests in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Retry-After | Seconds to wait (only on 429 responses) |
Endpoints
/api/v1/status/:slugGet the current status of a specific service.
Path Parameters
:slug— Service identifier (e.g., "chatgpt", "discord", "github")Example
curl https://www.bluemonitor.org/api/v1/status/chatgptResponse
{
"slug": "chatgpt",
"name": "ChatGPT",
"domain": "chatgpt.com",
"category": "ai",
"status": "up",
"response_time": 245,
"last_checked": "2026-02-12T03:15:00.000Z",
"latest_check": {
"status": "up",
"response_time": 245,
"status_code": 200,
"checked_at": "2026-02-12T03:15:00.000Z"
}
}/api/v1/servicesList all monitored services with their current status.
Query Parameters
category— Filter by category (ai, gaming, social-media, streaming, etc.)limit— Number of results to return (max 500)(default: 100)offset— Pagination offset(default: 0)Example
curl https://www.bluemonitor.org/api/v1/services?category=ai&limit=10Response
{
"services": [
{
"slug": "chatgpt",
"name": "ChatGPT",
"domain": "chatgpt.com",
"category": "ai",
"status": "up",
"response_time": 245,
"last_checked": "2026-02-12T03:15:00.000Z"
}
],
"total": 45,
"limit": 10,
"offset": 0
}/api/v1/incidentsGet recent incidents across all monitored services.
Query Parameters
status— Filter by status (investigating, identified, monitoring, resolved)limit— Number of results (max 100)(default: 50)offset— Pagination offset(default: 0)Example
curl https://www.bluemonitor.org/api/v1/incidents?status=investigating&limit=5Response
{
"incidents": [
{
"id": "abc123",
"title": "Elevated error rates on API",
"description": "We are investigating elevated error rates.",
"severity": "major",
"status": "investigating",
"started_at": "2026-02-12T01:00:00.000Z",
"resolved_at": null,
"source_url": "https://status.example.com/incidents/abc123",
"service": {
"name": "Example Service",
"slug": "example"
}
}
],
"limit": 5,
"offset": 0
}/api/v1/incidents/:slugGet incidents for a specific service.
Path Parameters
:slug— Service identifierQuery Parameters
limit— Number of results (max 50)(default: 20)Example
curl https://www.bluemonitor.org/api/v1/incidents/claudeResponse
{
"service": {
"name": "Claude",
"slug": "claude"
},
"incidents": [
{
"id": "xyz789",
"title": "Elevated errors on Claude Opus 4.6",
"description": "This incident has been resolved.",
"severity": "minor",
"status": "resolved",
"started_at": "2026-02-11T08:21:00.000Z",
"resolved_at": "2026-02-11T09:00:00.000Z",
"source_url": "https://status.anthropic.com/..."
}
]
}/api/v1/heartbeatPush a heartbeat from your service. Requires API key. Auto-registers the service on first call.
Request Body
{
"domain": "myapp.com",
"status": "ok",
"timestamp": "2026-02-12T12:00:00.000Z",
"checks": {
"database": { "status": "ok", "latency": 5 },
"redis": { "status": "ok", "latency": 2 }
}
}Example
curl -X POST "https://www.bluemonitor.org/api/v1/heartbeat" \
-H "Authorization: Bearer bm_your_api_key" \
-H "Content-Type: application/json" \
-d '{"domain":"myapp.com","status":"ok","checks":{"database":{"status":"ok","latency":5}}}'Response
{
"ok": true,
"service": "My App",
"status": "up",
"response_time": 5,
"checked_at": "2026-02-12T12:00:00.000Z"
}Status Badge
Embed a real-time status badge on your website, README, or docs. The badge is a PNG image that updates automatically.
/api/badge/:slugReturns a PNG status badge image for a service.
Path Parameters
:slug— Domain with dots replaced by dashes (e.g., "github-com", "vercel-com")Query Parameters
theme— Badge color theme(default: light)Example
curl -o badge.png https://www.bluemonitor.org/api/badge/github-comResponse
PNG image (280x36px)
Content-Type: image/png
Cache-Control: public, s-maxage=300, stale-while-revalidate=60HTML
<a href="https://www.bluemonitor.org/status/your-domain-com">
<img src="https://www.bluemonitor.org/api/badge/your-domain-com" alt="Status" />
</a>Markdown
[](https://www.bluemonitor.org/status/your-domain-com)Status Values
| Value | Description |
|---|---|
up | Service is operational (response < 3s) |
slow | Service is responding slowly (response > 3s) |
down | Service is unreachable or returning errors |
unknown | Not yet checked |
Categories
aisocial-mediagamingstreamingproductivitycloudfinancecommunicationecommercedevelopereducationdeliveryvpnentertainmentispdatinglogisticstravelErrors
| Code | Description |
|---|---|
| 401 | Invalid API key |
| 404 | Service not found |
| 429 | Rate limit exceeded |
| 500 | Internal server error |