Give your users and team confidence with a clean status page that monitors your API endpoints in real time. Colored indicators show at-a-glance health, response time charts reveal performance trends, uptime percentages track reliability, and an incident log provides transparency during outages. The page reads its status data from a JSON file that an agent can update on a schedule.
Build Prompt
Copy this prompt into Claude Code
Build an API Status Page as a set of static files: index.html (the status page) and status-data.json (the data file the page reads from). No frameworks or dependencies. The HTML embeds all CSS and JavaScript.
STATUS DATA FORMAT (status-data.json):
{
"lastUpdated": "2026-02-28T14:30:00Z",
"overall": "operational",
"services": [
{
"name": "API Gateway",
"url": "https://api.example.com/health",
"status": "operational",
"responseTime": 145,
"uptime": 99.98,
"history": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
},
{
"name": "Authentication Service",
"url": "https://auth.example.com/health",
"status": "operational",
"responseTime": 89,
"uptime": 99.99,
"history": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
},
{
"name": "Database",
"url": "https://api.example.com/db-health",
"status": "degraded",
"responseTime": 892,
"uptime": 99.85,
"history": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5,0.5,1,1,1,1,1,0.5,1,1]
},
{
"name": "CDN",
"url": "https://cdn.example.com/health",
"status": "operational",
"responseTime": 23,
"uptime": 100.0,
"history": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
},
{
"name": "Webhook Delivery",
"url": "https://api.example.com/webhooks/health",
"status": "operational",
"responseTime": 210,
"uptime": 99.95,
"history": [1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1]
}
],
"incidents": [
{
"id": "inc-003",
"title": "Database latency spike",
"status": "monitoring",
"severity": "minor",
"createdAt": "2026-02-28T12:15:00Z",
"updates": [
{ "time": "2026-02-28T14:00:00Z", "message": "Latency returning to normal levels. Continuing to monitor.", "status": "monitoring" },
{ "time": "2026-02-28T12:45:00Z", "message": "Identified slow query causing connection pool saturation. Deploying fix.", "status": "identified" },
{ "time": "2026-02-28T12:15:00Z", "message": "We are investigating reports of increased database response times.", "status": "investigating" }
]
},
{
"id": "inc-002",
"title": "Webhook delivery delays",
"status": "resolved",
"severity": "minor",
"createdAt": "2026-02-27T08:30:00Z",
"resolvedAt": "2026-02-27T09:15:00Z",
"updates": [
{ "time": "2026-02-27T09:15:00Z", "message": "Webhook queue fully drained. All pending webhooks delivered. Issue resolved.", "status": "resolved" },
{ "time": "2026-02-27T08:30:00Z", "message": "Webhook delivery queue backing up. Investigating.", "status": "investigating" }
]
}
]
}
- "history" is an array of 24 values (one per hour, last 24h): 1 = up, 0.5 = degraded, 0 = down
- "status" values: "operational", "degraded", "partial_outage", "major_outage"
- "overall" is derived from worst service status
- Incident "status": "investigating", "identified", "monitoring", "resolved"
- Incident "severity": "minor", "major", "critical"
PAGE LAYOUT:
- Dark theme (background #0d1117, text #c9d1d9)
- Full width, max-width 900px centered
- Header: company/project name (editable in the HTML), overall status banner, last updated time
- Sections: Overall Status, Services List, 24h History Timeline, Current Incidents, Past Incidents
OVERALL STATUS BANNER:
- Full-width rounded card at the top
- Background color based on overall status:
- operational: #22c55e15 with green left border
- degraded: #f59e0b15 with yellow left border
- partial_outage: #f97316a15 with orange left border
- major_outage: #ef444415 with red left border
- Large text: "All Systems Operational" / "Degraded Performance" / "Partial System Outage" / "Major System Outage"
- Small text below: "Last updated 2 minutes ago" (calculated from lastUpdated)
SERVICES LIST:
- Each service is a card/row with:
- Status indicator dot (10px circle): green (#22c55e), yellow (#f59e0b), orange (#f97316), red (#ef4444)
- Service name in white, bold
- Status text in matching color: "Operational", "Degraded", "Partial Outage", "Major Outage"
- Response time badge: "145ms" — color based on speed:
- Under 200ms: green
- 200-500ms: yellow
- Over 500ms: red
- Uptime percentage: "99.98%" — green if over 99.9%, yellow if 99-99.9%, red if under 99%
- 24h mini-timeline bar: 24 thin vertical bars (3px wide each, 24px tall), colored by history value
24-HOUR HISTORY TIMELINE:
- Full-width visualization showing all services
- Each service gets a horizontal row of 24 cells
- Cells colored: green (1), yellow (0.5), red (0)
- X-axis labels: hours from 24h ago to now
- Hover on a cell shows tooltip: "API Gateway — 2:00 PM: Operational"
CURRENT INCIDENTS:
- Section showing active (non-resolved) incidents
- Each incident card has:
- Severity badge: "Minor" (yellow), "Major" (orange), "Critical" (red)
- Title in bold white
- Status badge: "Investigating" (red), "Identified" (orange), "Monitoring" (blue), "Resolved" (green)
- Timeline of updates, most recent first
- Each update shows timestamp (relative), status change, and message
PAST INCIDENTS (last 7 days):
- Collapsible section showing resolved incidents
- Same format as current incidents but with gray styling
- "Resolved" badge and resolution time shown
AUTO-REFRESH:
- Page fetches status-data.json every 60 seconds
- Show a subtle pulse animation on the "Last updated" time when refreshing
- If fetch fails (offline or server error), show "Unable to refresh — showing last known status" in yellow
- Refresh interval selector in footer: 30s, 60s, 5min, Manual
- Manual refresh button
FOOTER:
- "Powered by [Your Company]" link
- Refresh interval selector
- "Subscribe to updates" placeholder link
Make it responsive: on mobile, service cards stack info vertically (name on top, stats below). Timeline cells get slightly larger touch targets. Incident updates use full width.
Update Prompt
Use this prompt to update status data on a schedule via an AI agent
Update the status data for my API status page. Read the current status-data.json file, then check each service endpoint listed in the "services" array by making an HTTP GET request to its "url" field.
For each service:
1. Make a GET request and measure the response time in milliseconds
2. Set the status based on the response:
- HTTP 200 and response time under 500ms → "operational"
- HTTP 200 and response time 500ms-2000ms → "degraded"
- HTTP 200 and response time over 2000ms → "partial_outage"
- Any non-200 response or timeout after 10 seconds → "major_outage"
3. Update the "responseTime" field with the measured value
4. Shift the "history" array: remove the first element, append a new value (1 for operational, 0.5 for degraded, 0 for outage)
5. Recalculate "uptime" as the percentage of history values that are 1 (fully operational)
After checking all services:
- Set "lastUpdated" to the current ISO 8601 timestamp
- Set "overall" to the worst status among all services
- If any service transitioned from "operational" to a non-operational state, add a new incident to the "incidents" array with status "investigating" and an auto-generated message
- If a previously non-operational service returns to "operational", update any related active incident to "resolved" with a resolution message
Write the updated status-data.json file back. Then re-upload it to my AccessAgent site using:
curl -X PUT "https://your-site.accessagent.ai/api/sites/your-site/files/status-data.json" -H "Authorization: Bearer sk_your_key" -H "Content-Type: application/json" --data-binary @status-data.json
Replace the site name, bearer token, and URLs with your actual values.
Make It Yours
Email Notifications
Add a subscribe form that collects email addresses and sends alerts when services go down or incidents are created, using a serverless function.
Response Time Charts
Add expandable response time line charts for each service showing the last 7 days of performance data with min/max/average annotations.
Multi-Region Monitoring
Check endpoints from multiple geographic regions and show per-region latency, helping identify regional performance issues.
Custom Branding
Add a configuration section for logo upload, brand colors, custom favicon, and company name so teams can white-label the page.
Scheduled Maintenance
Add a maintenance window system where you can schedule upcoming maintenance periods that display as blue banners with countdown timers.
Slack/Discord Webhook
Send automated notifications to Slack or Discord channels when status changes, including formatted incident cards with action buttons.
SEO Tips
Target "api status page template", "free status page", and "open source status page" as keywords since developers actively search for these when setting up monitoring.
Write a comparison post "Status Page Solutions Compared: Statuspage vs Betteruptime vs This Free Template" to capture competitive search queries.
Create a guide titled "How to Build a Status Page for Your API" with step-by-step instructions, positioning your template as the recommended solution.
Add the WebApplication structured data schema with category "DeveloperApplication" and screenshot images showing the status page in action.
Publish case studies showing how specific companies use your status page template, generating backlinks from those companies and building authority.
Monetization Ideas
Offer a hosted version ($9/month) that handles monitoring, alerting, and hosting so users don't need to run the update script themselves.
Sell premium themes ($19 one-time) with light/dark modes, gradient styles, and branded layouts that look more polished than the free version.
Create a monitoring agent service ($5/month) that runs the update prompt every minute from multiple global locations and publishes results automatically.
Build an integration marketplace charging developers $2/month per integration (PagerDuty, OpsGenie, Slack, email, SMS).
Offer a "status page as a service" API where SaaS companies embed a status widget in their dashboard, charging $15/month per widget.