Skip to main content
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.

HTTP & TCP monitors

Poll endpoints and TCP ports on a configurable interval. Track uptime, latency, and degraded response times.

TLS & DNS monitors

Watch SSL certificates for expiration and DNS records for unexpected changes.

Cron job monitors

Heartbeat-based monitoring for scheduled tasks. Your job pings Overwatch — no inbound probing required.

Alert channels

Route status-change alerts to Slack, Discord, Teams, email, or a webhook.

Monitor types at a glance

TypeWhat it checksPossible statuses
HTTPHTTP/HTTPS endpoint reachability and response codeup, down, degraded
TCPTCP port connectivity and latencyup, down, degraded
TLSSSL/TLS certificate validity and days to expiryactive, expiring_soon, expired, no_cert
DNSDNS record presence and valuepresent, missing, changed
SCHEDULEDWhether a cron job or task has checked in recentlyok, 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.
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:
{
  "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

id
string
Unique monitor identifier.
name
string
Display name you assigned when creating the monitor.
type
string
One of HTTP, TCP, TLS, DNS, or SCHEDULED.
config
object
Type-specific configuration object. Fields vary by monitor type.
status
string
Current status. Possible values depend on the monitor type. Starts as unknown until the first check completes.
enabled
boolean
Whether the monitor is actively running checks. Defaults to true.
lastCheckIn
string | null
ISO 8601 timestamp of the last check-in. Only populated for SCHEDULED monitors.
lastCheckInStatus
string | null
Status reported on the last check-in (ok or fail). Only populated for SCHEDULED monitors.
createdAt
string
ISO 8601 timestamp of when the monitor was created.
updatedAt
string
ISO 8601 timestamp of the last update to the monitor record.

Plan limits

The number of monitors you can create depends on your plan.
PlanMonitor limitMinimum check interval
Starter105 minutes (300 s)
Pro2001 minute (60 s)
EnterpriseCustom10 seconds
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.
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:
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:
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

curl https://overwatchapp.dev/api/v1/monitors/<id> \
  -H "Authorization: Bearer ow_live_sk_<secret>"

Deleting a monitor

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.