Monitors

HTTP & keyword monitors

Every HTTP and website monitor setting in SutramX: URL, method, headers, auth, status codes, keywords, timeouts, redirects, TLS and bot protection.

A website monitor (Website (is the page up?) in the type list) requests a URL from each of your check locations and decides whether the response is healthy. Out of the box it checks that the site answers with the expected status code. You can add keyword checks, header rules, response-time limits and more under Show advanced options.

API monitors use the same request and validation settings, plus a request body and assertions. They are covered in API & multi-step checks. Everything on this page applies to them too.

Create an HTTP monitor#

  1. Go to Monitors → New monitor.
  2. Keep What do you want to check? set to Website (is the page up?).
  3. Enter the URL, for example https://example.com/health, and optionally a Name. A blank name becomes the host name.
  4. Choose a Check interval.
  5. Optionally click Show advanced options to add keyword checks, headers or limits.
  6. Click Test to try it, then Create monitor.

SutramX also looks at the page once and can suggest related checks, such as the checkout or login page. Nothing is added unless you tick it. See Site detection and suggested checks.

If you type a bare host name such as example.com, the dashboard adds https://. The scheme and host are lower-cased; the path and query string keep their case.

Guided presets#

The Guided preset list fills in sensible advanced settings in one click. It appears in the Add new monitor dialog when you choose API endpoint. The dialog lists exactly what it changed.

PresetWhat it sets
JSON API — strict API contract checksKeeps API endpoint, GET, status 200, header content-type: application/json, forbidden keywords Fatal error:, Stack trace:, Traceback (most recent call last), max response time 1500 ms, timeout 15 s, 2 redirects, 2048 KB, failure threshold 2
Website HTML — page uptime and latencySwitches to Website (is the page up?), status 200, 301, 302, header content-type: text/html, forbidden keywords Fatal error:, Stack trace:, Traceback (most recent call last), max response time 2500 ms, timeout 20 s, 5 redirects, 2048 KB, failure threshold 2
Webhook endpoint — fast POST acceptanceKeeps API endpoint, POST, status 200, 201, 202, 204, header cache-control: no-store, forbidden keywords Fatal error:, Stack trace:, Traceback (most recent call last), max response time 2000 ms, timeout 20 s, no redirects, 2048 KB, failure threshold 1

You can change any value after applying a preset.

Request settings#

FieldWhat it doesDefault / limits
URLThe address to requestRequired. Must be a full http:// or https:// URL to a public host
MethodHTTP method. For website monitors it's under Show advanced optionsGET. GET, POST, PUT, PATCH, DELETE, HEAD or OPTIONS
AuthenticationAdds an Authorization headerNone, Bearer token or Basic auth (username and password)
Request headersExtra headers sent with every check, for example a secret header your firewall allowlistsUp to 50 headers
Timeout (seconds)How long to wait for the full response1–60 s. The dashboard starts at 30 s; if you create a monitor through the API without a timeout, 10 s is used. Always capped at the interval minus 3 s; the editor shows the effective value
Max redirectsHow many redirects to follow0–5, default 5. With 0, a redirect response fails the check
Max response size (KB)How much of the body is downloaded for keyword and body checks. A larger page is still checked for status and speed1–10,240 KB (10 MB). Default 2,048 KB (2 MB)
Fail if the HTTPS certificate is invalid or expiredRejects invalid, expired, self-signed or mismatched certificatesOn

Headers you can't set. Host, Content-Length, Transfer-Encoding, Connection, Upgrade, Proxy-Authorization and Proxy-Connection are controlled by SutramX and are dropped if you add them.

Headers on redirects. When a redirect leads to a different scheme, host or port, SutramX only forwards User-Agent, Accept, Accept-Language and Accept-Encoding. Your auth and custom headers are dropped so a secret never reaches another site. A redirect from HTTPS to plain HTTP is refused when you send custom headers.

Default request headers#

Unless you set your own, every check sends:

