Overview
Return the full configuration of a single monitor together with its current health (runtimeStatus).
GET https://api.uptimeio.com/api/monitors/{id}
Authentication
| Header | Required | Description |
|---|---|---|
X-API-Key | Yes (or a Bearer token) | Any API key, including read-only keys. See Authentication. |
X-Project-ID | No | Project that contains the monitor. Defaults to your organization’s default project. |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | UUID | Yes | Monitor ID. |
Response
200 OK
{
"success": true,
"data": {
"monitor": {
"id": "b7a2c1de-3f54-4c21-9d0a-6e1f2a3b4c5d",
"organization_id": "0c9e8d7f-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
"created_by": "5f4e3d2c-1b0a-4f9e-8d7c-6b5a4f3e2d1c",
"name": "Production API",
"target": "https://api.example.com/health",
"type": "HTTP",
"interval_seconds": 60,
"status": "active",
"configState": "active",
"runtimeStatus": "up",
"created_at": 1767000000,
"updated_at": 1767003600,
"method": "GET",
"headers": { "Accept": "application/json" },
"body": null,
"timeout_ms": 10000,
"expected_status": [200, 204],
"follow_redirects": true,
"verify_ssl": true,
"slow_response_threshold_ms": 2000,
"ssl_monitoring": {
"enabled": true,
"check_expiry": true,
"check_validity": true,
"expiry_warning_days": [30, 15, 7, 1]
},
"domain_monitoring": {
"enabled": true,
"expiry_warning_days": [30, 15, 7, 1]
},
"notification_target_ids": ["2d1c0b9a-8f7e-4d6c-b5a4-3f2e1d0c9b8a"]
}
}
}
Fields present on every monitor
| Field | Type | Description |
|---|---|---|
id | UUID | Monitor ID. |
organization_id | UUID | Owning organization. |
created_by | UUID | User who created the monitor. |
name | string | Display name. |
type | enum | HTTP, KEYWORD, ICMP, TCP, DNS or HEARTBEAT. Fixed at creation. |
target | string | Checked URL, host, or (for heartbeat monitors) the generated token. |
interval_seconds | integer | Seconds between checks. |
status / configState | enum | Configured state: active, paused or disabled. Both fields carry the same value. |
runtimeStatus | enum | Current health: up, down, degraded, paused or unknown (no results yet). |
created_at, updated_at | integer | Unix timestamps in seconds. |
timeout_ms | integer | Per-check timeout. |
Type-specific and optional fields
| Field | Applies to | Description |
|---|---|---|
method, headers, body, follow_redirects, verify_ssl | HTTP, KEYWORD | Request settings. |
expected_status | HTTP, KEYWORD | Accepted status codes. |
slow_response_threshold_ms | HTTP, KEYWORD | Slow-response alert threshold, when set. |
keyword_config | KEYWORD | { keywords: [{ text, should_contain }], match_mode: "all" | "any", case_sensitive }. |
tcp_config, port | TCP | tcp_config is { port, protocol, protocol_validation? }; protocol is one of smtp, pop3, imap, ftp, ssh, http, https, generic. |
dns_config | DNS | record_entries, dns_server, resolution_timeout_ms. |
icmp_config | ICMP | packet_count, packet_size, timeout_ms, ttl. |
heartbeat_interval, grace_period, heartbeat_token, last_heartbeat_at | HEARTBEAT | Expected ping interval and grace period in seconds, the token used in the ping URL, and the time of the last ping (Unix seconds). |
ssl_monitoring | any | Certificate expiry settings, when configured. |
domain_monitoring | any | { enabled, expiry_warning_days }, when configured. Omitted if the monitor was never configured for it. Thresholds are returned as stored. |
notification_target_ids | any | Notification destinations attached to the monitor. Omitted when none. |
monitoring_regions and tags can be set on create and update, but monitor responses do not include them.
Errors
| Code | Status | Meaning |
|---|---|---|
MONITOR_NOT_FOUND | 404 | No monitor with this ID in the project. |
AUTHENTICATION_REQUIRED / MISSING_AUTH / INVALID_API_KEY | 401 | Missing or invalid credentials. |
INSUFFICIENT_PERMISSIONS | 403 | Your role cannot view monitors. |
CHECK_FETCH_FAILED | 500 | The monitor could not be loaded. |
Example
curl https://api.uptimeio.com/api/monitors/MONITOR_ID \
-H "X-API-Key: YOUR_API_KEY"
const res = await fetch('https://api.uptimeio.com/api/monitors/MONITOR_ID', {
headers: { 'X-API-Key': process.env.UPTIMEIO_API_KEY },
});
const { data } = await res.json();
console.log(data.monitor.runtimeStatus);
import os
import requests
res = requests.get(
"https://api.uptimeio.com/api/monitors/MONITOR_ID",
headers={"X-API-Key": os.environ["UPTIMEIO_API_KEY"]},
)
print(res.json()["data"]["monitor"]["runtimeStatus"])