API Documentation
Embed status badges and query your status page programmatically. No API key required — all endpoints are public and read-only.
On this page
Badge API
Returns an SVG status badge in shields.io style. Use it in READMEs, documentation, or anywhere that renders images.
/api/badge/{slug}Path parameters
slugstringrequiredYour status page slug (e.g. my-app)
Query parameters
stylestringBadge style. flat (default, rounded) or flat-square.
servicestringFilter to a specific service by name. Case-insensitive. Returns that service's individual status instead of the overall page status.
labelstringOverride the badge label text. Defaults to page name or service name.
Examples
Overall page status
bashcurl https://statusowl.pro/api/badge/my-appSpecific service, square style
bashcurl "https://statusowl.pro/api/badge/my-app?service=API&style=flat-square"Custom label
bashcurl "https://statusowl.pro/api/badge/my-app?label=Uptime"Response
Returns image/svg+xml. Status values: operational, degraded, outage, not found.
Status API
Returns JSON with your page's current status, all services, and active incidents. CORS-enabled — call it from the browser.
/api/status/{slug}Path parameters
slugstringrequiredYour status page slug
Example
bashcurl https://statusowl.pro/api/status/my-appResponse (200 OK)
json{
"page": {
"name": "My App",
"slug": "my-app",
"url": "https://statusowl.pro/my-app"
},
"status": {
"overall": "operational",
"services": [
{
"name": "API",
"status": "operational",
"description": "Core API endpoints"
},
{
"name": "Dashboard",
"status": "degraded",
"description": "Web dashboard"
}
],
"active_incidents": [
{
"title": "Dashboard loading slowly",
"status": "investigating",
"created_at": "2026-04-03T10:30:00Z"
}
]
}
}Error response (404)
json{ "error": "Page not found" }Response fields
page.namestringDisplay name of the status page
page.slugstringURL slug
page.urlstringFull URL to the public status page
status.overallstringOverall status: operational, degraded, outage, none, or unknown
status.services[]arrayEach service with name, status, and description
status.active_incidents[]arrayCurrently unresolved incidents with title, status, and created_at timestamp
Embedding examples
Markdown (GitHub README)
markdown[](https://statusowl.pro/my-app)HTML
html<a href="https://statusowl.pro/my-app">
<img src="https://statusowl.pro/api/badge/my-app" alt="Status" />
</a>JavaScript (fetch status data)
javascriptconst res = await fetch("https://statusowl.pro/api/status/my-app");
const data = await res.json();
if (data.status.overall !== "operational") {
console.warn("Service degraded:", data.status.overall);
}Python (check status in CI)
pythonimport requests
r = requests.get("https://statusowl.pro/api/status/my-app")
status = r.json()["status"]["overall"]
if status != "operational":
print(f"Warning: upstream is {status}")
exit(1)Caching & rate limits
All API responses include Cache-Control: public, max-age=60. Badges and status data refresh every 60 seconds.
There are no rate limits. The API is backed by edge caching. If you're polling, once per minute is plenty.
CORS headers (Access-Control-Allow-Origin: *) are set on the JSON API, so you can call it directly from browser JavaScript.
Ready to set up your status page?
Free tier: 1 page, 5 services. All API endpoints included.
Create your status page