> ## 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

> Retrieve the configuration and current status of one monitor

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

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

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.uptimeio.com/api/monitors/MONITOR_ID \
    -H "X-API-Key: YOUR_API_KEY"
  ```

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

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


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