WatchFor
API

Monitor types reference

Every WatchFor monitor type — its target format, default alert rules, all alert metrics you can build rules from, and every config field. The complete per-type reference for building monitors and alert rules via the API.

WatchFor supports 25 monitor types. This page lists, for each type, exactly what to send to the API: the type value, the target format, the config fields the type accepts, the alert metrics you can build rules from (with the exact string to pass as the alert-rule metric), and the default rules the system creates automatically.

This reference is also available machine-readable at GET /api/v1/meta/monitor-types (no API key required) — ideal for code generation and AI agents. Every monitor's own valid metrics are also returned inline as available_metrics on GET /v1/monitors/{id}.

TCP

TCP port connectivity + optional payload match.

  • Type value (type field): tcp
  • Target: host:port — e.g. example.com:443

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Slow TCP Connect — metrics['tcp.connect_time_ms'] > 1000 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Connect time (ms)tcp_connect>1000warning
TLS handshake time (ms)metrics['tcp.tls_handshake_time_ms']>1000warning
Response regexp match (1=yes)metrics['tcp.expect_match_regexp']==0critical

Config fields (config object on create/update):

KeyTypeNotes
tlsboolean
timeoutSecondsnumberPer-check timeout in seconds

DNS

Resolve a record and check answers + timing.

  • Type value (type field): dns
  • Target: domain or IP — e.g. example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Slow DNS Lookup — metrics['dns.check_time_ms'] > 1000 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Lookup time (ms)dns_time>1000warning
Answer countmetrics['dns.answers_count']==0warning
Error countmetrics['dns.error_count']>0critical
Expected value match (1=yes)metrics['dns.expected_match']==0critical

Config fields (config object on create/update):

KeyTypeNotes
queryTypeenumone of: A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, PTR; default A
resolverstringCustom resolver IP
captureRecordsboolean
timeoutSecondsnumberPer-check timeout in seconds

HTTP / HTTPS

Monitor a web page or HTTP endpoint.

  • Type value (type field): http
  • Target: https URL — e.g. https://example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Unexpected Status Code — status_code not_in_groups ["2xx", "3xx"] (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
HTTP status codestatus_codenot_in_groups["2xx","3xx"]critical
Response time (ms)response_time>2000warning
Body keyword / regexp matchhttp.body_regexp_match==1critical
SSL days until expiryssl_expiry<14warning

Config fields (config object on create/update):

KeyTypeNotes
methodenumone of: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS; default GET
followRedirectsbooleandefault true
authTypeenumone of: none, basic, digest, bearer; default none
authUsernamestring
authPasswordstringsecret (returned redacted)
bearerTokenstringsecret (returned redacted)
requestBodystringsecret (returned redacted)
requestHeadersarrayArray of { key, value }
failIfBodyMatchesRegexpstringFire when the response body MATCHES this regexp (pairs with the http.body_regexp_match metric)
failIfBodyNotMatchesRegexpstringFire when the response body does NOT match this regexp

SSL / TLS

Certificate expiry, chain, hostname + TLS version.

  • Type value (type field): ssl
  • Target: domain or host:port — e.g. example.com:443

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • SSL Expiry Warning — metrics['ssl.days_until_expiry'] < 14 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Days until expirymetrics['ssl.days_until_expiry']<14warning
Hostname match (1=yes)metrics['ssl.hostname_match']==0critical
Chain valid (1=yes)metrics['ssl.chain_valid']==0critical
TLS version (12 = 1.2)metrics['ssl.tls_version']<12warning

Config fields (config object on create/update):

KeyTypeNotes
insecureboolean
portnumber
serverNamestring
timeoutSecondsnumberPer-check timeout in seconds

UDP

UDP query + response match.

  • Type value (type field): udp
  • Target: host:port — e.g. example.com:53

