Overview
Return the history of a monitor’s configured state: creation, pauses, resumes and disables, newest first. Each entry includes how long the monitor stayed in that state.GET https://api.uptimeio.com/api/monitors/{id}/status-history
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 and query parameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
id | path | UUID | required | Monitor ID. |
page | query | integer | 1 | Page number, 1 or higher. |
pageSize | query | integer | 20 | Entries per page, 1-100. |
Response
200 OK
{
"success": true,
"data": {
"monitor_id": "b7a2c1de-3f54-4c21-9d0a-6e1f2a3b4c5d",
"history": [
{
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"old_status": "paused",
"new_status": "active",
"changed_at": "2026-09-30T08:00:00.000Z",
"changed_by": "5f4e3d2c-1b0a-4f9e-8d7c-6b5a4f3e2d1c",
"reason": null,
"duration_ms": 3600000
},
{
"id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9",
"old_status": null,
"new_status": "active",
"changed_at": "2026-09-01T09:00:00.000Z",
"changed_by": "5f4e3d2c-1b0a-4f9e-8d7c-6b5a4f3e2d1c",
"reason": null,
"duration_ms": 2588400000
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 2,
"totalPages": 1,
"hasNext": false,
"hasPrevious": false
}
}
}
| Field | Type | Description |
|---|---|---|
old_status | enum | null | State before the change. null for the creation entry. |
new_status | enum | active, paused or disabled. |
changed_at | string | When the change happened, ISO 8601. |
changed_by | UUID | null | User who made the change. |
reason | string | null | Reason recorded with the change, if any. |
duration_ms | integer | Milliseconds until the next change (or until now for the latest entry). |
Errors
| Code | Status | Meaning |
|---|---|---|
INVALID_QUERY_PARAMS | 400 | page or pageSize is invalid. |
AUTHENTICATION_REQUIRED / MISSING_AUTH / INVALID_API_KEY | 401 | Missing or invalid credentials. |
MONITOR_NOT_FOUND | 404 | No monitor with this ID in the project. |
STATUS_HISTORY_FAILED | 500 | The history could not be loaded. |
Example
curl "https://api.uptimeio.com/api/monitors/MONITOR_ID/status-history?page=1&pageSize=20" \
-H "X-API-Key: YOUR_API_KEY"
const res = await fetch(
'https://api.uptimeio.com/api/monitors/MONITOR_ID/status-history?pageSize=20',
{ headers: { 'X-API-Key': process.env.UPTIMEIO_API_KEY } },
);
const { data } = await res.json();
console.log(data.history.map((h) => `${h.changed_at}: ${h.new_status}`));
import os
import requests
res = requests.get(
"https://api.uptimeio.com/api/monitors/MONITOR_ID/status-history",
headers={"X-API-Key": os.environ["UPTIMEIO_API_KEY"]},
params={"pageSize": 20},
)
for h in res.json()["data"]["history"]:
print(h["changed_at"], h["new_status"])