HTTP Monitors

Create, update, delete, and query HTTP monitors. Get check results and performance statistics.Last updated: 2026-02-14

HTTP monitors check your websites and APIs for availability, performance, and content validity.

List Monitors

Retrieve all HTTP monitors for your team.

GET /v1/monitors

Required scope: monitors:read

cURL

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

Response

{
	"data": [
		{
			"id": "mon_abc123",
			"name": "Production API",
			"url": "https://api.example.com/health",
			"method": "GET",
			"expectedStatus": 200,
			"intervalSeconds": 60,
			"degradedAfterMs": 5000,
			"timeoutSeconds": 10,
			"locationHint": "wnam",
			"sslMonitoringEnabled": true,
			"sslExpiryWarningDays": 30,
			"status": "up",
			"lastCheckedAt": "2026-02-14T12:00:00Z",
			"createdAt": "2026-01-01T00:00:00Z",
			"updatedAt": "2026-01-15T10:30:00Z"
		}
	]
}

Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have monitors:read

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "array",
			"items": {
				"$ref": "#/$defs/Monitor"
			}
		}
	},
	"required": ["data"],
	"$defs": {
		"Monitor": {
			"type": "object",
			"properties": {
				"id": { "type": "string", "pattern": "^mon_[a-zA-Z0-9]+$" },
				"name": { "type": "string", "minLength": 1, "maxLength": 255 },
				"url": { "type": "string", "format": "uri" },
				"method": { "type": "string", "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"] },
				"expectedStatus": { "type": "integer", "minimum": 100, "maximum": 599 },
				"intervalSeconds": { "type": "integer", "minimum": 60, "maximum": 3600 },
				"degradedAfterMs": { "type": "integer", "minimum": 1000, "maximum": 30000 },
				"timeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 60 },
				"locationHint": {
					"type": "string",
					"enum": ["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"]
				},
				"sslMonitoringEnabled": { "type": "boolean" },
				"sslExpiryWarningDays": { "type": "integer", "minimum": 1, "maximum": 365 },
				"status": { "type": "string", "enum": ["pending", "up", "degraded", "down"] },
				"lastCheckedAt": { "type": ["string", "null"], "format": "date-time" },
				"createdAt": { "type": "string", "format": "date-time" },
				"updatedAt": { "type": "string", "format": "date-time" }
			},
			"required": [
				"id",
				"name",
				"url",
				"method",
				"expectedStatus",
				"intervalSeconds",
				"degradedAfterMs",
				"timeoutSeconds",
				"locationHint",
				"status",
				"createdAt",
				"updatedAt"
			]
		}
	}
}

Create Monitor

Create a new HTTP monitor.

POST /v1/monitors

Required scope: monitors:write

Request Body

FieldTypeRequiredDescription
namestringYesMonitor name (1-255 characters)
urlstringYesURL to monitor (must be valid URL)
methodstringNoHTTP method (default: HEAD)
expectedStatusintegerNoExpected status code 100-599 (default: 200)
intervalSecondsintegerNoCheck interval 60-3600 (default: 60)
degradedAfterMsintegerNoDegraded threshold 1000-30000ms (default: 5000)
timeoutSecondsintegerNoRequest timeout 1-60 (default: 10)
locationHintstringNoRegion hint (default: wnam)
sslMonitoringEnabledbooleanNoEnable SSL monitoring
sslExpiryWarningDaysintegerNoSSL warning threshold 1-365 days

Supported HTTP methods: GET, POST, PUT, PATCH, DELETE, HEAD

Location hints: wnam (Western North America), enam (Eastern North America), sam (South America), weur (Western Europe), eeur (Eastern Europe), apac (Asia-Pacific), oc (Oceania), afr (Africa), me (Middle East)

cURL

curl https://api.uptime.example.com/v1/monitors \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production API",
    "url": "https://api.example.com/health",
    "method": "GET",
    "expectedStatus": 200,
    "intervalSeconds": 60,
    "degradedAfterMs": 3000,
    "sslMonitoringEnabled": true,
    "sslExpiryWarningDays": 30
  }'

Response