Default alert rules (created automatically):

  • Availability Check — success == false (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Response received (1=yes)metrics['udp.response_received']==0warning
First byte time (ms)metrics['udp.first_byte_time_ms']>500warning
Response regexp match (1=yes)metrics['udp.expect_match_regexp']==0critical
Bytes receivedmetrics['udp.bytes_received']<1warning

Config fields (config object on create/update):

KeyTypeNotes
querystringPayload to send
timeoutSecondsnumberPer-check timeout in seconds

ICMP (Ping)

Host reachability + packet loss + latency.

  • Type value (type field): icmp
  • Target: domain or IP — e.g. example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Packet loss (%)packet_loss>50warning
Ping average (ms)ping_avg>200warning

Config fields (config object on create/update):

KeyTypeNotes
countnumber
packetSizenumber
timeoutSecondsnumberPer-check timeout in seconds

MTR (Traceroute)

Per-hop path analysis to a destination.

  • Type value (type field): mtr
  • Target: domain or IP — e.g. example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Destination Unreachable — metrics['mtr.destination_reached'] == 0 (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Destination reached (1=yes)metrics['mtr.destination_reached']==0critical
Destination loss (%)metrics['mtr.destination_loss_percent']>5warning
Destination RTT (ms)metrics['mtr.rtt_avg_ms']>250warning
Max path loss (%)metrics['mtr.path_loss_max_percent']>10warning
Unresponsive hopsmetrics['mtr.unresponsive_hops_count']>3info

Config fields (config object on create/update):

KeyTypeNotes
countnumber
maxHopsnumber
portnumber
protocolstring
timeoutSecondsnumberPer-check timeout in seconds

Sitemap

Crawl a sitemap.xml and check for broken URLs.

  • Type value (type field): sitemap
  • Target: https URL — e.g. https://example.com/sitemap.xml

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Sitemap Missing — metrics['sitemap.found'] == 0 (critical)
  • Broken URL Ratio — metrics['sitemap.broken_percent'] > 20 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Sitemap found (1=yes)metrics['sitemap.found']==0critical
Broken URLs (%)metrics['sitemap.broken_percent']>20warning
Broken URL countmetrics['sitemap.broken_urls']>5warning
Total URL countmetrics['sitemap.url_count']<10info

Config fields (config object on create/update):

KeyTypeNotes
checkUrlCountnumber
captureBrokenUrlsboolean
timeoutSecondsnumberPer-check timeout in seconds

Favicon

Check a site's favicon is served correctly.

  • Type value (type field): favicon
  • Target: https URL — e.g. https://example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Favicon Missing — metrics['favicon.found'] == 0 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Favicon found (1=yes)metrics['favicon.found']==0warning
Content-type match (1=yes)metrics['favicon.content_type_match']==0info

Config fields (config object on create/update):

KeyTypeNotes
timeoutSecondsnumberPer-check timeout in seconds

CDN

Detect the CDN in front of a site.

  • Type value (type field): cdn
  • Target: https URL — e.g. https://example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
CDN detected (1=yes)metrics['cdn.detected']==0warning
Provider match (1=yes)metrics['cdn.provider_match']==0warning

Config fields (config object on create/update):

KeyTypeNotes
timeoutSecondsnumberPer-check timeout in seconds

Brotli

Check Brotli compression support.

  • Type value (type field): brotli
  • Target: https URL — e.g. https://example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Brotli Not Supported — metrics['brotli.supported'] == 0 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Brotli supported (1=yes)metrics['brotli.supported']==0warning

Config fields (config object on create/update):

KeyTypeNotes
timeoutSecondsnumberPer-check timeout in seconds

Breach

Watch a domain for newly reported data breaches.

  • Type value (type field): breach
  • Target: https URL — e.g. https://example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • New Breach Within Window — metrics['breach.last_added_age_hours'] < 48 (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Hours since newest breachmetrics['breach.last_added_age_hours']<48critical

Config fields (config object on create/update):

KeyTypeNotes
timeoutSecondsnumberPer-check timeout in seconds

CMS

Detect the CMS powering a site.

  • Type value (type field): cms
  • Target: https URL — e.g. https://example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
CMS detected (1=yes)metrics['cms.detected']==0info
Provider match (1=yes)metrics['cms.provider_match']==0warning

Config fields (config object on create/update):

KeyTypeNotes
timeoutSecondsnumberPer-check timeout in seconds

SMTP

Mail server connectivity, relay + STARTTLS checks.

  • Type value (type field): smtp
  • Target: domain or host:port — e.g. mail.example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Open Relay Detected — metrics['smtp.open_relay'] == 1 (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Connect time (ms)metrics['smtp.connect_time_ms']>1000warning
Open relay (1=yes)metrics['smtp.open_relay']==1critical
STARTTLS supported (1=yes)metrics['smtp.tls_supported']==0warning
PTR valid (1=yes)metrics['smtp.ptr_valid']==0info
Banner match (1=yes)metrics['smtp.banner_match']==0info

Config fields (config object on create/update):

KeyTypeNotes
portnumber
timeoutSecondsnumberPer-check timeout in seconds

FTP

FTP connect, auth, list, write + speed.

  • Type value (type field): ftp
  • Target: domain, IP or host:port — e.g. ftp.example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Connection Failed — metrics['ftp.connect_success'] == 0 (critical)
  • Authentication Failed — metrics['ftp.authentication_success'] == 0 (critical)
  • Write Test Failed — metrics['ftp.write_success'] == 0 (critical)
  • List Failed — metrics['ftp.list_success'] == 0 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Connect OK (1=yes)metrics['ftp.connect_success']==0critical
Auth OK (1=yes)metrics['ftp.authentication_success']==0critical
Write OK (1=yes)metrics['ftp.write_success']==0critical
List OK (1=yes)metrics['ftp.list_success']==0warning
Connect time (ms)metrics['ftp.connect_time_ms']>2000warning

Config fields (config object on create/update):

KeyTypeNotes
portnumber
usernamestring
passwordstringsecret (returned redacted)
secureboolean
timeoutSecondsnumberPer-check timeout in seconds

SFTP

SSH file transfer connect, auth, list, write + speed.

  • Type value (type field): sftp
  • Target: domain, IP or host:port — e.g. sftp.example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Connection Failed — metrics['sftp.connect_success'] == 0 (critical)
  • Authentication Failed — metrics['sftp.authentication_success'] == 0 (critical)
  • Write Test Failed — metrics['sftp.write_success'] == 0 (critical)
  • List Failed — metrics['sftp.list_success'] == 0 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Connect OK (1=yes)metrics['sftp.connect_success']==0critical
Auth OK (1=yes)metrics['sftp.authentication_success']==0critical
Write OK (1=yes)metrics['sftp.write_success']==0critical
List OK (1=yes)metrics['sftp.list_success']==0warning
Connect time (ms)metrics['sftp.connect_time_ms']>3000warning

Config fields (config object on create/update):

KeyTypeNotes
portnumber
usernamestring
passwordstringsecret (returned redacted)
privateKeystringsecret (returned redacted)
timeoutSecondsnumberPer-check timeout in seconds

WebSocket

WebSocket handshake, ping + pattern match.

  • Type value (type field): websocket
  • Target: ws:// or wss:// URL — e.g. wss://example.com/ws

Default alert rules (created automatically):

  • Availability Check — success == false (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Handshake time (ms)metrics['websocket.handshake_time_ms']>1000warning
Ping RTT (ms)metrics['websocket.ping_rtt_ms']>500warning
Total time (ms)metrics['websocket.total_time_ms']>2000warning
Pattern match (1=yes)metrics['websocket.pattern_match']==0warning

Config fields (config object on create/update):

KeyTypeNotes
checkPingboolean
timeoutSecondsnumberPer-check timeout in seconds

Domain (RDAP)

Domain registration + expiry via RDAP.

  • Type value (type field): rdap
  • Target: domain — e.g. example.com

Default alert rules (created automatically):

  • Domain Expiry — metrics['rdap.days_until_expiry'] < 30 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Days until domain expirymetrics['rdap.days_until_expiry']<30warning

Config fields (config object on create/update):

KeyTypeNotes
timeoutSecondsnumberPer-check timeout in seconds

Blacklist (RBL)

Check an IP/domain against DNS blacklists.

  • Type value (type field): blacklist
  • Target: domain or IP — e.g. example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Listed on Any RBL — metrics['blacklist.listed_count'] > 0 (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Blacklists listing this hostmetrics['blacklist.listed_count']>0critical
Failed RBL lookupsmetrics['blacklist.failed_count']>=2warning

Config fields (config object on create/update):

KeyTypeNotes
resolverstring
rblsTextstringNewline-separated RBL zones
timeoutSecondsnumberPer-check timeout in seconds

NTP

Time server offset, sync + stratum.

  • Type value (type field): ntp
  • Target: domain, IP or host:port — e.g. pool.ntp.org

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Clock Offset Too High — metrics['ntp.offset_abs_ms'] > 100 (critical)
  • Server Not Synchronized — metrics['ntp.leap_unsync'] > 0 (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Absolute clock offset (ms)metrics['ntp.offset_abs_ms']>100critical
Unsynchronized (1=yes)metrics['ntp.leap_unsync']>0critical
Stratummetrics['ntp.stratum']>4warning
Round-trip delay (ms)metrics['ntp.delay_ms']>100warning

Config fields (config object on create/update):

KeyTypeNotes
countnumber
maxAbsOffsetMsnumber
requireSyncedboolean
timeoutSecondsnumberPer-check timeout in seconds

Email Security

SPF, DMARC + DKIM policy checks for a domain.

  • Type value (type field): email_policy
  • Target: domain — e.g. example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • SPF Record Missing — metrics['spf.present'] == 0 (critical)
  • DMARC Record Missing — metrics['dmarc.present'] == 0 (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
SPF present (1=yes)metrics['spf.present']==0critical
DMARC present (1=yes)metrics['dmarc.present']==0critical
DMARC policy strengthmetrics['dmarc.policy']<1warning
DKIM present (1=yes)metrics['dkim.present']==0warning

Config fields (config object on create/update):

KeyTypeNotes
checkSpfboolean
checkDmarcboolean
checkDkimboolean
dkimSelectorsstringDKIM selectors to check
timeoutMsnumber

Core Web Vitals

Full Lighthouse audit — performance, CWV, SEO.

  • Type value (type field): browser
  • Target: https URL — e.g. https://example.com

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • LCP Poor — metrics['lighthouse.lcp_ms'] > 4000 (critical)
  • CLS Poor — metrics['lighthouse.cls'] > 0.25 (critical)
  • INP Poor — metrics['lighthouse.inp_ms'] > 500 (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Largest Contentful Paint (ms)metrics['lighthouse.lcp_ms']>4000critical
Cumulative Layout Shiftmetrics['lighthouse.cls']>0.25critical
Interaction to Next Paint (ms)metrics['lighthouse.inp_ms']>500critical
Performance score (0–1)metrics['lighthouse.performance_score']<0.5warning
SEO score (0–1)metrics['lighthouse.seo_score']<0.85warning

Config fields (config object on create/update):

KeyTypeNotes
presetenumone of: mobile, desktop

Heartbeat / Cron

Dead-man's switch — your job pings a URL; we alert if it goes silent.

  • Type value (type field): heartbeat
  • Target: server-assigned ping URL (do not set) — e.g. /p/<token> (generated on create)

Default alert rules (created automatically):

  • Missed Schedule — metrics['heartbeat.missed'] >= 1 (critical)
  • Run Failed — metrics['heartbeat.run_failed'] >= 1 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Missed check-insheartbeat.missed>=1critical
Run reported failureheartbeat.run_failed>=1warning
Exit codeheartbeat.exit_code==137critical
Run duration (ms)heartbeat.duration_ms>600000warning

Config fields (config object on create/update):

KeyTypeNotes
scheduleModeenumone of: period, cron; default period
periodSecondsnumberdefault 300
graceSecondsnumberdefault 300
cronExpressionstring
timezonestringdefault UTC

MCP Server

Model Context Protocol handshake, tools + drift.

  • Type value (type field): mcp
  • Target: https URL — e.g. https://mcp.example.com/mcp

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • Tool Inventory Changed — metrics['mcp.inventory_changed'] == 1 (warning)
  • No Tools Exposed — metrics['mcp.tools_count'] == 0 (critical)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
Tool inventory changed (1=yes)mcp.inventory_changed==1warning
Tools exposedmcp.tools_count==0critical
Handshake time (ms)mcp.handshake_time_ms>2000warning
Protocol version match (1=yes)mcp.version_match==0warning

Config fields (config object on create/update):

KeyTypeNotes
bearerTokenstringsecret (returned redacted)
timeoutSecondsnumberPer-check timeout in seconds

API

Full HTTP request with JSON/status assertions and value extraction.

  • Type value (type field): api
  • Target: https URL — e.g. https://api.example.com/health

Default alert rules (created automatically):

  • Availability Check — success == false (critical)
  • HTTP Status Evaluation — api.status_code not_in_groups ["2xx", "3xx"] (critical)
  • Assertions Failed — metrics['api.assertions_failed'] > 0 (critical)
  • SSL Expiry Warning — metrics['api.ssl_days_until_expiry'] < 30 (warning)

Alert metrics — values for the metric field of POST /monitors/{id}/alert-rules:

MetricPasses as metricOpExample valueSeverity
Up / Down (probe status)success==falsecritical
HTTP status codeapi.status_codenot_in_groups["2xx","3xx"]critical
Failed assertionsmetrics['api.assertions_failed']>0critical
Response time (ms)metrics['api.response_time_ms']>2000warning
SSL days until expirymetrics['api.ssl_days_until_expiry']<14warning

Config fields (config object on create/update):

KeyTypeNotes
methodenumone of: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS; default GET
followRedirectsbooleandefault true
authTypeenumone of: none, basic, digest, bearer; default none
authUsernamestring
authPasswordstringsecret (returned redacted)
bearerTokenstringsecret (returned redacted)
requestBodystringsecret (returned redacted)
requestHeadersarrayArray of { key, value }
ipVersionenumone of: ip4, ip6
assertionsarrayArray of { source, property, operator, value } (max 50)
extractionsarrayArray of { name, path } JSONPath (max 20)
timeoutSecondsnumberPer-check timeout in seconds

On this page