http
User-Agent: Mozilla/5.0 (compatible; SutramX-Monitor/1.0; +https://sutramx.com/bot)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.9

Adding a header with the same name (in any letter case) replaces the default.

Validation settings#

A response must pass every rule you set. They are checked in this order, and the first failure is what you see in the check history and alerts.

FieldWhat it doesDefault / limits
Expected status codesStatus codes that count as success. Comma-separated codes or ranges, such as 200, 204 or 200-299The dashboard starts with 200. If empty, any status below 400 passes. Codes 100–599; ranges count as every code they cover, up to 500 codes
Required keywordText the response body must containCase-sensitive. Up to 1,000 characters
Ignore letter caseMakes the required keyword case-insensitiveOff
Forbidden keywordsComma-separated text that must not appear in the body. Catches error pages served with a 200Case-sensitive
Expected response headersOne rule per line as Header: value. The header must exist and contain the valueHeader name and value are case-insensitive
Max response time (ms)Slower responses fail the checkOff. 1–600,000 ms
Degraded above (ms)Slower responses show as Degraded without failing or opening an incidentOff. 1–600,000 ms, and lower than the max response time

Keywords are matched against the raw response body, including HTML markup. A HEAD request has no body, so don't combine HEAD with keyword checks.

The status code checked is the one from the final response, after redirects are followed.

Alert thresholds#

FieldWhat it doesDefault / limits
Failure thresholdConsecutive failed checks before alerting1 (1–10)
Recovery thresholdConsecutive passing checks before the incident resolves1 (1–10)

Under Detection in the same advanced options:

FieldWhat it doesDefault / limits
Confirmation period (seconds)A failure must last this long in a location before an incident opensBlank uses the default: 30–60 s for new monitors checked every minute or faster, otherwise 0. 0–3,600 s
Recovery period (seconds)The monitor must stay up this long before the incident resolves; any failure restarts itBlank uses the default: 60 s for new monitors checked every minute or faster, otherwise 0. 0–3,600 s
IP versionWhich addresses of the host the checker connects toAutomatic (IPv4 first, then IPv6), IPv4 only or IPv6 only

These work together with multi-location confirmation. See Regions & confirmation.

Choose which errors alert#

In the monitor editor (Edit), expand Alert on these HTTP errors. Every failure has an error class, such as Status 5xx, Timeout Connect or Keyword Not Found. Untick a class to stop it from sending notifications. The check is still recorded as failed; it just doesn't notify anyone. Use Select all or None to change them all.

Error types#

Each failure is tagged with one error class. The editor shows them in readable form (for example timeout_connect appears as Timeout Connect); the API uses the ids below.

Error class idWhen it happens
status_4xx / status_5xxNo expected status codes are set and the server answered 400–599
rate_limitedThe server answered a plain 429 that you don't expect. Shown as Blocked, not counted as downtime, and the next check waits for the server's Retry-After
status_unexpectedThe status isn't in your expected status codes
keyword_not_foundThe required keyword is missing
invalid_response_bodyA forbidden keyword was found, an expected header is missing or wrong, or an API assertion failed
response_time_exceededSlower than Max response time
response_too_largeThe body is bigger than Max response size and a keyword, forbidden keyword or body assertion needs the whole body to decide. Without such rules, a large page is checked for status and speed only
timeout_connect / timeout_read / timeout_totalNo connection, no complete response, or the whole request ran out of time. The message includes the timeout actually applied
connection_refused / connection_resetThe server refused or dropped the connection
network_unreachableThere is no network route to the host
dns_resolution_failedThe host name didn't resolve
redirect_loopMore redirects than Max redirects allows
redirects_disabledMax redirects is 0 and the server redirected
insecure_redirectA redirect from HTTPS to plain HTTP was refused because the request carries custom headers
ssl_expired / ssl_hostname_mismatch / ssl_self_signed / ssl_revoked / ssl_untrusted_chain / ssl_not_yet_validCertificate problems, when Fail if the HTTPS certificate is invalid or expired is on
blocked_targetThe target resolves to a non-public address and can't be monitored
blocked_by_bot_protectionThe site's firewall refused the check (see below)
checker_errorA problem on SutramX's side, not your site's. The check is Inconclusive and never opens an incident on its own

Bot protection and firewalls#

Firewalls and bot filters (Cloudflare, Vercel, AWS WAF, Akamai, Imperva, Sucuri, DataDome, Kasada and similar) sometimes block monitoring traffic. When that happens the site may be perfectly healthy, but the check can't tell.

SutramX recognises these blocks instead of reporting them as an outage. A response with status 403, 429 or 503 that carries a vendor-specific header or a vendor's block-page text is classified as Blocked by bot protection (WAF), with a message like:

text
Blocked by Cloudflare bot protection (HTTP 403) — the target refused the check, so its availability could not be verified. Allowlist the checker in the target's firewall: https://sutramx.com/bot

Detection is deliberately conservative. A plain 403 from a site behind Cloudflare is still reported as a normal 403, because many APIs return real 403s. A 401 is never treated as a block. A plain 429 without a vendor marker is reported as Rate limited (HTTP 429) instead. Neither a block nor a rate limit counts as downtime. If you set expected status codes that include the blocking status, the check passes.

To fix a block:

  1. Allowlist SutramX in your firewall. The user agent and checker IP addresses are listed at https://sutramx.com/bot.
  2. Or add a secret request header (for example X-Monitor-Token) under Request headers and allow requests that carry it.
  3. If you'd rather not be notified about blocks, untick Blocked by bot protection (WAF) under Alert on these HTTP errors.

Example: create through the API#

The API takes the same settings in config. Times are in milliseconds and sizes in bytes.

bash
curl -X POST "https://api.sutramx.com/monitors" \
  -H "Authorization: Bearer sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Checkout page",
    "type": "http",
    "url": "https://shop.example.com/checkout",
    "interval_seconds": 60,
    "config": {
      "method": "GET",
      "headers": { "X-Monitor-Token": "s3cret" },
      "expected_status_codes": [200],
      "keyword": "Place order",
      "keyword_case_insensitive": true,
      "forbidden_keywords": ["Internal Server Error"],
      "expected_response_headers": [{ "name": "content-type", "value": "text/html" }],
      "timeout": 15000,
      "max_redirects": 3,
      "max_response_bytes": 1048576,
      "max_response_time_ms": 3000,
      "degraded_response_time_ms": 1500,
      "failure_threshold": 2,
      "recovery_threshold": 1,
      "verify_tls": true
    }
  }'
