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

GET/api/status_pages

Retrieve a paginated list of all status pages in your account

Query Parameters

NameTypeRequiredDescription
pageintegerNoPage number for paginationDefault: 1Example: 2
per_pageintegerNoItems per page (max 100)Default: 20Example: 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
    }
  }
}
GET/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"
    }
  }
}
POST/api/status_pages

Create a new status page

Body Parameters

NameTypeRequiredDescription
namestringYesDisplay name for the status pageExample: Public Status Page
monitorsarrayYesArray of monitor IDs to display (min: 1, max: 20)Example: ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"]
periodintegerNoDays of history to show: 7, 30, or 90Default: 7Example: 30
custom_domainstringNoCustom domain for the status pageExample: status.example.com
show_incident_reasonsbooleanNoWhether to show incident reasons publiclyDefault: falseExample: true
basic_authstringNoBasic 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"
    }
  }
}
PATCH/api/status_pages/:id

Update an existing status page. All fields are optional.

Body Parameters

NameTypeRequiredDescription
namestringNoDisplay name for the status pageExample: Public Status Page
monitorsarrayNoArray of monitor IDs to display (min: 1, max: 20)Example: ["507f1f77bcf86cd799439012", "507f1f77bcf86cd799439013"]
periodintegerNoDays of history to show: 7, 30, or 90Default: 7Example: 30
custom_domainstringNoCustom domain for the status pageExample: status.example.com
show_incident_reasonsbooleanNoWhether to show incident reasons publiclyDefault: falseExample: true
basic_authstringNoBasic 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"
    }
  }
}
DELETE/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
  }'