Status Pages API
Create and manage public status pages to share the health status of your monitored services with customers or team members.
Base URL: https://api.uptime-monitor.io/api
All endpoints require authentication using Bearer tokens with API keys. See Authentication for details.
Rate limits apply to all API endpoints (5000 points/hour). See Rate Limiting for details.
Overview
The Status Pages API allows you to programmatically create and manage public status pages. Status pages provide real-time visibility into the health of your services, helping you communicate transparently with customers during incidents.
Custom Domains
Use your own domain or our subdomain. Automatic HTTPS included.
Historical Data
Show 7, 30, or 90 days of uptime history with detailed metrics.
Access Control
Optional basic authentication to restrict access to authorized viewers.
Incident Details
Choose whether to display incident reasons to build customer trust.
Endpoints
/api/status_pages
Retrieve a paginated list of all status pages in your account
Query Parameters
Name | Type | Required | Description |
---|---|---|---|
page | integer | No | Page number for paginationDefault: 1 Example: 2 |
per_page | integer | No | Items per page (max 100)Default: 20 Example: 50 |
Example Request
curl -X GET "https://api.uptime-monitor.io/api/status_pages?page=1&per_page=20" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Example Response
{
"status": "ok",
"data": {
"status_pages": [
{
"id": "507f1f77bcf86cd799439011",
"name": "Public Status Page",
"monitors": ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"],
"period": 7,
"custom_domain": "status.example.com",
"show_incident_reasons": true,
"basic_auth": "user:password",
"created_at": 1704067200,
"url": "https://status.example.com"
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total": 5,
"total_pages": 1,
"has_next": false,
"has_prev": false
}
}
}
/api/status_pages/:id
Retrieve details of a specific status page
Example Request
curl -X GET "https://api.uptime-monitor.io/api/status_pages/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Example Response
{
"status": "ok",
"data": {
"status_page": {
"id": "507f1f77bcf86cd799439011",
"name": "Public Status Page",
"monitors": ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"],
"period": 7,
"custom_domain": "status.example.com",
"show_incident_reasons": true,
"basic_auth": "user:password",
"created_at": 1704067200,
"url": "https://status.example.com"
}
}
}
/api/status_pages
Create a new status page
Body Parameters
Name | Type | Required | Description |
---|---|---|---|
name | string | Yes | Display name for the status pageExample: Public Status Page |
monitors | array | Yes | Array of monitor IDs to display (min: 1, max: 20)Example: ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"] |
period | integer | No | Days of history to show: 7, 30, or 90Default: 7 Example: 30 |
custom_domain | string | No | Custom domain for the status pageExample: status.example.com |
show_incident_reasons | boolean | No | Whether to show incident reasons publiclyDefault: false Example: true |
basic_auth | string | No | Basic authentication credentials in "username:password" formatExample: viewer:secretpass |
Example Request
curl -X POST "https://api.uptime-monitor.io/api/status_pages" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "My Public Status Page",
"monitors": ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"],
"period": 30,
"custom_domain": "status.mycompany.com",
"show_incident_reasons": true,
"basic_auth": "viewer:secretpass"
}'
Example Response
{
"status": "ok",
"data": {
"status_page": {
"id": "507f1f77bcf86cd799439011",
"name": "My Public Status Page",
"monitors": ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"],
"period": 30,
"custom_domain": "status.mycompany.com",
"show_incident_reasons": true,
"basic_auth": "viewer:secretpass",
"created_at": 1704067200,
"url": "https://status.mycompany.com"
}
}
}
/api/status_pages/:id
Update an existing status page. All fields are optional.
Body Parameters
Name | Type | Required | Description |
---|---|---|---|
name | string | No | Display name for the status pageExample: Public Status Page |
monitors | array | No | Array of monitor IDs to display (min: 1, max: 20)Example: ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"] |
period | integer | No | Days of history to show: 7, 30, or 90Default: 7 Example: 30 |
custom_domain | string | No | Custom domain for the status pageExample: status.example.com |
show_incident_reasons | boolean | No | Whether to show incident reasons publiclyDefault: false Example: true |
basic_auth | string | No | Basic authentication credentials in "username:password" formatExample: viewer:secretpass |
Example Request
curl -X PATCH "https://api.uptime-monitor.io/api/status_pages/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Status Page Name",
"monitors": ["507f1f77bcf86cd799439014"],
"period": 90,
"show_incident_reasons": false,
"basic_auth": null
}'
Example Response
{
"status": "ok",
"data": {
"status_page": {
"id": "507f1f77bcf86cd799439011",
"name": "Updated Status Page Name",
"monitors": ["507f1f77bcf86cd799439014"],
"period": 90,
"custom_domain": "status.mycompany.com",
"show_incident_reasons": false,
"basic_auth": null,
"created_at": 1704067200,
"url": "https://status.mycompany.com"
}
}
}
/api/status_pages/:id
Permanently delete a status page
Example Request
curl -X DELETE "https://api.uptime-monitor.io/api/status_pages/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Example Response
{
"status": "ok",
"data": {
"message": "Status page deleted successfully"
}
}
Field Details
Period Values
- •
7
- Show 7 days of uptime history (default) - •
30
- Show 30 days of uptime history - •
90
- Show 90 days of uptime history
URL Generation
The status page URL is automatically generated based on your configuration:
- • If
custom_domain
is set:https://{custom_domain}
- • Otherwise:
https://status.uptime-monitor.io/{id}
Custom Domain Requirements
- • Must be a valid domain name
- • Cannot end with “uptime-monitor.io”
- • Must contain at least one dot (no top-level domains)
- • Cannot contain forward slashes
- • Domain must be configured to point to our servers
Basic Authentication
Protect your status page with basic authentication:
- • Format:
username:password
- • Set to
null
to disable authentication - • When enabled, visitors must authenticate to view the status page
Monitor Selection
- • Minimum 1 monitor, maximum 20 monitors per status page
- • Monitor order in the array determines display order
- • All monitors must belong to your account
- • Removing a monitor from your account automatically removes it from status pages
Error Responses
400 Bad Request
{
"status": "error",
"error": "Invalid status page ID",
"error_code": "VALIDATION_ERROR"
}
Common validation errors:
- • “You must select at least one monitor”
- • “Maximum 20 monitors allowed per status page”
- • “Invalid domain name”
- • “You cannot use uptime-monitor.io domain here”
- • “Monitor {id} not found or doesn't belong to your account”
404 Not Found
{
"status": "error",
"error": "Status page not found",
"error_code": "STATUS_PAGE_NOT_FOUND"
}
429 Too Many Requests
{
"error": "rate_limit_exceeded",
"message": "Too many requests. Please retry later.",
"retry_after": 3600
}
Examples
Create a Simple Status Page
Create a basic status page with default settings:
curl -X POST "https://api.uptime-monitor.io/api/status_pages" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Service Status",
"monitors": ["507f1f77bcf86cd799439012"]
}'
Create a Status Page with Custom Domain
Create a fully customized status page with all options:
curl -X POST "https://api.uptime-monitor.io/api/status_pages" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Company Status Page",
"monitors": ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"],
"period": 30,
"custom_domain": "status.mycompany.com",
"show_incident_reasons": true,
"basic_auth": "viewer:secretpass"
}'
Update Monitor Selection
Change which monitors are displayed on the status page:
curl -X PATCH "https://api.uptime-monitor.io/api/status_pages/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"monitors": ["507f1f77bcf86cd799439014", "507f1f77bcf86cd799439015"]
}'
Remove Basic Authentication
Make a status page publicly accessible by removing authentication:
curl -X PATCH "https://api.uptime-monitor.io/api/status_pages/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer um_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"basic_auth": null
}'