> ## Documentation Index
> Fetch the complete documentation index at: https://docs.uptimeio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Monitor Status History

> List when a monitor was created, paused, resumed or disabled

## 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](/api-reference/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

```json theme={null}
{
  "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

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.uptimeio.com/api/monitors/MONITOR_ID/status-history?page=1&pageSize=20" \
    -H "X-API-Key: YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  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}`));
  ```

  ```python Python theme={null}
  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"])
  ```
</CodeGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.