Status Pages

Create and manage public status pages. Associate monitors and customize appearance.Last updated: 2026-02-14

Status pages provide a public-facing view of your service health. Associate monitors and cron jobs to display their status to your users.

GET /v1/status-pages

Returns all status pages for your team.

Required Scope

status-pages:read

Example Request

cURL

curl https://api.uptime.example.com/v1/status-pages \
  -H "Authorization: Bearer uptime_your_api_key"

Response

{
	"statusPages": [
		{
			"id": "sp_abc123",
			"name": "Production Status",
			"slug": "production-status",
			"title": "Production Status",
			"description": "Real-time status of our production services",
			"logoUrl": "https://example.com/logo.png",
			"customDomain": "status.example.com",
			"isPublic": true,
			"showOverallStatus": true,
			"createdAt": "2026-02-10T08:00:00Z",
			"updatedAt": "2026-02-14T12:30:00Z",
			"monitors": [],
			"cronJobs": []
		}
	]
}

Possible Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have status-pages:read scope
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": ["statusPages"],
	"properties": {
		"statusPages": {
			"type": "array",
			"items": {
				"$ref": "#/$defs/statusPage"
			}
		}
	},
	"$defs": {
		"statusPage": {
			"type": "object",
			"required": [
				"id",
				"name",
				"slug",
				"title",
				"description",
				"logoUrl",
				"customDomain",
				"isPublic",
				"showOverallStatus",
				"createdAt",
				"updatedAt",
				"monitors",
				"cronJobs"
			],
			"properties": {
				"id": { "type": "string" },
				"name": { "type": "string", "minLength": 1, "maxLength": 255 },
				"slug": { "type": "string", "pattern": "^[a-z0-9-]+$" },
				"title": { "type": "string", "minLength": 1, "maxLength": 255 },
				"description": { "type": ["string", "null"], "maxLength": 500 },
				"logoUrl": { "type": ["string", "null"], "format": "uri" },
				"customDomain": { "type": ["string", "null"] },
				"isPublic": { "type": "boolean" },
				"showOverallStatus": { "type": "boolean" },
				"createdAt": { "type": "string", "format": "date-time" },
				"updatedAt": { "type": "string", "format": "date-time" },
				"monitors": { "type": "array", "items": { "type": "object" } },
				"cronJobs": { "type": "array", "items": { "type": "object" } }
			}
		}
	}
}

POST /v1/status-pages

Creates a new status page.

Required Scope

status-pages:write

Request Body

FieldTypeRequiredDescription
namestringYesInternal name (1-255 characters)
slugstringYesURL-friendly identifier (lowercase letters, numbers, hyphens only)
titlestringNoDisplay title (1-255 characters, defaults to name)
descriptionstringNoPage description (max 500 characters)
logoUrlstringNoURL to your logo image
customDomainstringNoCustom domain for the status page
isPublicbooleanNoWhether the page is publicly accessible (default: true)
showOverallStatusbooleanNoWhether to display the overall status indicator (default: true)

Example Request

cURL

curl -X POST https://api.uptime.example.com/v1/status-pages \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production Status",
    "slug": "production-status",
    "title": "Service Status",
    "description": "Real-time status of our production services",
    "logoUrl": "https://example.com/logo.png",
    "isPublic": true,
    "showOverallStatus": true
  }'

Response

{
	"id": "sp_abc123",
	"name": "Production Status",
	"slug": "production-status",
	"title": "Service Status",
	"description": "Real-time status of our production services",
	"logoUrl": "https://example.com/logo.png",
	"customDomain": null,
	"isPublic": true,
	"showOverallStatus": true,
	"createdAt": "2026-02-14T12:00:00Z",
	"updatedAt": "2026-02-14T12:00:00Z",
	"monitors": [],
	"cronJobs": []
}

Possible Errors