{
	"data": {
		"id": "mon_abc123",
		"name": "Production API",
		"url": "https://api.example.com/health",
		"method": "GET",
		"expectedStatus": 200,
		"intervalSeconds": 60,
		"degradedAfterMs": 3000,
		"timeoutSeconds": 10,
		"locationHint": "wnam",
		"sslMonitoringEnabled": true,
		"sslExpiryWarningDays": 30,
		"status": "pending",
		"lastCheckedAt": null,
		"createdAt": "2026-02-14T12:00:00Z",
		"updatedAt": "2026-02-14T12:00:00Z"
	}
}

Errors

StatusCodeDescription
400VALIDATION_ERRORInvalid request body
400LIMIT_EXCEEDEDMaximum monitors reached for your plan
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have monitors:write

Request Body Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"name": {
			"type": "string",
			"minLength": 1,
			"maxLength": 255,
			"description": "Monitor display name"
		},
		"url": { "type": "string", "format": "uri", "description": "URL to monitor" },
		"method": {
			"type": "string",
			"enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"],
			"default": "HEAD",
			"description": "HTTP method"
		},
		"expectedStatus": {
			"type": "integer",
			"minimum": 100,
			"maximum": 599,
			"default": 200,
			"description": "Expected HTTP status code"
		},
		"intervalSeconds": {
			"type": "integer",
			"minimum": 60,
			"maximum": 3600,
			"default": 60,
			"description": "Check interval in seconds"
		},
		"degradedAfterMs": {
			"type": "integer",
			"minimum": 1000,
			"maximum": 30000,
			"default": 5000,
			"description": "Response time threshold for degraded status"
		},
		"timeoutSeconds": {
			"type": "integer",
			"minimum": 1,
			"maximum": 60,
			"default": 10,
			"description": "Request timeout in seconds"
		},
		"locationHint": {
			"type": "string",
			"enum": ["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"],
			"default": "wnam",
			"description": "Preferred check region"
		},
		"sslMonitoringEnabled": {
			"type": "boolean",
			"description": "Enable SSL certificate monitoring"
		},
		"sslExpiryWarningDays": {
			"type": "integer",
			"minimum": 1,
			"maximum": 365,
			"description": "Days before SSL expiry to warn"
		}
	},
	"required": ["name", "url"]
}

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"id": { "type": "string", "pattern": "^mon_[a-zA-Z0-9]+$" },
				"name": { "type": "string", "minLength": 1, "maxLength": 255 },
				"url": { "type": "string", "format": "uri" },
				"method": { "type": "string", "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"] },
				"expectedStatus": { "type": "integer", "minimum": 100, "maximum": 599 },
				"intervalSeconds": { "type": "integer", "minimum": 60, "maximum": 3600 },
				"degradedAfterMs": { "type": "integer", "minimum": 1000, "maximum": 30000 },
				"timeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 60 },
				"locationHint": {
					"type": "string",
					"enum": ["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"]
				},
				"sslMonitoringEnabled": { "type": "boolean" },
				"sslExpiryWarningDays": { "type": "integer", "minimum": 1, "maximum": 365 },
				"status": { "type": "string", "enum": ["pending", "up", "degraded", "down"] },
				"lastCheckedAt": { "type": ["string", "null"], "format": "date-time" },
				"createdAt": { "type": "string", "format": "date-time" },
				"updatedAt": { "type": "string", "format": "date-time" }
			},
			"required": [
				"id",
				"name",
				"url",
				"method",
				"expectedStatus",
				"intervalSeconds",
				"degradedAfterMs",
				"timeoutSeconds",
				"locationHint",
				"status",
				"createdAt",
				"updatedAt"
			]
		}
	},
	"required": ["data"]
}

Get Monitor

Retrieve a single HTTP monitor by ID.

GET /v1/monitors/:id

Required scope: monitors:read

cURL

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

Response

