{"scenarios":[{"id":"always-up","url":"/scenarios/always-up","summary":"Always returns 200 OK","chk":{"method":"GET","expected_status":"200-399","interval_seconds":60}},{"id":"always-down","url":"/scenarios/always-down","summary":"Always returns 500 (permanent incident)","chk":{"method":"GET","expected_status":"200-399","interval_seconds":60,"notes":"Expect incident to stay open"}},{"id":"hourly-outage","url":"/scenarios/hourly-outage","summary":"500 for 2 minutes at the top of every hour (UTC), else 200","chk":{"method":"GET","expected_status":"200-399","interval_seconds":30,"notes":"Expect incident near :00, recover by ~:03 with default thresholds"},"state":{"status":"up","remaining_seconds":313}},{"id":"outage-15m","url":"/scenarios/outage-15m","summary":"500 for 90 seconds every 15 minutes (UTC), else 200","chk":{"method":"GET","expected_status":"200-399","interval_seconds":30,"notes":"Faster open/recover loop than hourly-outage"},"state":{"status":"up","remaining_seconds":313}},{"id":"flaky-20","url":"/scenarios/flaky-20","summary":"200 by default, ~20% chance of 500","chk":{"method":"GET","expected_status":"200-399","interval_seconds":30,"notes":"Mostly blips at failure_threshold 4"}},{"id":"wrong-body","url":"/scenarios/wrong-body","summary":"200 with body WRONG; fails body assertion expecting OK","chk":{"method":"GET","expected_status":"200-399","body_contains":"OK","interval_seconds":60}},{"id":"expect-ok","url":"/scenarios/expect-ok","summary":"200 with body OK; pair with wrong-body checks","chk":{"method":"GET","expected_status":"200-399","body_contains":"OK","interval_seconds":60}},{"id":"only-204","url":"/scenarios/only-204","summary":"204 No Content with empty body","chk":{"method":"GET","expected_status":"204-204","interval_seconds":60}},{"id":"timeout","url":"/scenarios/timeout","summary":"Delays 11s before 200 (past chk's ~10s probe timeout)","chk":{"method":"GET","expected_status":"200-399","interval_seconds":300,"notes":"Use 5m interval; expensive on workers"}},{"id":"redirect-once","url":"/scenarios/redirect-once","summary":"302 to /scenarios/always-up","chk":{"method":"GET","expected_status":"200-399","follow_redirects":true,"notes":"Also create a nofollow check expecting failure or 302"}},{"id":"redirect-chain","url":"/scenarios/redirect-chain","summary":"Starts a 5-hop redirect chain ending at /redirect/0 with 200 OK","chk":{"method":"GET","expected_status":"200-399","follow_redirects":true,"interval_seconds":60}},{"id":"echo-post","url":"/scenarios/echo-post","summary":"POST only; echoes request body as 200, other methods 405","chk":{"method":"POST","expected_status":"200-399","interval_seconds":60,"notes":"Send a small request body and assert it is returned"}},{"id":"echo-put","url":"/scenarios/echo-put","summary":"PUT only; echoes request body as 200, other methods 405","chk":{"method":"PUT","expected_status":"200-399","interval_seconds":60,"notes":"Send a small request body and assert it is returned"}},{"id":"echo-patch","url":"/scenarios/echo-patch","summary":"PATCH only; echoes request body as 200, other methods 405","chk":{"method":"PATCH","expected_status":"200-399","interval_seconds":60,"notes":"Send a small request body and assert it is returned"}},{"id":"echo-delete","url":"/scenarios/echo-delete","summary":"DELETE only; echoes request body as 200, other methods 405","chk":{"method":"DELETE","expected_status":"200-399","interval_seconds":60,"notes":"Send a small request body and assert it is returned"}},{"id":"echo-options","url":"/scenarios/echo-options","summary":"OPTIONS only; echoes request body as 200, other methods 405","chk":{"method":"OPTIONS","expected_status":"200-399","interval_seconds":60,"notes":"Send a small request body and assert it is returned"}},{"id":"echo-header","url":"/scenarios/echo-header","summary":"Returns the X-Crash-Loop-Test request header as 200","chk":{"method":"GET","expected_status":"200-399","interval_seconds":60,"notes":"Set X-Crash-Loop-Test and assert its value is returned"}}]}