Skip to content

Success criteria

By default, PathWatch aggregates a multi-region monitor’s status with sensible rules — “any region down = degraded, majority down = down”. Success criteria let you override that with explicit thresholds: how many regions must pass, how fast they must respond, and which HTTP status codes hard-fail the monitor regardless.

Configure them on the monitor edit page under Success criteria.

When to use them

The default aggregation works for most monitors. Reach for success criteria when:

  • You want stricter uptime — require every region to succeed, not just a majority.
  • You want looser uptime — accept a single region passing while others flake during a partial provider outage.
  • You want a performance gate — a fast 200 is “up”, a slow 200 is “down”, regardless of region count.
  • You want to hard-fail on specific HTTP codes (e.g. anything above 499 = always down, no matter what the rest of the regions return).

Configuration

FieldTypeDefaultNotes
min_passing"any" | "all" | "majority" | integer N"any"How many regions must pass for the monitor to be up. "any" = ≥ 1, "all" = every active region, "majority" = > 50 %, N = at least that many.
max_response_time_msintegerA region only counts as “passing” if its response time is ≤ this.
max_response_time_at_least_ninteger1Combined with max_response_time_ms — at least N regions must meet the response-time gate. Defaults to 1 when the gate is set.
fail_if_any_status_aboveintegerIf any region’s status code exceeds this, the monitor is forced to down regardless of other criteria. Useful as a hard ceiling — 499 rejects 500-series responses outright.

All fields combine with AND semantics. A region “passes” iff its status is success AND it meets the response-time gate (if set) AND its status code doesn’t exceed the fail_if_any_status_above ceiling.

When success criteria are set, the result is binary — up or down. The default degraded band is bypassed; the criteria are the contract.

Examples

Strict uptime — every region must pass:

{
"min_passing": "all"
}

A single region timing out flips the monitor to down. Use this on critical-path monitors where you don’t want any region’s failure to be invisible.

Performance contract — three regions must respond under 1 s:

{
"max_response_time_ms": 1000,
"max_response_time_at_least_n": 3,
"min_passing": "majority"
}

The monitor is up only if a majority of regions respond at all, and at least three of them respond in under 1 second. A slow-everywhere response goes to down.

Hard ceiling on 5xx:

{
"fail_if_any_status_above": 499
}

Any single region returning a 500-class status forces the monitor down — useful when you want to alert on the first 500 you see without waiting for a majority of regions to confirm.

Resilient uptime — accept one region passing during a partial outage:

{
"min_passing": 1
}

(Equivalent to the default "any", written explicitly.) The monitor stays up as long as one region succeeds — handy for geo-distributed services where you only care that some customer path is working.

How regions are counted

skipped results are excluded from the count entirely. A region that ran but was filtered out (e.g. IPv6 sub-check on a cloud-IPv4-only region) doesn’t penalise the monitor.

runner_unavailable results are treated as failures by the criteria path. Use a more resilient monitor (multiple cloud providers via hardened locations) to reduce this signal.

Interaction with alert rules

Success criteria affect the monitor’s overall status, not individual region results. Per-region alert rules (region X has failed N times in a row) still fire on per-region state. Use the monitor-level status alert to consume the aggregated verdict; pair it with confirmation regions for further noise suppression.