Skip to content
Join the waitlist

Monitors

HTTP monitors

Check a URL for the status code, content, and response time you expect, with the full timing waterfall.

HTTP monitors are the workhorse. They request a URL from each selected region, measure every phase of the request, and verify the response against your expectations.

Every check records a timing waterfall in milliseconds:

Phase What it covers
DNS Resolving the hostname (0 for IP targets)
TCP Establishing the connection
TLS The TLS handshake (0 for plain http://)
First byte From request sent to first byte of the response
Download Reading the rest of the body
Total Wall-clock time for the whole check, including any redirects

When redirects are followed, the DNS/TCP/TLS phases describe the first hop and Total covers the whole chain. The number of redirects and the final URL are stored with each check.

HTTPS targets also record the certificate’s expiry date on every check, so you get expiry warnings without a separate SSL monitor.

Method. GET, HEAD, POST, PUT, PATCH, DELETE, or OPTIONS. The default is HEAD, which is upgraded to GET automatically when you add a content assertion (a HEAD response has no body).

Expected status. Which status codes count as up. Accepts an exact code (200), a class (2xx, the default), or a range (200-299, 1xx-3xx). Anything else marks the check as failed with the reason Unexpected status, and the response body (up to 64 KB) is captured so you can see why.

Follow redirects. On by default, following up to 10 hops. Turn it off to assert on a redirect itself, for example that http:// sends a 301 to https://.

Headers and body. Add request headers (an Authorization header for an authenticated health endpoint, an Accept header, a custom User-Agent) and, for write methods, a request body. Content-Type is only sent if you set it. Secrets in headers are stored encrypted and never appear in logs or alerts.

Keyword. The simplest content check: the body must contain this string. A missing keyword fails the check with Assertion failed.

Assertion. A structured check on the response: choose the target (body, a named header, or status), an operator (contains, not contains, equals, regex), and a value. A bad regular expression fails the assertion rather than the monitor.

Timeout. Default 10 seconds. A check that exceeds it is recorded as a timeout, a distinct failure reason from a connection error.

StatusCheck records why a check failed, and that reason is shown in alerts and on the incident timeline.

Reason Meaning
Timeout The check exceeded its timeout.
Unexpected status The status code didn’t match Expected status.
Assertion failed The keyword or assertion didn’t match.
Name not resolved DNS returned no address for the hostname.
Connection refused The host actively refused the connection.
Certificate expired The TLS certificate’s validity period has ended.
Certificate not trusted The chain doesn’t lead to a trusted root, or the hostname doesn’t match.
  • Point monitors at a health endpoint that exercises dependencies (database, cache) rather than a static page, and assert on its body. {"status":"ok"} with a contains assertion is a fine start.
  • Use a dedicated User-Agent header such as StatusCheck/1.0 (+https://statuscheck.io) so you can exclude probe traffic from analytics. StatusCheck sends this by default.
  • Keep intervals short on the endpoints customers notice first and longer on internal tooling.