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 (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Connect time (ms) | tcp_connect | > | 1000 | warning |
| TLS handshake time (ms) | metrics['tcp.tls_handshake_time_ms'] | > | 1000 | warning |
| Response regexp match (1=yes) | metrics['tcp.expect_match_regexp'] | == | 0 | critical |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
tls | boolean | — |
timeoutSeconds | number | Per-check timeout in seconds |
DNS
Resolve a record and check answers + timing.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Lookup time (ms) | dns_time | > | 1000 | warning |
| Answer count | metrics['dns.answers_count'] | == | 0 | warning |
| Error count | metrics['dns.error_count'] | > | 0 | critical |
| Expected value match (1=yes) | metrics['dns.expected_match'] | == | 0 | critical |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
queryType | enum | one of: A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, PTR; default A |
resolver | string | Custom resolver IP |
captureRecords | boolean | — |
timeoutSeconds | number | Per-check timeout in seconds |
HTTP / HTTPS
Monitor a web page or HTTP endpoint.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| HTTP status code | status_code | not_in_groups | ["2xx","3xx"] | critical |
| Response time (ms) | response_time | > | 2000 | warning |
| Body keyword / regexp match | http.body_regexp_match | == | 1 | critical |
| SSL days until expiry | ssl_expiry | < | 14 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
method | enum | one of: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS; default GET |
followRedirects | boolean | default true |
authType | enum | one of: none, basic, digest, bearer; default none |
authUsername | string | — |
authPassword | string | secret (returned redacted) |
bearerToken | string | secret (returned redacted) |
requestBody | string | secret (returned redacted) |
requestHeaders | array | Array of { key, value } |
failIfBodyMatchesRegexp | string | Fire when the response body MATCHES this regexp (pairs with the http.body_regexp_match metric) |
failIfBodyNotMatchesRegexp | string | Fire when the response body does NOT match this regexp |
SSL / TLS
Certificate expiry, chain, hostname + TLS version.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Days until expiry | metrics['ssl.days_until_expiry'] | < | 14 | warning |
| Hostname match (1=yes) | metrics['ssl.hostname_match'] | == | 0 | critical |
| Chain valid (1=yes) | metrics['ssl.chain_valid'] | == | 0 | critical |
| TLS version (12 = 1.2) | metrics['ssl.tls_version'] | < | 12 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
insecure | boolean | — |
port | number | — |
serverName | string | — |
timeoutSeconds | number | Per-check timeout in seconds |
UDP
UDP query + response match.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Response received (1=yes) | metrics['udp.response_received'] | == | 0 | warning |
| First byte time (ms) | metrics['udp.first_byte_time_ms'] | > | 500 | warning |
| Response regexp match (1=yes) | metrics['udp.expect_match_regexp'] | == | 0 | critical |
| Bytes received | metrics['udp.bytes_received'] | < | 1 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
query | string | Payload to send |
timeoutSeconds | number | Per-check timeout in seconds |
ICMP (Ping)
Host reachability + packet loss + latency.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Packet loss (%) | packet_loss | > | 50 | warning |
| Ping average (ms) | ping_avg | > | 200 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
count | number | — |
packetSize | number | — |
timeoutSeconds | number | Per-check timeout in seconds |
MTR (Traceroute)
Per-hop path analysis to a destination.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Destination reached (1=yes) | metrics['mtr.destination_reached'] | == | 0 | critical |
| Destination loss (%) | metrics['mtr.destination_loss_percent'] | > | 5 | warning |
| Destination RTT (ms) | metrics['mtr.rtt_avg_ms'] | > | 250 | warning |
| Max path loss (%) | metrics['mtr.path_loss_max_percent'] | > | 10 | warning |
| Unresponsive hops | metrics['mtr.unresponsive_hops_count'] | > | 3 | info |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
count | number | — |
maxHops | number | — |
port | number | — |
protocol | string | — |
timeoutSeconds | number | Per-check timeout in seconds |
Sitemap
Crawl a sitemap.xml and check for broken URLs.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Sitemap found (1=yes) | metrics['sitemap.found'] | == | 0 | critical |
| Broken URLs (%) | metrics['sitemap.broken_percent'] | > | 20 | warning |
| Broken URL count | metrics['sitemap.broken_urls'] | > | 5 | warning |
| Total URL count | metrics['sitemap.url_count'] | < | 10 | info |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
checkUrlCount | number | — |
captureBrokenUrls | boolean | — |
timeoutSeconds | number | Per-check timeout in seconds |
Favicon
Check a site's favicon is served correctly.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Favicon found (1=yes) | metrics['favicon.found'] | == | 0 | warning |
| Content-type match (1=yes) | metrics['favicon.content_type_match'] | == | 0 | info |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
timeoutSeconds | number | Per-check timeout in seconds |
CDN
Detect the CDN in front of a site.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| CDN detected (1=yes) | metrics['cdn.detected'] | == | 0 | warning |
| Provider match (1=yes) | metrics['cdn.provider_match'] | == | 0 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
timeoutSeconds | number | Per-check timeout in seconds |
Brotli
Check Brotli compression support.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Brotli supported (1=yes) | metrics['brotli.supported'] | == | 0 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
timeoutSeconds | number | Per-check timeout in seconds |
Breach
Watch a domain for newly reported data breaches.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Hours since newest breach | metrics['breach.last_added_age_hours'] | < | 48 | critical |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
timeoutSeconds | number | Per-check timeout in seconds |
CMS
Detect the CMS powering a site.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| CMS detected (1=yes) | metrics['cms.detected'] | == | 0 | info |
| Provider match (1=yes) | metrics['cms.provider_match'] | == | 0 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
timeoutSeconds | number | Per-check timeout in seconds |
SMTP
Mail server connectivity, relay + STARTTLS checks.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Connect time (ms) | metrics['smtp.connect_time_ms'] | > | 1000 | warning |
| Open relay (1=yes) | metrics['smtp.open_relay'] | == | 1 | critical |
| STARTTLS supported (1=yes) | metrics['smtp.tls_supported'] | == | 0 | warning |
| PTR valid (1=yes) | metrics['smtp.ptr_valid'] | == | 0 | info |
| Banner match (1=yes) | metrics['smtp.banner_match'] | == | 0 | info |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
port | number | — |
timeoutSeconds | number | Per-check timeout in seconds |
FTP
FTP connect, auth, list, write + speed.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Connect OK (1=yes) | metrics['ftp.connect_success'] | == | 0 | critical |
| Auth OK (1=yes) | metrics['ftp.authentication_success'] | == | 0 | critical |
| Write OK (1=yes) | metrics['ftp.write_success'] | == | 0 | critical |
| List OK (1=yes) | metrics['ftp.list_success'] | == | 0 | warning |
| Connect time (ms) | metrics['ftp.connect_time_ms'] | > | 2000 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
port | number | — |
username | string | — |
password | string | secret (returned redacted) |
secure | boolean | — |
timeoutSeconds | number | Per-check timeout in seconds |
SFTP
SSH file transfer connect, auth, list, write + speed.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Connect OK (1=yes) | metrics['sftp.connect_success'] | == | 0 | critical |
| Auth OK (1=yes) | metrics['sftp.authentication_success'] | == | 0 | critical |
| Write OK (1=yes) | metrics['sftp.write_success'] | == | 0 | critical |
| List OK (1=yes) | metrics['sftp.list_success'] | == | 0 | warning |
| Connect time (ms) | metrics['sftp.connect_time_ms'] | > | 3000 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
port | number | — |
username | string | — |
password | string | secret (returned redacted) |
privateKey | string | secret (returned redacted) |
timeoutSeconds | number | Per-check timeout in seconds |
WebSocket
WebSocket handshake, ping + pattern match.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Handshake time (ms) | metrics['websocket.handshake_time_ms'] | > | 1000 | warning |
| Ping RTT (ms) | metrics['websocket.ping_rtt_ms'] | > | 500 | warning |
| Total time (ms) | metrics['websocket.total_time_ms'] | > | 2000 | warning |
| Pattern match (1=yes) | metrics['websocket.pattern_match'] | == | 0 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
checkPing | boolean | — |
timeoutSeconds | number | Per-check timeout in seconds |
Domain (RDAP)
Domain registration + expiry via RDAP.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Days until domain expiry | metrics['rdap.days_until_expiry'] | < | 30 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
timeoutSeconds | number | Per-check timeout in seconds |
Blacklist (RBL)
Check an IP/domain against DNS blacklists.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Blacklists listing this host | metrics['blacklist.listed_count'] | > | 0 | critical |
| Failed RBL lookups | metrics['blacklist.failed_count'] | >= | 2 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
resolver | string | — |
rblsText | string | Newline-separated RBL zones |
timeoutSeconds | number | Per-check timeout in seconds |
NTP
Time server offset, sync + stratum.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Absolute clock offset (ms) | metrics['ntp.offset_abs_ms'] | > | 100 | critical |
| Unsynchronized (1=yes) | metrics['ntp.leap_unsync'] | > | 0 | critical |
| Stratum | metrics['ntp.stratum'] | > | 4 | warning |
| Round-trip delay (ms) | metrics['ntp.delay_ms'] | > | 100 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
count | number | — |
maxAbsOffsetMs | number | — |
requireSynced | boolean | — |
timeoutSeconds | number | Per-check timeout in seconds |
Email Security
SPF, DMARC + DKIM policy checks for a domain.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| SPF present (1=yes) | metrics['spf.present'] | == | 0 | critical |
| DMARC present (1=yes) | metrics['dmarc.present'] | == | 0 | critical |
| DMARC policy strength | metrics['dmarc.policy'] | < | 1 | warning |
| DKIM present (1=yes) | metrics['dkim.present'] | == | 0 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
checkSpf | boolean | — |
checkDmarc | boolean | — |
checkDkim | boolean | — |
dkimSelectors | string | DKIM selectors to check |
timeoutMs | number | — |
Core Web Vitals
Full Lighthouse audit — performance, CWV, SEO.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Largest Contentful Paint (ms) | metrics['lighthouse.lcp_ms'] | > | 4000 | critical |
| Cumulative Layout Shift | metrics['lighthouse.cls'] | > | 0.25 | critical |
| Interaction to Next Paint (ms) | metrics['lighthouse.inp_ms'] | > | 500 | critical |
| Performance score (0–1) | metrics['lighthouse.performance_score'] | < | 0.5 | warning |
| SEO score (0–1) | metrics['lighthouse.seo_score'] | < | 0.85 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
preset | enum | one of: mobile, desktop |
Heartbeat / Cron
Dead-man's switch — your job pings a URL; we alert if it goes silent.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Missed check-ins | heartbeat.missed | >= | 1 | critical |
| Run reported failure | heartbeat.run_failed | >= | 1 | warning |
| Exit code | heartbeat.exit_code | == | 137 | critical |
| Run duration (ms) | heartbeat.duration_ms | > | 600000 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
scheduleMode | enum | one of: period, cron; default period |
periodSeconds | number | default 300 |
graceSeconds | number | default 300 |
cronExpression | string | — |
timezone | string | default UTC |
MCP Server
Model Context Protocol handshake, tools + drift.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| Tool inventory changed (1=yes) | mcp.inventory_changed | == | 1 | warning |
| Tools exposed | mcp.tools_count | == | 0 | critical |
| Handshake time (ms) | mcp.handshake_time_ms | > | 2000 | warning |
| Protocol version match (1=yes) | mcp.version_match | == | 0 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
bearerToken | string | secret (returned redacted) |
timeoutSeconds | number | Per-check timeout in seconds |
API
Full HTTP request with JSON/status assertions and value extraction.
- Type value (
typefield):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:
| Metric | Passes as metric | Op | Example value | Severity |
|---|---|---|---|---|
| Up / Down (probe status) | success | == | false | critical |
| HTTP status code | api.status_code | not_in_groups | ["2xx","3xx"] | critical |
| Failed assertions | metrics['api.assertions_failed'] | > | 0 | critical |
| Response time (ms) | metrics['api.response_time_ms'] | > | 2000 | warning |
| SSL days until expiry | metrics['api.ssl_days_until_expiry'] | < | 14 | warning |
Config fields (config object on create/update):
| Key | Type | Notes |
|---|---|---|
method | enum | one of: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS; default GET |
followRedirects | boolean | default true |
authType | enum | one of: none, basic, digest, bearer; default none |
authUsername | string | — |
authPassword | string | secret (returned redacted) |
bearerToken | string | secret (returned redacted) |
requestBody | string | secret (returned redacted) |
requestHeaders | array | Array of { key, value } |
ipVersion | enum | one of: ip4, ip6 |
assertions | array | Array of { source, property, operator, value } (max 50) |
extractions | array | Array of { name, path } JSONPath (max 20) |
timeoutSeconds | number | Per-check timeout in seconds |