Status API
Everything shown on the IndySoft status page is also published as JSON and RSS, so your monitoring dashboard, helpdesk, chat widget or script can read our current status directly. No key, no sign-up, and the endpoints stay up even when the rest of our platform does not.
How it works
The files below are regenerated and republished every five minutes, and immediately whenever a component changes state or an incident is created, updated or resolved. Each response is a static file served from a CDN with these properties:
- Public, read-only, no authentication. Plain
GETrequests over HTTPS. - CORS enabled (
Access-Control-Allow-Origin: *), so the endpoints can be called straight from a browser. - Cached for 60 seconds (
Cache-Control: public, max-age=60). SendIf-None-Matchwith the previousETagto get a cheap304 Not Modified. - Please poll no more than once a minute. Nothing changes faster than that on our side.
- All timestamps are UTC in ISO 8601 (
2026-09-08T21:26:13.285Z).
Endpoints
Start with summary.json if you want one call that says everything, or status.json if you only need a banner.
| Endpoint | Returns |
|---|---|
GET/api/v2/status.json | Overall indicator and description only. Smallest payload; ideal for a status badge or banner. |
GET/api/v2/summary.json | Overall status, every component with its state, unresolved incidents and upcoming maintenance in one document. |
GET/api/v2/components.json | Components and component groups (regions) with their current state. |
GET/api/v2/incidents.json | Unresolved incidents plus resolved incidents from the past 90 days, newest first, each with its full update timeline. |
GET/api/v2/incidents/unresolved.json | Only incidents that are still open. |
GET/api/v2/scheduled-maintenances.json | Scheduled, in-progress and recently completed maintenance windows. |
GET/api/v2/scheduled-maintenances/upcoming.json | Only maintenance that has not completed yet. |
GET/status.json | The document the status page itself renders: everything above plus a 90-day per-day history for each component. The uptime fields (uptimePercent, uptime30d and the per-day figure) are currently published as null; a customer who needs an uptime figure can request a monthly uptime report. camelCase field names. |
GET/history.rss | RSS 2.0 feed of incidents and maintenance, one item per incident, updated whenever an update is posted. |
Response shape
Every /api/v2/ document starts with a page object and then the section you asked for. A typical status.json:
{
"page": {
"id": "indysoft",
"name": "IndySoft",
"url": "https://status.indysoft.com",
"time_zone": "Etc/UTC",
"updated_at": "2026-09-08T21:26:13.285Z"
},
"status": {
"indicator": "none",
"description": "All Systems Operational"
}
}
A component, as it appears in components.json and summary.json:
{
"id": "7AC3B567230B4CE29381A016CA7BFAD6",
"name": "Americas",
"status": "operational",
"description": "Cloud environments hosted in the US regions",
"group_id": "group-1",
"group": false,
"position": 2,
"updated_at": "2026-08-30T00:47:57.640Z"
}
An incident, as it appears in incidents.json, incidents/unresolved.json and summary.json. Updates are newest first; shortlink deep-links to the incident on the status page:
{
"id": "…",
"name": "Intermittent sign-in failures in Europe",
"status": "monitoring",
"impact": "minor",
"created_at": "2026-09-01T08:12:00.000Z",
"updated_at": "2026-09-01T09:05:00.000Z",
"resolved_at": null,
"shortlink": "https://status.indysoft.com/#incident-…",
"components": [ { "id": "…", "name": "Europe" } ],
"incident_updates": [
{ "status": "monitoring", "body": "A fix has been deployed and we are watching sign-in rates.", "created_at": "2026-09-01T09:05:00.000Z" },
{ "status": "identified", "body": "…", "created_at": "2026-09-01T08:30:00.000Z" }
]
}
Status values
Overall status.indicator
- none
- minor
- major
- critical
- maintenance
none means every component is operational. The description field carries the human-readable text shown at the top of the status page ("All Systems Operational", "Partial System Outage" and so on).
Component status
- operational
- degraded_performance
- partial_outage
- major_outage
- under_maintenance
Incident status
- investigating
- identified
- monitoring
- resolved
Maintenance status
- scheduled
- in_progress
- verifying
- completed
Incident impact
- none
- minor
- major
- critical
- maintenance
Examples
Command line
curl -s https://status.indysoft.com/api/v2/status.json
# Only the unresolved incidents' titles
curl -s https://status.indysoft.com/api/v2/incidents/unresolved.json | jq -r '.incidents[].name'
Browser or Node.js
const res = await fetch('https://status.indysoft.com/api/v2/summary.json');
const summary = await res.json();
console.log(summary.status.description); // "All Systems Operational"
for (const c of summary.components.filter(c => !c.group)) {
console.log(`${c.name}: ${c.status}`); // "Americas: operational"
}
if (summary.incidents.length) {
console.log('Open incident:', summary.incidents[0].name, summary.incidents[0].shortlink);
}
PowerShell
$status = Invoke-RestMethod https://status.indysoft.com/api/v2/status.json
if ($status.status.indicator -ne 'none') { Write-Warning $status.status.description }
A one-line status banner for your intranet
Poll status.json once a minute and show the description; colour it by the indicator.
<div id="indysoft-status"></div>
<script>
async function refresh() {
const r = await fetch('https://status.indysoft.com/api/v2/status.json', { cache: 'no-store' });
const { status } = await r.json();
const el = document.getElementById('indysoft-status');
el.textContent = 'IndySoft: ' + status.description;
el.dataset.indicator = status.indicator; // none | minor | major | critical | maintenance
}
refresh(); setInterval(refresh, 60000);
</script>
Email updates
Prefer to be told? The subscribe form on the status page sends a confirmation email (double opt-in) and then one email per incident update. The same endpoint is available to your own forms:
| Endpoint | Body | Response |
|---|---|---|
POSThttps://indyadmin.indysoft.com/api/status-page/public/subscribe |
{ "email": "you@company.com" } as application/json |
{ "accepted": true, "message": "…" }. accepted is false when the address is invalid or subscriptions are paused. |
Every email contains an unsubscribe link, and the RSS feed carries the same updates for feed readers and chat tools.
Statuspage compatibility
The /api/v2/ paths, field names and status vocabularies match the Atlassian Statuspage public API, which IndySoft used before hosting its own page. Any tool with a "Statuspage URL" or "base URL" setting works when pointed at https://status.indysoft.com; integrations that only accept a statuspage.io page ID cannot be pointed here.
Using Intercom, Slack or another helpdesk? Most support tools can poll summary.json or subscribe to the RSS feed. If you would like IndySoft's status shown inside a tool that needs something more, contact support and tell us which one.
Changes
We treat these endpoints as a contract. New fields may be added; existing fields under /api/v2/ will not be renamed or removed. /status.json is the page's own document and may gain fields as the page evolves; it will stay backwards compatible for readers that ignore unknown fields.
Questions or a use case we have not covered? Get in touch.