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
| Parameter | Type | Description |
|---|---|---|
slug | string | Organization 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
| Status | Description |
|---|---|
operational | All systems operational |
degraded | Some performance issues |
partial_outage | Some services down |
major_outage | Major 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=300The 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
| Parameter | Type | Description |
|---|---|---|
style | string | flat, flat-square, plastic, for-the-badge |
label | string | Custom 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
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/subscribeSubscribe an email to status updates. Requires Turnstile verification.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
orgSlug | string | Yes | Organization slug |
email | string | Yes | Subscriber email |
turnstileToken | string | Yes | Cloudflare Turnstile token |
components | array | No | Component IDs to subscribe to |
Response
{
"success": true,
"message": "Verification email sent. Please check your inbox."
}Rate Limit
10 requests per minute per IP address.