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/v1

Authentication

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
TierRate LimitAuth Required
Anonymous15 req/min per IPNo
Authenticated60 req/min per keyAuthorization: Bearer bm_...

Rate Limiting

All endpoints are rate limited. Rate limit information is included in response headers:

HeaderDescription
X-RateLimit-LimitMaximum requests per window (60)
X-RateLimit-RemainingRemaining requests in current window
X-RateLimit-ResetUnix timestamp when the window resets
Retry-AfterSeconds to wait (only on 429 responses)

Endpoints

GET/api/v1/status/:slug

Get the current status of a specific service.

Path Parameters

:slugService identifier (e.g., "chatgpt", "discord", "github")

Example

curl https://www.bluemonitor.org/api/v1/status/chatgpt

Response

{
  "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"
  }
}
GET/api/v1/services

List all monitored services with their current status.

Query Parameters

categoryFilter by category (ai, gaming, social-media, streaming, etc.)
limitNumber of results to return (max 500)(default: 100)
offsetPagination offset(default: 0)

Example

curl https://www.bluemonitor.org/api/v1/services?category=ai&limit=10

Response

{
  "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
}
GET/api/v1/incidents

Get recent incidents across all monitored services.

Query Parameters

statusFilter by status (investigating, identified, monitoring, resolved)
limitNumber of results (max 100)(default: 50)
offsetPagination offset(default: 0)

Example

curl https://www.bluemonitor.org/api/v1/incidents?status=investigating&limit=5

Response

{
  "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
}
GET/api/v1/incidents/:slug

Get incidents for a specific service.

Path Parameters

:slugService identifier

Query Parameters

limitNumber of results (max 50)(default: 20)

Example

curl https://www.bluemonitor.org/api/v1/incidents/claude

Response

{
  "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/..."
    }
  ]
}
POST/api/v1/heartbeat

Push 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.

GET/api/badge/:slug

Returns a PNG status badge image for a service.

Path Parameters

:slugDomain with dots replaced by dashes (e.g., "github-com", "vercel-com")

Query Parameters

themeBadge color theme(default: light)

Example

curl -o badge.png https://www.bluemonitor.org/api/badge/github-com

Response

PNG image (280x36px)

Content-Type: image/png
Cache-Control: public, s-maxage=300, stale-while-revalidate=60

HTML

<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

[![Status](https://www.bluemonitor.org/api/badge/your-domain-com)](https://www.bluemonitor.org/status/your-domain-com)

Status Values

ValueDescription
upService is operational (response < 3s)
slowService is responding slowly (response > 3s)
downService is unreachable or returning errors
unknownNot yet checked

Categories

aisocial-mediagamingstreamingproductivitycloudfinancecommunicationecommercedevelopereducationdeliveryvpnentertainmentispdatinglogisticstravel

Errors

CodeDescription
401Invalid API key
404Service not found
429Rate limit exceeded
500Internal server error