Config keyDashboard fieldLimits
methodMethodGET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS
headersRequest headers / AuthenticationObject, up to 50 entries
timeoutTimeout1000–60000 ms
max_redirectsMax redirects0–5
max_response_bytesMax response size1–10485760 bytes
expected_status_codesExpected status codesArray of up to 500 codes
keywordRequired keywordUp to 1,000 characters
keyword_case_insensitiveIgnore letter casetrue / false
forbidden_keywordsForbidden keywordsArray of strings
expected_response_headersExpected response headersArray of { "name", "value" }
max_response_time_msMax response time1–600000 ms
degraded_response_time_msDegraded above1–600000 ms, lower than max_response_time_ms
failure_threshold / recovery_thresholdFailure / Recovery threshold1–10
verify_tlsFail if the HTTPS certificate is invalid or expiredtrue / false
confirmation_seconds / recovery_secondsConfirmation period / Recovery period0–3600
ip_familyIP versionauto, ipv4 or ipv6
alert_on_error_types / ignore_error_typesAlert on these HTTP errorsLists of error class ids, such as status_5xx

The whole config object can have at most 50 keys and 32 KB when serialized.

Troubleshooting#

The check times out but the site loads in my browser. The response time includes DNS, connecting, TLS, redirects and downloading the full body. Raise Timeout, and remember it is capped at the interval minus 3 s. The error message shows the timeout actually used.

"Response body is larger than the … byte limit, so keyword/body checks could not run". The page is bigger than Max response size and a keyword or body rule needs the whole page. Raise the size (up to 10 MB), remove the body rule, or check a lighter health endpoint.

Keyword not found, but I can see the text on the page. The keyword is matched against the HTML the server returns, not what JavaScript renders afterwards, and it is case-sensitive unless Ignore letter case is on. HTML entities (such as &) are not decoded.

A 301 or 302 fails my check. Redirects are followed by default, so you normally see the final status. If Max redirects is 0, the redirect itself fails the check. Add the redirect status to Expected status codes if you want to monitor the redirect.

Self-signed or internal certificates. Untick Fail if the HTTPS certificate is invalid or expired. The host still has to be publicly reachable.

"Target resolves to a non-public address". SutramX only checks public hosts. Private IPs, localhost and internal names can't be monitored.

Last updated . Something unclear or missing on this page? Tell us at support@sutramx.com.