StatusAPI provides a set of public, read-only JSON endpoints that expose real-time and historical uptime data for all monitored services. Data is refreshed automatically every 5 minutes via GitHub Actions and served as static files from GitHub Pages.
https://notdeathm.is-a.dev/statusapi
All endpoints return application/json and support HTTPS. No authentication is required. Data is cached by GitHub Pages CDN.
All endpoints are completely public and require no API key or authentication token. Simply make a GET request to any endpoint.
Since all data is served as static JSON files via GitHub Pages CDN, there are no custom rate limits enforced by this API. However, please be mindful of GitHub's standard limits and avoid hammering the endpoints unnecessarily.
All endpoints are read-only GET requests. Responses are UTF-8 encoded JSON.
Returns the real-time status of all monitored services including response times, HTTP status codes, and overall system health.
{
"success": true,
"timestamp": "2026-10-06T12:00:00.000Z",
"version": "4.0",
"totalServices": 2,
"allOperational": true,
"anyDown": false,
"anyDegraded": false,
"summary": {
"countsByStatus": { "up": 2, "degraded": 0, "down": 0 },
"averageResponseTime": 145,
"lastChecked": "2026-10-06T12:00:00.000Z"
},
"services": [
{
"service": {
"id": "notdeath-website",
"name": "NotDeath Portfolio",
"url": "https://notdeathm.is-a.dev",
"type": "http"
},
"currentStatus": {
"status": "up",
"statusCode": 200,
"responseTime": 142,
"lastChecked": "2026-10-06T12:00:00.000Z",
"error": null
},
"uptime30d": 99.98
}
]
}Returns 30 days of daily aggregated history per service. Each day entry includes status, average response time, uptime percentage, and incident count.
{
"success": true,
"timestamp": "2026-10-06T12:00:00.000Z",
"services": [
{
"serviceId": "notdeath-website",
"serviceName": "NotDeath Portfolio",
"overallUptime30d": 99.98,
"history": [
{
"date": "2026-10-05",
"status": "up",
"responseTime": 142,
"avgResponseTime": 138,
"uptime": 100,
"upCount": 288,
"totalCount": 288,
"incidents": 0
}
]
}
]
}Returns all open and resolved incidents. Open incidents are actively ongoing. Closed incidents include resolution time and total duration.
{
"success": true,
"timestamp": "2026-10-06T12:00:00.000Z",
"totalIncidents": 2,
"openIncidents": [],
"closedIncidents": [
{
"id": "notdeath-website-1719000000000",
"serviceId": "notdeath-website",
"serviceName": "NotDeath Portfolio",
"status": "down",
"statusCode": 503,
"startTime": "2026-10-05T12:00:00.000Z",
"resolvedTime": "2026-10-05T12:45:00.000Z",
"durationMs": 2700000,
"resolvedStatus": "up",
"error": null
}
]
}Lightweight versioned endpoint returning a compact health summary. Ideal for integrations, badges, and monitoring hooks.
{
"success": true,
"timestamp": "2026-10-06T12:00:00.000Z",
"version": "4.0",
"status": "operational",
"summary": {
"countsByStatus": { "up": 2, "degraded": 0, "down": 0 },
"averageResponseTime": 145,
"servicesHealthy": 2,
"totalServices": 2,
"uptimePercentage": 100
}
}Same schema as the root status endpoint under a stable, versioned path for long-lived integrations.
// Same schema as /status.json // See "Current Status" above for the full response shape.
Machine-readable API definition for documentation generators, clients, and API testing tools.
{
"openapi": "3.1.0",
"info": { "title": "StatusAPI", "version": "4.0.0" },
"servers": [{ "url": "https://notdeathm.is-a.dev/statusapi" }],
"paths": { "...": "..." }
}Ready-to-use code examples for common integrations.
curl -s "https://notdeathm.is-a.dev/statusapi/status.json" | jq '.services[] | {name: .service.name, status: .currentStatus.status, responseTime: .currentStatus.responseTime}'curl -s "https://notdeathm.is-a.dev/statusapi/api/v1/summary.json" | jq '.status'
curl -s "https://notdeathm.is-a.dev/statusapi/history.json" | jq '.services[] | {name: .serviceName, uptime: .overallUptime30d}'curl -s "https://notdeathm.is-a.dev/statusapi/incidents.json" | jq '.openIncidents'
// Fetch overall system status
const res = await fetch("https://notdeathm.is-a.dev/statusapi/api/v1/summary.json");
const data = await res.json();
if (data.status === "operational") {
console.log("✅ All systems operational");
} else if (data.status === "degraded") {
console.log("⚠️ Partial degradation");
} else {
console.log("🚨 Service outage detected");
}
// Get individual service response times
const status = await fetch("https://notdeathm.is-a.dev/statusapi/status.json").then(r => r.json());
status.services.forEach(({ service, currentStatus }) => {
console.log(`${service.name}: ${currentStatus.responseTime}ms (${currentStatus.status})`);
});Services and incidents use a fixed set of status strings.