On this page
What it verifies
A security headers monitor requests the URL with one GET from each of its regions at its interval. It follows redirects and reads the names of the response headers. The monitor reports which selected headers are present and which are missing, and it never judges a value. As its own monitor with its own history, it keeps the header posture of a host visible apart from its availability.
Use it when
- Another monitor already covers the availability of the endpoint, and only the headers need watching.
- The header posture needs its own record: its own uptime figure, its own detail lines, and its own incident when you set the severity to failed.
- A deploy, a CDN change, or a reverse proxy update can drop a header without notice. You want the loss on the record after the next check or, with the severity set to failed, in an incident once the quorum agrees.
It judges presence, not values, so a Content-Security-Policy that allows everything passes. For assertions on status code and body, use the HTTP(S) check, which carries the same 5 headers as a sub-check in one monitor. For the certificate as its own signal, use the TLS certificate check.

Configuration
Target. A full URL including the scheme (https:// or http://), the same rule as the HTTP(S) check. The probe resolves and validates the URL and every redirect hop before fetching. It refuses loopback, private, link-local, and cloud metadata addresses, so the monitor cannot be pointed into an internal network.
| Field | Required | Values and default | Meaning |
|---|---|---|---|
urlURL | yes | Full URL with scheme | The address the probe requests with a GET, following up to 5 redirect hops with the same target validation. The response after the last redirect is the one judged. |
headersHeaders to check | optional | List of strict-transport-security, content-security-policy, x-content-type-options, x-frame-options, referrer-policy. The short labels HSTS and CSP work too. Empty or missing: all 5, unless the older required list is set | The response headers that must be present. The form requires at least one. No field sets request headers. |
missing_severityTreat missing headers as | optional | degraded (default) or failed | What a missing header does to the state: degraded keeps it a posture finding, and failed counts it as an outage. Any value other than failed is read as degraded. The form shows the two as Warning and Outage. |
required | optional | List of header names | An older format for the API and MCP, read only when headers is absent. Every listed header that is missing fails the check. Use headers with missing_severity instead. |
interval_secondsCheck interval | optional | Seconds, default 300, maximum 24 h, minimum set by the plan | How often each region runs the check. A value below the plan floor is raised to the floor, not rejected. |
regionsRegions | optional | Subset of na, eu, as, sa, af, oce. Default: the plan’s regions | Which continents run the check. Omit it and the plan picks its default set. |
address_familiesIP families | optional | ["ipv4"] (default) or ["ipv4", "ipv6"] | The probe checks every resolved address of each selected family on its own. With both families, family_fail_severity (degraded by default, or failed) sets the state when one family fails. |
How a check runs
- When a check is due, each region parses the URL and resolves the host through the node’s own resolver. It validates every address of the selected family against the blocked ranges. Every check times out after 10 s.
- Each address gets one GET, with the connection pinned to that address. The probe follows redirects itself, at most 5 hops, and resolves and validates each hop again before fetching it.
- After the last redirect, the probe collects the names of the response headers in lowercase. It does not read the values.
- The probe matches the selection against the list of 5 recommended headers and determines the missing ones. The
missing_severitysetting decides whether a missing header means degraded or failed. - On an https URL, the probe reads the certificate once for display. The certificate never changes the verdict.
- The region sends its result to the control plane. The alert policy decides whether a failed result opens an incident once the quorum agrees. A degraded result stays out of the incident evaluation.

What a result contains
- Status code
- The status code of the response after redirects.
- Response time
- Time to the answer, per region and per address.
- Detail line
- One line that says all checked headers were present, or names the missing ones by their short labels, for example HSTS and CSP.
- Cause layer
- Whether a failure sat with the target’s DNS (name not found) or, after a successful lookup, with the target itself. Every other cause is reported as unknown.
- Certificate
- On an https URL, for display only: common name and alternative names, issuer, validity dates, and trust status.
- Region, family, address
- Every result carries the region that measured it, and one sub-result per IP family and per address.
States and severity
- okEvery selected header is present in the response after redirects.
- degradedAt least one selected header is missing at the default severity, or one IP family fails while the other answers.
- downA selected header is missing with
missing_severityset tofailed. A failed request counts too: a resolution error, a blocked target, a transport error, or a timeout. - errorThe header selection contains no valid name. It counts as an outage with severity critical.
Confirmed by quorum: by default, 2 regions must report the failure before an incident opens. The organization default asks for 2 regions and 2 consecutive checks. A monitor can carry its own rule with count or percent, consecutive checks, and a minimum duration.
Plans and limits
- Shortest interval
- 300 s on Free, 60 s on Pulse, 30 s on Sentinel, 15 s on Command, and 10 s on Enterprise. The web form offers 30 s, 1 min, 5 min, 15 min, and 1 h. The 15 s and 10 s floors are reachable only through MCP.
- Regions
- 2 of 6 on Free, 3 of 6 on Pulse, and all 6 from Sentinel.
- Monitors
- 10 probe monitors on Free, 50 on Pulse, 150 on Sentinel, 500 on Command, and a custom quota on Enterprise. Eleven regional check types share this quota, while host agents and heartbeats have their own. A pack of 50 more monitors costs €39.
From the pipeline or an agent
The same config works in the deploy step, in an MCP client such as Claude Code, and in the form above. create_monitor needs an organization-wide API key. If you omit regions, the plan picks its default.
{
"name": "Web security headers",
"type": "http_headers",
"interval_seconds": 300,
"config": {
"url": "https://www.example.com",
"headers": [
"strict-transport-security",
"content-security-policy",
"x-content-type-options"
],
"missing_severity": "degraded"
}
}
Every interface, with its boundary
Limits
- The check never reads the value of a header, so a weak policy passes as long as the header is set.
- Only the 5 listed headers can be selected. A selection without a valid name ends the check as an error.
- The check judges the response after the last redirect, not the first response. A header set only on the redirecting response is not seen.
- The probe sends one GET per address, with no method choice and no custom request headers.
- The probe refuses targets on private, loopback, link-local, and cloud metadata addresses.
- Not every region probes IPv6, so selecting
ipv6restricts the usable regions.