{
	"data": {
		"id": "mon_abc123",
		"name": "Production API",
		"url": "https://api.example.com/health",
		"method": "GET",
		"expectedStatus": 200,
		"intervalSeconds": 60,
		"degradedAfterMs": 5000,
		"timeoutSeconds": 10,
		"locationHint": "wnam",
		"sslMonitoringEnabled": true,
		"sslExpiryWarningDays": 30,
		"status": "up",
		"lastCheckedAt": "2026-02-14T12:00:00Z",
		"createdAt": "2026-01-01T00:00:00Z",
		"updatedAt": "2026-01-15T10:30:00Z"
	}
}

Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have monitors:read
404NOT_FOUNDMonitor not found

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"id": { "type": "string", "pattern": "^mon_[a-zA-Z0-9]+$" },
				"name": { "type": "string", "minLength": 1, "maxLength": 255 },
				"url": { "type": "string", "format": "uri" },
				"method": { "type": "string", "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"] },
				"expectedStatus": { "type": "integer", "minimum": 100, "maximum": 599 },
				"intervalSeconds": { "type": "integer", "minimum": 60, "maximum": 3600 },
				"degradedAfterMs": { "type": "integer", "minimum": 1000, "maximum": 30000 },
				"timeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 60 },
				"locationHint": {
					"type": "string",
					"enum": ["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"]
				},
				"sslMonitoringEnabled": { "type": "boolean" },
				"sslExpiryWarningDays": { "type": "integer", "minimum": 1, "maximum": 365 },
				"status": { "type": "string", "enum": ["pending", "up", "degraded", "down"] },
				"lastCheckedAt": { "type": ["string", "null"], "format": "date-time" },
				"createdAt": { "type": "string", "format": "date-time" },
				"updatedAt": { "type": "string", "format": "date-time" }
			},
			"required": [
				"id",
				"name",
				"url",
				"method",
				"expectedStatus",
				"intervalSeconds",
				"degradedAfterMs",
				"timeoutSeconds",
				"locationHint",
				"status",
				"createdAt",
				"updatedAt"
			]
		}
	},
	"required": ["data"]
}

Update Monitor

Update an existing HTTP monitor.

PUT /v1/monitors/:id

Required scope: monitors:write

Request Body

All fields from Create Monitor are accepted. Only include fields you want to change.

cURL

curl https://api.uptime.example.com/v1/monitors/mon_abc123 \
  -X PUT \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production API v2",
    "intervalSeconds": 120
  }'

Response

{
	"data": {
		"id": "mon_abc123",
		"name": "Production API v2",
		"url": "https://api.example.com/health",
		"method": "GET",
		"expectedStatus": 200,
		"intervalSeconds": 120,
		"degradedAfterMs": 5000,
		"timeoutSeconds": 10,
		"locationHint": "wnam",
		"sslMonitoringEnabled": true,
		"sslExpiryWarningDays": 30,
		"status": "up",
		"lastCheckedAt": "2026-02-14T12:00:00Z",
		"createdAt": "2026-01-01T00:00:00Z",
		"updatedAt": "2026-02-14T12:30:00Z"
	}
}

Errors

StatusCodeDescription
400VALIDATION_ERRORInvalid request body
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have monitors:write
404NOT_FOUNDMonitor not found

Request Body Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"name": {
			"type": "string",
			"minLength": 1,
			"maxLength": 255,
			"description": "Monitor display name"
		},
		"url": { "type": "string", "format": "uri", "description": "URL to monitor" },
		"method": {
			"type": "string",
			"enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"],
			"description": "HTTP method"
		},
		"expectedStatus": {
			"type": "integer",
			"minimum": 100,
			"maximum": 599,
			"description": "Expected HTTP status code"
		},
		"intervalSeconds": {
			"type": "integer",
			"minimum": 60,
			"maximum": 3600,
			"description": "Check interval in seconds"
		},
		"degradedAfterMs": {
			"type": "integer",
			"minimum": 1000,
			"maximum": 30000,
			"description": "Response time threshold for degraded status"
		},
		"timeoutSeconds": {
			"type": "integer",
			"minimum": 1,
			"maximum": 60,
			"description": "Request timeout in seconds"
		},
		"locationHint": {
			"type": "string",
			"enum": ["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"],
			"description": "Preferred check region"
		},
		"sslMonitoringEnabled": {
			"type": "boolean",
			"description": "Enable SSL certificate monitoring"
		},
		"sslExpiryWarningDays": {
			"type": "integer",
			"minimum": 1,
			"maximum": 365,
			"description": "Days before SSL expiry to warn"
		}
	}
}

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"id": { "type": "string", "pattern": "^mon_[a-zA-Z0-9]+$" },
				"name": { "type": "string", "minLength": 1, "maxLength": 255 },
				"url": { "type": "string", "format": "uri" },
				"method": { "type": "string", "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"] },
				"expectedStatus": { "type": "integer", "minimum": 100, "maximum": 599 },
				"intervalSeconds": { "type": "integer", "minimum": 60, "maximum": 3600 },
				"degradedAfterMs": { "type": "integer", "minimum": 1000, "maximum": 30000 },
				"timeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 60 },
				"locationHint": {
					"type": "string",
					"enum": ["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"]
				},
				"sslMonitoringEnabled": { "type": "boolean" },
				"sslExpiryWarningDays": { "type": "integer", "minimum": 1, "maximum": 365 },
				"status": { "type": "string", "enum": ["pending", "up", "degraded", "down"] },
				"lastCheckedAt": { "type": ["string", "null"], "format": "date-time" },
				"createdAt": { "type": "string", "format": "date-time" },
				"updatedAt": { "type": "string", "format": "date-time" }
			},
			"required": [
				"id",
				"name",
				"url",
				"method",
				"expectedStatus",
				"intervalSeconds",
				"degradedAfterMs",
				"timeoutSeconds",
				"locationHint",
				"status",
				"createdAt",
				"updatedAt"
			]
		}
	},
	"required": ["data"]
}