StatusCodeDescription
400VALIDATION_ERRORInvalid request body or validation failed
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have status-pages:write scope
409CONFLICTA status page with this slug already exists
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Request Body Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": ["name", "slug"],
	"properties": {
		"name": { "type": "string", "minLength": 1, "maxLength": 255 },
		"slug": { "type": "string", "pattern": "^[a-z0-9-]+$" },
		"title": { "type": "string", "minLength": 1, "maxLength": 255 },
		"description": { "type": "string", "maxLength": 500 },
		"logoUrl": { "type": "string", "format": "uri" },
		"customDomain": { "type": "string" },
		"isPublic": { "type": "boolean", "default": true },
		"showOverallStatus": { "type": "boolean", "default": true }
	}
}

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": [
		"id",
		"name",
		"slug",
		"title",
		"description",
		"logoUrl",
		"customDomain",
		"isPublic",
		"showOverallStatus",
		"createdAt",
		"updatedAt",
		"monitors",
		"cronJobs"
	],
	"properties": {
		"id": { "type": "string" },
		"name": { "type": "string", "minLength": 1, "maxLength": 255 },
		"slug": { "type": "string", "pattern": "^[a-z0-9-]+$" },
		"title": { "type": "string", "minLength": 1, "maxLength": 255 },
		"description": { "type": ["string", "null"], "maxLength": 500 },
		"logoUrl": { "type": ["string", "null"], "format": "uri" },
		"customDomain": { "type": ["string", "null"] },
		"isPublic": { "type": "boolean" },
		"showOverallStatus": { "type": "boolean" },
		"createdAt": { "type": "string", "format": "date-time" },
		"updatedAt": { "type": "string", "format": "date-time" },
		"monitors": { "type": "array", "items": { "type": "object" } },
		"cronJobs": { "type": "array", "items": { "type": "object" } }
	}
}

GET /v1/status-pages/:id

Returns a single status page with its associated monitors and cron jobs.

Required Scope

status-pages:read

Path Parameters

ParameterTypeDescription
idstringThe status page ID

Example Request

cURL

curl https://api.uptime.example.com/v1/status-pages/sp_abc123 \
  -H "Authorization: Bearer uptime_your_api_key"

Response

{
	"id": "sp_abc123",
	"name": "Production Status",
	"slug": "production-status",
	"title": "Service Status",
	"description": "Real-time status of our production services",
	"logoUrl": "https://example.com/logo.png",
	"customDomain": "status.example.com",
	"isPublic": true,
	"showOverallStatus": true,
	"createdAt": "2026-02-10T08:00:00Z",
	"updatedAt": "2026-02-14T12:30:00Z",
	"monitors": [
		{
			"id": "mon_def456",
			"name": "Production API",
			"status": "up"
		},
		{
			"id": "mon_ghi789",
			"name": "Marketing Website",
			"status": "up"
		}
	],
	"cronJobs": [
		{
			"id": "cron_jkl012",
			"name": "Daily Backup",
			"status": "healthy"
		}
	]
}

Possible Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have status-pages:read scope
404NOT_FOUNDStatus page not found
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": [
		"id",
		"name",
		"slug",
		"title",
		"description",
		"logoUrl",
		"customDomain",
		"isPublic",
		"showOverallStatus",
		"createdAt",
		"updatedAt",
		"monitors",
		"cronJobs"
	],
	"properties": {
		"id": { "type": "string" },
		"name": { "type": "string", "minLength": 1, "maxLength": 255 },
		"slug": { "type": "string", "pattern": "^[a-z0-9-]+$" },
		"title": { "type": "string", "minLength": 1, "maxLength": 255 },
		"description": { "type": ["string", "null"], "maxLength": 500 },
		"logoUrl": { "type": ["string", "null"], "format": "uri" },
		"customDomain": { "type": ["string", "null"] },
		"isPublic": { "type": "boolean" },
		"showOverallStatus": { "type": "boolean" },
		"createdAt": { "type": "string", "format": "date-time" },
		"updatedAt": { "type": "string", "format": "date-time" },
		"monitors": {
			"type": "array",
			"items": {
				"type": "object",
				"required": ["id", "name", "status"],
				"properties": {
					"id": { "type": "string" },
					"name": { "type": "string" },
					"status": { "type": "string", "enum": ["up", "down", "degraded", "unknown"] }
				}
			}
		},
		"cronJobs": {
			"type": "array",
			"items": {
				"type": "object",
				"required": ["id", "name", "status"],
				"properties": {
					"id": { "type": "string" },
					"name": { "type": "string" },
					"status": { "type": "string", "enum": ["healthy", "unhealthy", "unknown"] }
				}
			}
		}
	}
}

