Skip to main content
Errors are JSON with a stable error field. Branch on that, never on message, which is prose and may be reworded.
Check error before reading score. A checker that scored an error page would report “16 tags missing” for a site that is merely down, which is worse than useless. An error response has no score, metadata or previews.

The URL was refused

Returned before any request is made. blocked_hostname and private_address are the SSRF defences. They are load-bearing rather than decorative: a Worker’s fetch will happily connect to 127.0.0.1, so these checks are the only thing preventing it.

The fetch failed

upstream_status appears only on http_error, so a consumer can tell a 404 from a 503 without parsing English.

Refused for other reasons

Why the site cannot check itself

Cloudflare routes a Worker’s request to its own zone past the Worker to an origin server. This site has no origin, so the request fails rather than looping. Detecting it and saying so plainly beats a confusing 522. Any other URL works normally.