Delete Monitor

Permanently delete an HTTP monitor and all its check history.

DELETE /v1/monitors/:id

Required scope: monitors:write

cURL

curl https://api.uptime.example.com/v1/monitors/mon_abc123 \
  -X DELETE \
  -H "Authorization: Bearer uptime_your_api_key"

Response

Returns 204 No Content on success.

Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have monitors:write
404NOT_FOUNDMonitor not found

Response Schema

Returns 204 No Content with an empty body on success.

Get Check Results

Retrieve the check history for a monitor.

GET /v1/monitors/:id/results

Required scope: monitors:read

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoResults to return, 1-100 (default: 20)
offsetintegerNoResults to skip (default: 0)

cURL

curl "https://api.uptime.example.com/v1/monitors/mon_abc123/results?limit=10&offset=0" \
  -H "Authorization: Bearer uptime_your_api_key"

Response

{
	"data": [
		{
			"id": "chk_xyz789",
			"monitorId": "mon_abc123",
			"status": "up",
			"statusCode": 200,
			"responseTimeMs": 245,
			"region": "wnam",
			"checkedAt": "2026-02-14T12:00:00Z"
		},
		{
			"id": "chk_xyz788",
			"monitorId": "mon_abc123",
			"status": "degraded",
			"statusCode": 200,
			"responseTimeMs": 5200,
			"region": "wnam",
			"checkedAt": "2026-02-14T11:59:00Z"
		}
	],
	"pagination": {
		"limit": 10,
		"offset": 0,
		"total": 1440
	}
}

Errors

StatusCodeDescription
400VALIDATION_ERRORInvalid query parameters
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have monitors:read
404NOT_FOUNDMonitor not found

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "array",
			"items": {
				"type": "object",
				"properties": {
					"id": { "type": "string", "pattern": "^chk_[a-zA-Z0-9]+$" },
					"monitorId": { "type": "string", "pattern": "^mon_[a-zA-Z0-9]+$" },
					"status": { "type": "string", "enum": ["up", "degraded", "down"] },
					"statusCode": { "type": "integer" },
					"responseTimeMs": { "type": "integer" },
					"region": { "type": "string" },
					"checkedAt": { "type": "string", "format": "date-time" }
				},
				"required": [
					"id",
					"monitorId",
					"status",
					"statusCode",
					"responseTimeMs",
					"region",
					"checkedAt"
				]
			}
		},
		"pagination": {
			"type": "object",
			"properties": {
				"limit": { "type": "integer" },
				"offset": { "type": "integer" },
				"total": { "type": "integer" }
			},
			"required": ["limit", "offset", "total"]
		}
	},
	"required": ["data", "pagination"]
}

Get Monitor Stats

Retrieve performance statistics for a single monitor.

GET /v1/monitors/:id/stats

Required scope: monitors:read

cURL

curl https://api.uptime.example.com/v1/monitors/mon_abc123/stats \
  -H "Authorization: Bearer uptime_your_api_key"

Response