PUT /v1/status-pages/:id

Updates an existing status page.

Required Scope

status-pages:write

Path Parameters

ParameterTypeDescription
idstringThe status page ID

Request Body

All fields are optional. Only provided fields will be updated.

FieldTypeDescription
namestringInternal name (1-255 characters)
slugstringURL-friendly identifier (lowercase letters, numbers, hyphens only)
titlestringDisplay title (1-255 characters)
descriptionstringPage description (max 500 characters)
logoUrlstringURL to your logo image
customDomainstringCustom domain for the status page
isPublicbooleanWhether the page is publicly accessible
showOverallStatusbooleanWhether to display the overall status indicator

Example Request

cURL

curl -X PUT https://api.uptime.example.com/v1/status-pages/sp_abc123 \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Updated Service Status",
    "description": "Current status of all our services",
    "customDomain": "status.example.com"
  }'

Response

{
	"id": "sp_abc123",
	"name": "Production Status",
	"slug": "production-status",
	"title": "Updated Service Status",
	"description": "Current status of all our services",
	"logoUrl": "https://example.com/logo.png",
	"customDomain": "status.example.com",
	"isPublic": true,
	"showOverallStatus": true,
	"createdAt": "2026-02-10T08:00:00Z",
	"updatedAt": "2026-02-14T14:00:00Z",
	"monitors": [],
	"cronJobs": []
}

Possible Errors

StatusCodeDescription
400VALIDATION_ERRORInvalid request body or validation failed
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have status-pages:write scope
404NOT_FOUNDStatus page not found
409CONFLICTA status page with this slug already exists
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Request Body Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"name": { "type": "string", "minLength": 1, "maxLength": 255 },
		"slug": { "type": "string", "pattern": "^[a-z0-9-]+$" },
		"title": { "type": "string", "minLength": 1, "maxLength": 255 },
		"description": { "type": "string", "maxLength": 500 },
		"logoUrl": { "type": "string", "format": "uri" },
		"customDomain": { "type": "string" },
		"isPublic": { "type": "boolean" },
		"showOverallStatus": { "type": "boolean" }
	}
}

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": [
		"id",
		"name",
		"slug",
		"title",
		"description",
		"logoUrl",
		"customDomain",
		"isPublic",
		"showOverallStatus",
		"createdAt",
		"updatedAt",
		"monitors",
		"cronJobs"
	],
	"properties": {
		"id": { "type": "string" },
		"name": { "type": "string", "minLength": 1, "maxLength": 255 },
		"slug": { "type": "string", "pattern": "^[a-z0-9-]+$" },
		"title": { "type": "string", "minLength": 1, "maxLength": 255 },
		"description": { "type": ["string", "null"], "maxLength": 500 },
		"logoUrl": { "type": ["string", "null"], "format": "uri" },
		"customDomain": { "type": ["string", "null"] },
		"isPublic": { "type": "boolean" },
		"showOverallStatus": { "type": "boolean" },
		"createdAt": { "type": "string", "format": "date-time" },
		"updatedAt": { "type": "string", "format": "date-time" },
		"monitors": { "type": "array", "items": { "type": "object" } },
		"cronJobs": { "type": "array", "items": { "type": "object" } }
	}
}

DELETE /v1/status-pages/:id

Deletes a status page.

Required Scope

status-pages:write

Path Parameters

ParameterTypeDescription
idstringThe status page ID

Example Request

cURL

curl -X DELETE https://api.uptime.example.com/v1/status-pages/sp_abc123 \
  -H "Authorization: Bearer uptime_your_api_key"

Response

Returns 204 No Content on success.

Possible Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have status-pages:write scope
404NOT_FOUNDStatus page not found
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Response Schema

Returns 204 No Content with an empty response body on success.

PUT /v1/status-pages/:id/monitors

Updates the monitors and cron jobs associated with a status page.

Required Scope

status-pages:write

Path Parameters

