{"timezone":"UTC","cycle_alignment":"unix_epoch","endpoints":{"hourly":{"url":"https:\/\/downable.site\/outage\/hourly","cycle_seconds":3600,"down_from_second":0,"down_until_second":900,"failure":"http_503","summary":"HTTP 503 for the first 15 minutes of every hour (UTC). Sized so 5-minute-interval monitors alert and recover every cycle."},"twenty":{"url":"https:\/\/downable.site\/outage\/twenty","cycle_seconds":1200,"down_from_second":0,"down_until_second":300,"failure":"http_503","summary":"HTTP 503 for the first 5 minutes of every 20-minute cycle (:00, :20, :40 UTC). Sized for 1-minute-interval monitors."},"flappy":{"url":"https:\/\/downable.site\/flappy","cycle_seconds":240,"down_from_second":120,"down_until_second":240,"failure":"http_503","summary":"Two minutes up, two minutes down, forever (15 outages\/hour). Exercises flap handling and alert suppression."},"keyword":{"url":"https:\/\/downable.site\/keyword","cycle_seconds":3600,"down_from_second":1800,"down_until_second":2700,"failure":"keyword_missing","summary":"Always HTTP 200. The body contains DOWNABLE_KEYWORD_OK except minutes 30-44 of every hour (UTC), when it is replaced by DOWNABLE_KEYWORD_GONE. Tests content\/keyword checks without any real downtime."},"timeout":{"url":"https:\/\/downable.site\/timeout","cycle_seconds":3600,"down_from_second":2700,"down_until_second":3600,"failure":"timeout","summary":"Instant HTTP 200 except minutes 45-59 of every hour (UTC), when the response stalls past typical monitor timeouts before completing."}},"on_demand":{"status":"https:\/\/downable.site\/status\/{code} responds with any HTTP status 200-599","redirect":"https:\/\/downable.site\/redirect\/{hops} serves a chain of {hops} redirects (max 20), then 200","redirect_loop":"https:\/\/downable.site\/redirect\/loop redirects to itself forever"}}