Embed Widget
The One Status provides a public JSON API that powers the embed widget pattern — a small status badge you can add to any website to show real-time overall status.
Summary JSON Endpoint
Every status page exposes a lightweight summary endpoint:
GET https://api.theonestatus.app/api/public/{subdomain}/summary.json
Response:
{
"status": {
"indicator": "operational",
"description": "All Systems Operational"
},
"page": {
"name": "Acme IT Services Status",
"url": "https://acme.theonestatus.app",
"updated_at": "2026-03-09T14:30:00.000Z"
}
}
Possible indicator values: operational, degraded, partial_outage, major_outage, maintenance.
This endpoint is publicly accessible (no authentication), CORS-enabled, and cached with a 10-second TTL.
Building a Status Badge
You can use the summary endpoint to build a status badge in vanilla JavaScript:
<div id="status-badge">
<span id="status-indicator"></span>
<span id="status-text">Loading...</span>
</div>
<script>
fetch('https://api.theonestatus.app/api/public/acme/summary.json')
.then(res => res.json())
.then(data => {
const colors = {
operational: '#10B981',
degraded: '#F59E0B',
partial_outage:'#F97316',
major_outage: '#EF4444',
maintenance: '#3B82F6',
};
const indicator = document.getElementById('status-indicator');
const text = document.getElementById('status-text');
const status = data.data.status.indicator;
indicator.style.cssText = `
display: inline-block;
width: 10px;
height: 10px;
border-radius: 50%;
background: ${colors[status] || '#6B7280'};
margin-right: 6px;
`;
text.textContent = data.data.status.description;
})
.catch(() => {
document.getElementById('status-text').textContent = 'Status unavailable';
});
</script>
Replace acme with your actual subdomain.
Embedding on Your Website
Add the badge to your:
- Website footer — "All Systems Operational ●" linking to your full status page
- Support portal login page — clients see system health before submitting tickets
- Client onboarding emails — link and badge in your email signature
Embedding on the MSP Client Portal
If you use The One Portal, you can embed a status widget in the Portal dashboard using an iframe or JavaScript snippet pointing to the summary endpoint or the public status page.
<!-- Status Page iframe (full page view) -->
<iframe
src="https://acme.theonestatus.app"
width="100%"
height="400"
frameborder="0"
title="Service Status"
></iframe>
Components JSON Endpoint
To build a more detailed widget showing per-component status, use the components endpoint:
GET https://api.theonestatus.app/api/public/{subdomain}/components.json
Response:
{
"data": {
"components": [
{
"id": "comp-001",
"name": "Help Desk",
"status": "operational",
"description": "Ticket submission and support",
"updated_at": "2026-03-09T12:00:00.000Z"
},
{
"id": "comp-002",
"name": "Client Portal",
"status": "degraded",
"description": "Client self-service portal",
"updated_at": "2026-03-09T13:45:00.000Z"
}
]
}
}
Incident History JSON Endpoint
To show recent incidents in a custom UI:
GET https://api.theonestatus.app/api/public/{subdomain}/incidents.json
Supports pagination with cursor and limit query parameters. Returns incidents from the past 90 days with their updates and any published postmortems.
CORS and Caching
All public API endpoints:
- Allow CORS from any origin (suitable for embedding on external websites)
- Set
Cache-Control: public, max-age=10, stale-while-revalidate=30 - Rate-limited per IP to prevent abuse
For high-traffic embed scenarios, consider caching the summary response on your own server and refreshing it every 30–60 seconds to avoid hitting rate limits.