ParameterTypeDescription
idstringThe status page ID

Request Body

FieldTypeRequiredDescription
monitorIdsarrayYesArray of monitor UUIDs to associate
cronJobIdsarrayYesArray of cron job UUIDs to associate

Example Request

cURL

curl -X PUT https://api.uptime.example.com/v1/status-pages/sp_abc123/monitors \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "monitorIds": ["550e8400-e29b-41d4-a716-446655440000", "6ba7b810-9dad-11d1-80b4-00c04fd430c8"],
    "cronJobIds": ["7c9e6679-7425-40de-944b-e07fc1f90ae7"]
  }'

Response

{
	"id": "sp_abc123",
	"name": "Production Status",
	"slug": "production-status",
	"title": "Service Status",
	"description": "Real-time status of our production services",
	"logoUrl": "https://example.com/logo.png",
	"customDomain": "status.example.com",
	"isPublic": true,
	"showOverallStatus": true,
	"createdAt": "2026-02-10T08:00:00Z",
	"updatedAt": "2026-02-14T15:00:00Z",
	"monitors": [
		{
			"id": "mon_def456",
			"name": "Production API",
			"status": "up"
		},
		{
			"id": "mon_ghi789",
			"name": "Marketing Website",
			"status": "up"
		}
	],
	"cronJobs": [
		{
			"id": "cron_jkl012",
			"name": "Daily Backup",
			"status": "healthy"
		}
	]
}

Possible Errors

StatusCodeDescription
400VALIDATION_ERRORInvalid request body or invalid UUIDs
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have status-pages:write scope
404NOT_FOUNDStatus page, monitor, or cron job not found
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Request Body Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": ["monitorIds", "cronJobIds"],
	"properties": {
		"monitorIds": {
			"type": "array",
			"items": { "type": "string", "format": "uuid" }
		},
		"cronJobIds": {
			"type": "array",
			"items": { "type": "string", "format": "uuid" }
		}
	}
}

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": [
		"id",
		"name",
		"slug",
		"title",
		"description",
		"logoUrl",
		"customDomain",
		"isPublic",
		"showOverallStatus",
		"createdAt",
		"updatedAt",
		"monitors",
		"cronJobs"
	],
	"properties": {
		"id": { "type": "string" },
		"name": { "type": "string", "minLength": 1, "maxLength": 255 },
		"slug": { "type": "string", "pattern": "^[a-z0-9-]+$" },
		"title": { "type": "string", "minLength": 1, "maxLength": 255 },
		"description": { "type": ["string", "null"], "maxLength": 500 },
		"logoUrl": { "type": ["string", "null"], "format": "uri" },
		"customDomain": { "type": ["string", "null"] },
		"isPublic": { "type": "boolean" },
		"showOverallStatus": { "type": "boolean" },
		"createdAt": { "type": "string", "format": "date-time" },
		"updatedAt": { "type": "string", "format": "date-time" },
		"monitors": {
			"type": "array",
			"items": {
				"type": "object",
				"required": ["id", "name", "status"],
				"properties": {
					"id": { "type": "string" },
					"name": { "type": "string" },
					"status": { "type": "string", "enum": ["up", "down", "degraded", "unknown"] }
				}
			}
		},
		"cronJobs": {
			"type": "array",
			"items": {
				"type": "object",
				"required": ["id", "name", "status"],
				"properties": {
					"id": { "type": "string" },
					"name": { "type": "string" },
					"status": { "type": "string", "enum": ["healthy", "unhealthy", "unknown"] }
				}
			}
		}
	}
}

Response Fields

FieldTypeDescription
idstringUnique status page identifier
namestringInternal name
slugstringURL-friendly identifier
titlestringDisplay title
descriptionstring | nullPage description
logoUrlstring | nullURL to the logo image
customDomainstring | nullCustom domain if configured
isPublicbooleanWhether the page is publicly accessible
showOverallStatusbooleanWhether the overall status indicator is displayed
createdAtstringISO 8601 timestamp of creation
updatedAtstringISO 8601 timestamp of last update
monitorsarrayAssociated monitors with their current status
cronJobsarrayAssociated cron jobs with their current status