API Reference
Status

Status API

Query status page data, including public endpoints that don't require authentication.

Get Organization Status

GET /api/v1/status/{slug}

Get the overall status of an organization. This is a public endpoint—no authentication required.

Path Parameters

ParameterTypeDescription
slugstringOrganization slug

Response

{
  "overallStatus": "operational",
  "monitors": {
    "total": 10,
    "operational": 9,
    "degraded": 1,
    "down": 0
  },
  "activeIncidents": 0,
  "uptime": {
    "day": 99.95,
    "week": 99.90,
    "month": 99.85
  },
  "components": [
    {
      "name": "API Services",
      "status": "operational",
      "monitors": [
        {
          "id": "mon_abc123",
          "name": "REST API",
          "status": "up"
        }
      ]
    }
  ]
}

Status Values

StatusDescription
operationalAll systems operational
degradedSome performance issues
partial_outageSome services down
major_outageMajor service disruption

Example

curl -X GET "https://statly.live/api/v1/status/acme"

Get RSS Feed

GET /api/v1/feed/{slug}

Get incident updates as an RSS 2.0 feed. Public endpoint.

Response

Returns XML RSS feed:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Acme Status</title>
    <link>https://acme.statly.live</link>
    <description>Status updates for Acme</description>
    <item>
      <title>API Performance Degradation - Resolved</title>
      <description>Fix deployed. All systems operational.</description>
      <pubDate>Mon, 15 Jan 2024 13:00:00 GMT</pubDate>
      <guid>inc_abc123</guid>
    </item>
  </channel>
</rss>

Cache Control

Cache-Control: public, max-age=300

The feed is cached for 5 minutes.


Get Widget Data

GET /api/v1/widget/{slug}

Get lightweight status data for embedding. Public endpoint with CORS enabled.

Response

{
  "status": "operational",
  "uptime": 99.95,
  "monitors": 10,
  "incidents": 0,
  "lastUpdated": "2024-01-15T12:00:00Z"
}

Example: Embed Widget

<script>
  fetch('https://statly.live/api/v1/widget/acme')
    .then(res => res.json())
    .then(data => {
      document.getElementById('status').textContent =
        data.status === 'operational' ? '✅ All Systems Operational' : '⚠️ Issues Detected';
    });
</script>
<div id="status">Loading...</div>

Get Status Badge

GET /api/v1/badge/{slug}/{monitorId}

Get an SVG badge showing uptime. Public endpoint.

Query Parameters

ParameterTypeDescription
stylestringflat, flat-square, plastic, for-the-badge
labelstringCustom label text

Response

Returns SVG image:

<svg xmlns="http://www.w3.org/2000/svg" width="100" height="20">
  <rect width="50" height="20" fill="#555"/>
  <rect x="50" width="50" height="20" fill="#4c1"/>
  <text x="25" y="14" fill="#fff">uptime</text>
  <text x="75" y="14" fill="#fff">99.9%</text>
</svg>

Example: README Badge

![API Status](https://statly.live/api/v1/badge/acme/mon_abc123?style=for-the-badge)

Example: HTML Embed

<img src="https://statly.live/api/v1/badge/acme/mon_abc123"
     alt="API Uptime"
     style="max-width: 100%;">

Subscribe to Updates

POST /api/v1/subscribe

Subscribe an email to status updates. Requires Turnstile verification.

Request Body

FieldTypeRequiredDescription
orgSlugstringYesOrganization slug
emailstringYesSubscriber email
turnstileTokenstringYesCloudflare Turnstile token
componentsarrayNoComponent IDs to subscribe to

Response

{
  "success": true,
  "message": "Verification email sent. Please check your inbox."
}

Rate Limit

10 requests per minute per IP address.