{
	"data": {
		"monitorId": "mon_abc123",
		"uptime": {
			"last24Hours": 99.95,
			"last7Days": 99.87,
			"last30Days": 99.92
		},
		"responseTime": {
			"avg": 245,
			"min": 120,
			"max": 890,
			"p50": 230,
			"p95": 450,
			"p99": 780
		},
		"checks": {
			"total": 43200,
			"up": 43180,
			"degraded": 15,
			"down": 5
		}
	}
}

Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have monitors:read
404NOT_FOUNDMonitor not found

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"monitorId": { "type": "string", "pattern": "^mon_[a-zA-Z0-9]+$" },
				"uptime": {
					"type": "object",
					"properties": {
						"last24Hours": { "type": "number", "minimum": 0, "maximum": 100 },
						"last7Days": { "type": "number", "minimum": 0, "maximum": 100 },
						"last30Days": { "type": "number", "minimum": 0, "maximum": 100 }
					},
					"required": ["last24Hours", "last7Days", "last30Days"]
				},
				"responseTime": {
					"type": "object",
					"properties": {
						"avg": { "type": "integer" },
						"min": { "type": "integer" },
						"max": { "type": "integer" },
						"p50": { "type": "integer" },
						"p95": { "type": "integer" },
						"p99": { "type": "integer" }
					},
					"required": ["avg", "min", "max", "p50", "p95", "p99"]
				},
				"checks": {
					"type": "object",
					"properties": {
						"total": { "type": "integer" },
						"up": { "type": "integer" },
						"degraded": { "type": "integer" },
						"down": { "type": "integer" }
					},
					"required": ["total", "up", "degraded", "down"]
				}
			},
			"required": ["monitorId", "uptime", "responseTime", "checks"]
		}
	},
	"required": ["data"]
}

Get Aggregated Stats

Retrieve aggregated statistics across all monitors.

GET /v1/monitors/stats

Required scope: monitors:read

cURL

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

Response

{
	"data": {
		"monitors": {
			"total": 15,
			"up": 12,
			"degraded": 2,
			"down": 1
		},
		"uptime": {
			"last24Hours": 98.5,
			"last7Days": 99.1,
			"last30Days": 99.3
		},
		"checks": {
			"last24Hours": 21600,
			"last7Days": 151200,
			"last30Days": 648000
		}
	}
}

Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have monitors:read

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"data": {
			"type": "object",
			"properties": {
				"monitors": {
					"type": "object",
					"properties": {
						"total": { "type": "integer" },
						"up": { "type": "integer" },
						"degraded": { "type": "integer" },
						"down": { "type": "integer" }
					},
					"required": ["total", "up", "degraded", "down"]
				},
				"uptime": {
					"type": "object",
					"properties": {
						"last24Hours": { "type": "number", "minimum": 0, "maximum": 100 },
						"last7Days": { "type": "number", "minimum": 0, "maximum": 100 },
						"last30Days": { "type": "number", "minimum": 0, "maximum": 100 }
					},
					"required": ["last24Hours", "last7Days", "last30Days"]
				},
				"checks": {
					"type": "object",
					"properties": {
						"last24Hours": { "type": "integer" },
						"last7Days": { "type": "integer" },
						"last30Days": { "type": "integer" }
					},
					"required": ["last24Hours", "last7Days", "last30Days"]
				}
			},
			"required": ["monitors", "uptime", "checks"]
		}
	},
	"required": ["data"]
}

Content Checks

Manage content validation rules for a monitor. Content checks verify that responses contain (or don't contain) specific text or patterns.

Create Content Check

POST /v1/monitors/:id/content-checks

Required scope: monitors:write

Request Body

FieldTypeRequiredDescription
typestringYesCheck type: contains, not_contains, regex
valuestringYesText or pattern to match
caseSensitivebooleanNoEnable case-sensitive matching (default: false)

Delete Content Check

DELETE /v1/monitors/:id/content-checks/:checkId

Required scope: monitors:write

See Content Checks for usage details.

Create Content Check Request Body Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"properties": {
		"type": {
			"type": "string",
			"enum": ["contains", "not_contains", "regex"],
			"description": "Check type"
		},
		"value": { "type": "string", "description": "Text or pattern to match" },
		"caseSensitive": {
			"type": "boolean",
			"default": false,
			"description": "Enable case-sensitive matching"
		}
	},
	"required": ["type", "value"]
}

Delete Content Check Response Schema

Returns 204 No Content with an empty body on success.