Skip to main content

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.