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

# Overwatch monitor types and configuration overview

> Overview of Overwatch's five monitor types — HTTP, TCP, TLS, DNS, and Scheduled — with API examples for creating, listing, and deleting monitors.

Monitors are the core building block of Overwatch. Each monitor represents a single check that runs on a recurring interval: probing a URL, connecting to a TCP port, verifying a TLS certificate, resolving a DNS record, or waiting for a scheduled job to report in. When a monitor's status changes, Overwatch fires alerts to the channels you've configured.

<CardGroup cols={2}>
  <Card title="HTTP & TCP monitors" icon="globe" href="/monitors/http-tcp">
    Poll endpoints and TCP ports on a configurable interval. Track uptime, latency, and degraded response times.
  </Card>

  <Card title="TLS & DNS monitors" icon="shield-check" href="/monitors/tls-dns">
    Watch SSL certificates for expiration and DNS records for unexpected changes.
  </Card>

  <Card title="Cron job monitors" icon="clock" href="/monitors/cron-jobs">
    Heartbeat-based monitoring for scheduled tasks. Your job pings Overwatch — no inbound probing required.
  </Card>

  <Card title="Alert channels" icon="bell" href="/alerts/overview">
    Route status-change alerts to Slack, Discord, Teams, email, or a webhook.
  </Card>
</CardGroup>

## Monitor types at a glance

| Type        | What it checks                                     | Possible statuses                               |
| ----------- | -------------------------------------------------- | ----------------------------------------------- |
| `HTTP`      | HTTP/HTTPS endpoint reachability and response code | `up`, `down`, `degraded`                        |
| `TCP`       | TCP port connectivity and latency                  | `up`, `down`, `degraded`                        |
| `TLS`       | SSL/TLS certificate validity and days to expiry    | `active`, `expiring_soon`, `expired`, `no_cert` |
| `DNS`       | DNS record presence and value                      | `present`, `missing`, `changed`                 |
| `SCHEDULED` | Whether a cron job or task has checked in recently | `ok`, `failed`, `havent_heard`                  |

## Creating a monitor

Send a `POST` request to `/api/v1/monitors` with a `name`, `type`, and a `config` object. The fields inside `config` vary by monitor type — see each type's page for details.

```bash theme={null}
curl -X POST https://overwatchapp.dev/api/v1/monitors \
  -H "Authorization: Bearer ow_live_sk_<secret>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production API",
    "type": "HTTP",
    "config": {
      "url": "https://api.example.com/health",
      "interval": 60
    }
  }'
```

A successful response returns the created monitor object with status `201`:

```json theme={null}
{
  "data": {
    "id": "mon_01hx...",
    "name": "Production API",
    "type": "HTTP",
    "config": {
      "url": "https://api.example.com/health",
      "interval": 60
    },
    "status": "unknown",
    "enabled": true,
    "lastCheckIn": null,
    "lastCheckInStatus": null,
    "createdAt": "2026-04-15T10:00:00.000Z",
    "updatedAt": "2026-04-15T10:00:00.000Z"
  }
}
```

### Monitor response fields

<ResponseField name="id" type="string">
  Unique monitor identifier.
</ResponseField>

<ResponseField name="name" type="string">
  Display name you assigned when creating the monitor.
</ResponseField>

<ResponseField name="type" type="string">
  One of `HTTP`, `TCP`, `TLS`, `DNS`, or `SCHEDULED`.
</ResponseField>

<ResponseField name="config" type="object">
  Type-specific configuration object. Fields vary by monitor type.
</ResponseField>

<ResponseField name="status" type="string">
  Current status. Possible values depend on the monitor type. Starts as `unknown` until the first check completes.
</ResponseField>

<ResponseField name="enabled" type="boolean">
  Whether the monitor is actively running checks. Defaults to `true`.
</ResponseField>

<ResponseField name="lastCheckIn" type="string | null">
  ISO 8601 timestamp of the last check-in. Only populated for `SCHEDULED` monitors.
</ResponseField>

<ResponseField name="lastCheckInStatus" type="string | null">
  Status reported on the last check-in (`ok` or `fail`). Only populated for `SCHEDULED` monitors.
</ResponseField>

<ResponseField name="createdAt" type="string">
  ISO 8601 timestamp of when the monitor was created.
</ResponseField>

<ResponseField name="updatedAt" type="string">
  ISO 8601 timestamp of the last update to the monitor record.
</ResponseField>

## Plan limits

The number of monitors you can create depends on your plan.

| Plan       | Monitor limit | Minimum check interval |
| ---------- | ------------- | ---------------------- |
| Starter    | 10            | 5 minutes (300 s)      |
| Pro        | 200           | 1 minute (60 s)        |
| Enterprise | Custom        | 10 seconds             |

<Note>
  The default check interval for new monitors is 5 minutes. Pro plans support intervals as low as 1 minute. If you need 10-second intervals, contact us about Enterprise.
</Note>

If you've reached your monitor limit, the API returns a `422` response with `"upgrade": true`. Upgrade your plan from **Settings → Plan** to add more monitors.

## Listing monitors

Retrieve all monitors for your organization with a `GET` request:

```bash theme={null}
curl https://overwatchapp.dev/api/v1/monitors \
  -H "Authorization: Bearer ow_live_sk_<secret>"
```

Each monitor in the response is enriched with the latest check result, a 90-day uptime percentage, and a status history array.

You can filter by type using the `type` query parameter:

```bash theme={null}
curl "https://overwatchapp.dev/api/v1/monitors?type=HTTP" \
  -H "Authorization: Bearer ow_live_sk_<secret>"
```

You can also request a specific history range with the `range` parameter. Accepted values are `1d`, `7d`, `30d`, and `90d` (default).

## Retrieving a single monitor

```bash theme={null}
curl https://overwatchapp.dev/api/v1/monitors/<id> \
  -H "Authorization: Bearer ow_live_sk_<secret>"
```

## Deleting a monitor

```bash theme={null}
curl -X DELETE https://overwatchapp.dev/api/v1/monitors/<id> \
  -H "Authorization: Bearer ow_live_sk_<secret>"
```

Deletion is permanent and removes all associated check results.
