{"openapi":"3.1.0","info":{"title":"hostsrc Status API","version":"0.1.0","description":"This status page's public API: no key, JSON, CORS enabled, cached for up to 30 seconds. `/api/v2/*.json` is Atlassian Statuspage's v2 read API for this page; `/api/v1/pages/{page}/…` is Upstreamr's own, with uptime, history and network detail. The human-readable reference is at `/api`."},"servers":[{"url":"https://status.hostsrc.com"}],"tags":[{"name":"Public","description":"Unauthenticated, cacheable, CORS-enabled (private pages: see the description above)."},{"name":"Statuspage-compatible","description":"Atlassian Statuspage's v2 read API, on each page's own address."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Organization API key (sk_...) created in the admin."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["code","message"]}},"required":["error"]}},"parameters":{}},"paths":{"/api/v1/pages/{page}":{"get":{"tags":["Public"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"},{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Page metadata, theme and features","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["brand","network"]},"description":{"type":["string","null"]},"url":{"type":["string","null"],"format":"uri"},"logoUrl":{"type":["string","null"],"format":"uri"},"logoDarkUrl":{"type":["string","null"],"format":"uri"},"faviconUrl":{"type":["string","null"],"format":"uri"},"websiteUrl":{"type":["string","null"],"format":"uri"},"supportUrl":{"type":["string","null"],"format":"uri"},"timezone":{"type":"string"},"language":{"type":"string","enum":["en","ro"],"description":"Default language of the page (`en`, `ro`)."},"languages":{"type":"array","items":{"type":"string","enum":["en","ro"]},"minItems":1},"theme":{"type":"object","properties":{"mode":{"type":"string","enum":["light","dark","system"],"default":"system"},"radius":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"fontFamily":{"type":"string","maxLength":200,"pattern":"^[\\w\\s,'\"-]+$"},"headingFontFamily":{"type":"string","maxLength":200,"pattern":"^[\\w\\s,'\"-]+$"},"fontUrl":{"type":"string","maxLength":512,"format":"uri"},"nav":{"type":"string","enum":["default","center"]},"light":{"type":"object","properties":{"background":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"card":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"card-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"popover":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"popover-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"secondary":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"secondary-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"muted":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"muted-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"border":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"input":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"ring":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"primary":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"primary-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"accent":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"accent-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-operational":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-degraded":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-partial":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-major":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-maintenance":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"}},"default":{}},"dark":{"type":"object","properties":{"background":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"card":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"card-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"popover":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"popover-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"secondary":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"secondary-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"muted":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"muted-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"border":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"input":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"ring":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"primary":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"primary-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"accent":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"accent-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-operational":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-degraded":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-partial":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-major":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-maintenance":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"}},"default":{}}}},"skin":{"type":"string"},"customCss":{"type":["string","null"]},"features":{"type":"object","properties":{"subscriptions":{"type":"boolean"},"network":{"type":"boolean"},"history":{"type":"boolean"}},"required":["subscriptions","network","history"]},"turnstileSiteKey":{"type":["string","null"],"description":"Cloudflare Turnstile site key when subscribing needs a human check: render the widget with this key and send its token as `turnstileToken`. Null when no token is needed."}},"required":["id","slug","name","kind","description","url","logoUrl","logoDarkUrl","faviconUrl","websiteUrl","supportUrl","timezone","language","languages","theme","skin","customCss","features","turnstileSiteKey"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/summary":{"get":{"tags":["Public"],"summary":"Everything needed to render an overview","parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"},{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Current status, component groups, active incidents and maintenances","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["brand","network"]},"description":{"type":["string","null"]},"url":{"type":["string","null"],"format":"uri"},"logoUrl":{"type":["string","null"],"format":"uri"},"logoDarkUrl":{"type":["string","null"],"format":"uri"},"faviconUrl":{"type":["string","null"],"format":"uri"},"websiteUrl":{"type":["string","null"],"format":"uri"},"supportUrl":{"type":["string","null"],"format":"uri"},"timezone":{"type":"string"},"language":{"type":"string","enum":["en","ro"],"description":"Default language of the page (`en`, `ro`)."},"languages":{"type":"array","items":{"type":"string","enum":["en","ro"]},"minItems":1},"theme":{"type":"object","properties":{"mode":{"type":"string","enum":["light","dark","system"],"default":"system"},"radius":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"fontFamily":{"type":"string","maxLength":200,"pattern":"^[\\w\\s,'\"-]+$"},"headingFontFamily":{"type":"string","maxLength":200,"pattern":"^[\\w\\s,'\"-]+$"},"fontUrl":{"type":"string","maxLength":512,"format":"uri"},"nav":{"type":"string","enum":["default","center"]},"light":{"type":"object","properties":{"background":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"card":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"card-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"popover":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"popover-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"secondary":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"secondary-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"muted":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"muted-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"border":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"input":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"ring":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"primary":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"primary-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"accent":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"accent-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-operational":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-degraded":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-partial":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-major":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-maintenance":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"}},"default":{}},"dark":{"type":"object","properties":{"background":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"card":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"card-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"popover":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"popover-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"secondary":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"secondary-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"muted":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"muted-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"border":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"input":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"ring":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"primary":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"primary-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"accent":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"accent-foreground":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-operational":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-degraded":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-partial":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-major":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"},"status-maintenance":{"type":"string","maxLength":64,"pattern":"^[#a-zA-Z0-9.,%()\\s/-]+$"}},"default":{}}}},"skin":{"type":"string"},"customCss":{"type":["string","null"]},"features":{"type":"object","properties":{"subscriptions":{"type":"boolean"},"network":{"type":"boolean"},"history":{"type":"boolean"}},"required":["subscriptions","network","history"]},"turnstileSiteKey":{"type":["string","null"],"description":"Cloudflare Turnstile site key when subscribing needs a human check: render the widget with this key and send its token as `turnstileToken`. Null when no token is needed."}},"required":["id","slug","name","kind","description","url","logoUrl","logoDarkUrl","faviconUrl","websiteUrl","supportUrl","timezone","language","languages","theme","skin","customCss","features","turnstileSiteKey"]},"status":{"type":"object","properties":{"indicator":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"description":{"type":"string"}},"required":["indicator","description"]},"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":["string","null"]},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"collapsed":{"type":"boolean"},"order":{"type":"integer"},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"kind":{"type":"string","enum":["service","network","region","datacenter","pop","server"]},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"showUptime":{"type":"boolean"},"location":{"type":["object","null"],"properties":{"city":{"type":["string","null"]},"country":{"type":["string","null"],"minLength":2,"maxLength":2},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]}},"required":["city","country","lat","lng"]},"order":{"type":"integer"},"game":{"type":["object","null"],"properties":{"players":{"type":["integer","null"]},"maxPlayers":{"type":["integer","null"]},"map":{"type":["string","null"]},"version":{"type":["string","null"]},"updatedAt":{"type":"string","format":"date-time"}},"required":["players","maxPlayers","map","version","updatedAt"]}},"required":["id","name","description","kind","status","showUptime","location","order"]}}},"required":["id","name","status","collapsed","order","components"]}},"activeIncidents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["incident","maintenance"]},"title":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"url":{"type":["string","null"],"format":"uri"},"source":{"type":["object","null"],"properties":{"name":{"type":"string"},"url":{"type":["string","null"],"format":"uri"}},"required":["name","url"]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["id","name","status"]}},"scheduledStart":{"type":["string","null"],"format":"date-time"},"scheduledEnd":{"type":["string","null"],"format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"resolvedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"body":{"type":"string"},"html":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","status","body","html","createdAt"]}},"recurrence":{"type":["string","null"]},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","kind","title","status","impact","url","source","components","scheduledStart","scheduledEnd","startedAt","resolvedAt","createdAt","updatedAt","updates"]}},"activeMaintenances":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["incident","maintenance"]},"title":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"url":{"type":["string","null"],"format":"uri"},"source":{"type":["object","null"],"properties":{"name":{"type":"string"},"url":{"type":["string","null"],"format":"uri"}},"required":["name","url"]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["id","name","status"]}},"scheduledStart":{"type":["string","null"],"format":"date-time"},"scheduledEnd":{"type":["string","null"],"format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"resolvedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"body":{"type":"string"},"html":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","status","body","html","createdAt"]}},"recurrence":{"type":["string","null"]},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","kind","title","status","impact","url","source","components","scheduledStart","scheduledEnd","startedAt","resolvedAt","createdAt","updatedAt","updates"]}},"upcomingMaintenances":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["incident","maintenance"]},"title":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"url":{"type":["string","null"],"format":"uri"},"source":{"type":["object","null"],"properties":{"name":{"type":"string"},"url":{"type":["string","null"],"format":"uri"}},"required":["name","url"]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["id","name","status"]}},"scheduledStart":{"type":["string","null"],"format":"date-time"},"scheduledEnd":{"type":["string","null"],"format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"resolvedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"body":{"type":"string"},"html":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","status","body","html","createdAt"]}},"recurrence":{"type":["string","null"]},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","kind","title","status","impact","url","source","components","scheduledStart","scheduledEnd","startedAt","resolvedAt","createdAt","updatedAt","updates"]}},"vendors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":["string","null"],"enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance",null]},"url":{"type":"string","format":"uri"},"checkedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","name","status","url","checkedAt"]}},"generatedAt":{"type":"string","format":"date-time"}},"required":["page","status","groups","activeIncidents","activeMaintenances","upcomingMaintenances","vendors","generatedAt"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/openstatus.json":{"get":{"tags":["Public"],"summary":"OpenStatus's page feed","description":"The page in the shape of an OpenStatus page's `/feed/json`, also served at `/feed/json` on the page's own address, so integrations written for a page that moved here from OpenStatus keep working. Incidents and maintenance brought by the history import keep their OpenStatus ids (numbers); everything else has Upstreamr ids (strings). The 100 most recent of each.","parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"},{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Page status, components and groups, status reports and maintenances, newest first","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["success","degraded","error","info"]},"updatedAt":{"type":"string","format":"date-time"},"monitors":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}]},"name":{"type":"string"},"description":{"type":["string","null"]},"status":{"type":"string","enum":["success","degraded","error","info"]}},"required":["id","name","description","status"]}},"pageComponents":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}]},"name":{"type":"string"},"description":{"type":["string","null"]},"monitorId":{"type":"null"},"order":{"type":"integer"},"groupId":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}]},"groupOrder":{"type":["integer","null"]}},"required":["id","name","description","monitorId","order","groupId","groupOrder"]}},"pageComponentGroups":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}]},"name":{"type":"string"}},"required":["id","name"]}},"maintenances":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}]},"name":{"type":"string"},"message":{"type":"string"},"maintenanceUpdates":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}]},"message":{"type":"string"},"date":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","message","date","updatedAt"]}},"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"monitors":{"type":"array","items":{"anyOf":[{"type":"integer"},{"type":"string"}]}},"pageComponents":{"type":"array","items":{"anyOf":[{"type":"integer"},{"type":"string"}]}}},"required":["id","name","message","maintenanceUpdates","from","to","updatedAt","monitors","pageComponents"]}},"statusReports":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}]},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved"]},"monitors":{"type":"array","items":{"anyOf":[{"type":"integer"},{"type":"string"}]}},"pageComponents":{"type":"array","items":{"anyOf":[{"type":"integer"},{"type":"string"}]}},"statusReportUpdates":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}]},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved"]},"message":{"type":"string"},"date":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","status","message","date","updatedAt"]}}},"required":["id","title","updatedAt","status","monitors","pageComponents","statusReportUpdates"]}}},"required":["title","description","status","updatedAt","monitors","pageComponents","pageComponentGroups","maintenances","statusReports"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/uptime":{"get":{"tags":["Public"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":365,"default":90},"required":false,"name":"days","in":"query"},{"schema":{"type":"string"},"required":false,"name":"componentId","in":"query"},{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Per-day uptime for each component","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"components":{"type":"array","items":{"type":"object","properties":{"componentId":{"type":"string"},"uptime":{"type":["number","null"],"minimum":0,"maximum":1},"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"uptime":{"type":["number","null"],"minimum":0,"maximum":1},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"downtimeSeconds":{"type":"integer","minimum":0},"incidents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]}},"required":["id","title","impact"]}}},"required":["date","uptime","status","downtimeSeconds","incidents"]}}},"required":["componentId","uptime","days"]}}},"required":["from","to","components"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/incidents":{"get":{"tags":["Public"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"},{"schema":{"type":"string","enum":["active","resolved","all"],"default":"all"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","enum":["incident","maintenance"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Incidents, newest first","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["incident","maintenance"]},"title":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"url":{"type":["string","null"],"format":"uri"},"source":{"type":["object","null"],"properties":{"name":{"type":"string"},"url":{"type":["string","null"],"format":"uri"}},"required":["name","url"]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["id","name","status"]}},"scheduledStart":{"type":["string","null"],"format":"date-time"},"scheduledEnd":{"type":["string","null"],"format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"resolvedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"body":{"type":"string"},"html":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","status","body","html","createdAt"]}},"recurrence":{"type":["string","null"]},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","kind","title","status","impact","url","source","components","scheduledStart","scheduledEnd","startedAt","resolvedAt","createdAt","updatedAt","updates"]}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/incidents/{id}":{"get":{"tags":["Public"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"One incident or maintenance with all updates","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["incident","maintenance"]},"title":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"url":{"type":["string","null"],"format":"uri"},"source":{"type":["object","null"],"properties":{"name":{"type":"string"},"url":{"type":["string","null"],"format":"uri"}},"required":["name","url"]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["id","name","status"]}},"scheduledStart":{"type":["string","null"],"format":"date-time"},"scheduledEnd":{"type":["string","null"],"format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"resolvedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"body":{"type":"string"},"html":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","status","body","html","createdAt"]}},"recurrence":{"type":["string","null"]},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","kind","title","status","impact","url","source","components","scheduledStart","scheduledEnd","startedAt","resolvedAt","createdAt","updatedAt","updates"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/history":{"get":{"tags":["Public"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":false,"name":"before","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":12,"default":3},"required":false,"name":"months","in":"query"},{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Incidents and maintenances grouped by month","content":{"application/json":{"schema":{"type":"object","properties":{"months":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"incidents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["incident","maintenance"]},"title":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"url":{"type":["string","null"],"format":"uri"},"source":{"type":["object","null"],"properties":{"name":{"type":"string"},"url":{"type":["string","null"],"format":"uri"}},"required":["name","url"]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["id","name","status"]}},"scheduledStart":{"type":["string","null"],"format":"date-time"},"scheduledEnd":{"type":["string","null"],"format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"resolvedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed","cancelled"]}]},"body":{"type":"string"},"html":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"body":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","status","body","html","createdAt"]}},"recurrence":{"type":["string","null"]},"translations":{"type":"object","properties":{"en":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}},"ro":{"type":"object","properties":{"title":{"type":"string"},"source":{"type":"string","enum":["operator","machine"]}}}}}},"required":["id","kind","title","status","impact","url","source","components","scheduledStart","scheduledEnd","startedAt","resolvedAt","createdAt","updatedAt","updates"]}}},"required":["month","incidents"]}},"nextCursor":{"type":["string","null"]}},"required":["months","nextCursor"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/visitor":{"get":{"tags":["Public"],"summary":"The requester's approximate city, from the edge; used to show the nearest location. Not stored.","responses":{"200":{"description":"City-level location, or nulls when the runtime has none","content":{"application/json":{"schema":{"type":"object","properties":{"city":{"type":["string","null"]},"country":{"type":["string","null"],"minLength":2,"maxLength":2},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]}},"required":["city","country","lat","lng"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/network":{"get":{"tags":["Public"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"},{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Probe regions, network components and prefix visibility","content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":["integer","null"]},"regions":{"type":"array","items":{"type":"object","properties":{"probeId":{"type":"string"},"name":{"type":"string"},"location":{"type":["object","null"],"properties":{"city":{"type":["string","null"]},"country":{"type":["string","null"],"minLength":2,"maxLength":2},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]}},"required":["city","country","lat","lng"]},"provider":{"type":["string","null"]},"asn":{"type":["integer","null"]},"online":{"type":"boolean"},"lastSeenAt":{"type":["string","null"],"format":"date-time"},"latencyP50Ms":{"type":["number","null"]},"latencyP95Ms":{"type":["number","null"]},"lossRatio":{"type":["number","null"],"minimum":0,"maximum":1},"colo":{"type":["string","null"],"default":null},"outsideRegion":{"type":"boolean","default":false}},"required":["probeId","name","location","provider","asn","online","lastSeenAt","latencyP50Ms","latencyP95Ms","lossRatio"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"kind":{"type":"string","enum":["service","network","region","datacenter","pop","server"]},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"showUptime":{"type":"boolean"},"location":{"type":["object","null"],"properties":{"city":{"type":["string","null"]},"country":{"type":["string","null"],"minLength":2,"maxLength":2},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]}},"required":["city","country","lat","lng"]},"order":{"type":"integer"},"game":{"type":["object","null"],"properties":{"players":{"type":["integer","null"]},"maxPlayers":{"type":["integer","null"]},"map":{"type":["string","null"]},"version":{"type":["string","null"]},"updatedAt":{"type":"string","format":"date-time"}},"required":["players","maxPlayers","map","version","updatedAt"]}},"required":["id","name","description","kind","status","showUptime","location","order"]}},"prefixes":{"type":"array","items":{"type":"object","properties":{"prefix":{"type":"string"},"originAsn":{"type":"integer"},"visibility":{"type":["number","null"],"minimum":0,"maximum":1},"seenOrigins":{"type":["array","null"],"items":{"type":"integer"}},"rpki":{"type":"string","enum":["valid","invalid","not_found","unknown"]},"checkedAt":{"type":["string","null"],"format":"date-time"}},"required":["prefix","originAsn","visibility","seenOrigins","rpki","checkedAt"]}},"generatedAt":{"type":"string","format":"date-time"}},"required":["asn","regions","components","prefixes","generatedAt"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/subscribers":{"post":{"tags":["Public"],"summary":"Subscribe an email (double opt-in)","description":"Sends a confirmation link; the address gets updates once it confirms. **Human check:** when the page’s `turnstileSiteKey` (`GET /v1/pages/{page}`) is not null, send a Cloudflare Turnstile token from a widget rendered with that key as `turnstileToken`; without one the request is refused with 403 `captcha_required`, and a rejected or reused token with 403 `captcha_failed`. Tokens are single-use. The widget only runs on hostnames it allows (the page’s own address); a headless page elsewhere can link to the hosted page’s subscribe dialog instead. Rate-limited per client IP (429).","parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email"},"componentIds":{"type":"array","items":{"type":"string"},"maxItems":200},"timeZone":{"type":"string","maxLength":64},"language":{"type":"string","enum":["en","ro"]},"turnstileToken":{"type":["string","null"],"maxLength":4096,"description":"Cloudflare Turnstile token. Required when the page’s `turnstileSiteKey` is not null; tokens are single-use and come from the widget rendered with that key on a hostname it allows."}},"required":["email"]}}}},"responses":{"202":{"description":"Confirmation email sent (or already subscribed)","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["pending_confirmation","already_subscribed"]}},"required":["status"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Human check missing (`captcha_required`) or failed (`captcha_failed`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many subscribe attempts from this IP (`rate_limited`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/subscribers/chat":{"post":{"tags":["Public"],"summary":"Subscribe a Discord, Slack or Microsoft Teams channel by its webhook URL","description":"Posts a welcome message to the channel right away; only a webhook that accepts it is saved. Every message carries an unsubscribe link, and a deleted webhook unsubscribes itself. **Human check:** when the page’s `turnstileSiteKey` (`GET /v1/pages/{page}`) is not null, send a Cloudflare Turnstile token from a widget rendered with that key as `turnstileToken`; without one the request is refused with 403 `captcha_required`, and a rejected or reused token with 403 `captcha_failed`. Tokens are single-use. The widget only runs on hostnames it allows (the page’s own address); a headless page elsewhere can link to the hosted page’s subscribe dialog instead. Rate-limited per client IP (429).","parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":512,"format":"uri"},"componentIds":{"type":"array","items":{"type":"string"},"maxItems":200},"language":{"type":"string","enum":["en","ro"]},"turnstileToken":{"type":["string","null"],"maxLength":4096,"description":"Cloudflare Turnstile token. Required when the page’s `turnstileSiteKey` is not null; tokens are single-use and come from the widget rendered with that key on a hostname it allows."}},"required":["url"]}}}},"responses":{"201":{"description":"Subscribed (or already subscribed)","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["subscribed","already_subscribed"]},"channel":{"type":"string","enum":["discord","slack","teams"]}},"required":["status","channel"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Human check missing (`captcha_required`) or failed (`captcha_failed`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many subscribe attempts from this IP (`rate_limited`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages/{page}/subscribers/telegram":{"post":{"tags":["Public"],"summary":"Start a Telegram subscription (one-time link for the bot)","description":"A Telegram bot can only message a chat that started it, so this returns a one-time code with `t.me` links (a private chat, a group, or a channel where the bot posts as an admin). The chat is subscribed once it sends `/start <code>` to the bot; poll `GET /v1/telegram/links/{code}` to see when. Codes expire after 30 minutes. 503 `telegram_disabled` when this deployment has no Telegram bot. **Human check:** when the page’s `turnstileSiteKey` (`GET /v1/pages/{page}`) is not null, send a Cloudflare Turnstile token from a widget rendered with that key as `turnstileToken`; without one the request is refused with 403 `captcha_required`, and a rejected or reused token with 403 `captcha_failed`. Tokens are single-use. The widget only runs on hostnames it allows (the page’s own address); a headless page elsewhere can link to the hosted page’s subscribe dialog instead. Rate-limited per client IP (429).","parameters":[{"schema":{"type":"string","minLength":1,"example":"hostsrc","description":"Page slug or id"},"required":true,"description":"Page slug or id","name":"page","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"componentIds":{"type":"array","items":{"type":"string"},"maxItems":200},"language":{"type":"string","enum":["en","ro"]},"turnstileToken":{"type":["string","null"],"maxLength":4096,"description":"Cloudflare Turnstile token. Required when the page’s `turnstileSiteKey` is not null; tokens are single-use and come from the widget rendered with that key on a hostname it allows."}}}}}},"responses":{"201":{"description":"One-time link issued","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"botUsername":{"type":"string"},"privateUrl":{"type":"string"},"groupUrl":{"type":"string"},"channelUrl":{"type":"string"},"command":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}},"required":["code","botUsername","privateUrl","groupUrl","channelUrl","command","expiresAt"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Human check missing (`captcha_required`) or failed (`captcha_failed`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many subscribe attempts from this IP (`rate_limited`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/telegram/links/{code}":{"get":{"tags":["Public"],"summary":"Whether a Telegram subscription link was used","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64},"required":true,"name":"code","in":"path"}],"responses":{"200":{"description":"`pending` until the chat sends `/start <code>`, then `connected`; `expired` after 30 minutes","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["pending","connected","expired"]},"chat":{"type":["object","null"],"properties":{"type":{"type":"string","enum":["private","group","supergroup","channel"]},"title":{"type":["string","null"]}},"required":["type","title"]}},"required":["status","chat"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v2/summary.json":{"get":{"tags":["Statuspage-compatible"],"summary":"Page summary","description":"The overall indicator, every component and group, unresolved incidents, and upcoming and in-progress maintenance. Most consumers only need this. `Accept: text/markdown` returns a short Markdown summary instead. Served on the page's own address only (its custom domain or `<slug>.upstreamr.page`), for that page: there is no `{page}` in the path, and other hosts answer 404.","parameters":[{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Page summary","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"time_zone":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","url","time_zone","updated_at"]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}},"incidents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"monitoring_at":{"type":["string","null"],"format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"shortlink":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"page_id":{"type":"string"},"incident_updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed"]}]},"body":{"type":"string"},"incident_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"display_at":{"type":"string","format":"date-time"},"affected_components":{"type":["array","null"],"items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"old_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"new_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["code","name","old_status","new_status"]}},"deliver_notifications":{"type":"boolean"},"custom_tweet":{"type":["string","null"]},"tweet_id":{"type":["string","null"]}},"required":["id","status","body","incident_id","created_at","updated_at","display_at","affected_components","deliver_notifications","custom_tweet","tweet_id"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},"reminder_intervals":{"type":["string","null"]}},"required":["id","name","created_at","updated_at","monitoring_at","resolved_at","impact","shortlink","started_at","page_id","incident_updates","components","status","reminder_intervals"]}},"scheduled_maintenances":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"monitoring_at":{"type":["string","null"],"format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"shortlink":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"page_id":{"type":"string"},"incident_updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed"]}]},"body":{"type":"string"},"incident_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"display_at":{"type":"string","format":"date-time"},"affected_components":{"type":["array","null"],"items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"old_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"new_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["code","name","old_status","new_status"]}},"deliver_notifications":{"type":"boolean"},"custom_tweet":{"type":["string","null"]},"tweet_id":{"type":["string","null"]}},"required":["id","status","body","incident_id","created_at","updated_at","display_at","affected_components","deliver_notifications","custom_tweet","tweet_id"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}},"status":{"type":"string","enum":["scheduled","in_progress","verifying","completed"]},"scheduled_for":{"type":["string","null"],"format":"date-time"},"scheduled_until":{"type":["string","null"],"format":"date-time"}},"required":["id","name","created_at","updated_at","monitoring_at","resolved_at","impact","shortlink","started_at","page_id","incident_updates","components","status","scheduled_for","scheduled_until"]}},"status":{"type":"object","properties":{"indicator":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"description":{"type":"string"}},"required":["indicator","description"]}},"required":["page","components","incidents","scheduled_maintenances","status"]}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v2/status.json":{"get":{"tags":["Statuspage-compatible"],"summary":"Page status","description":"The overall indicator (`none`, `minor`, `major`, `critical`, `maintenance`) and its description. Served on the page's own address only (its custom domain or `<slug>.upstreamr.page`), for that page: there is no `{page}` in the path, and other hosts answer 404.","parameters":[{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Page status","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"time_zone":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","url","time_zone","updated_at"]},"status":{"type":"object","properties":{"indicator":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"description":{"type":"string"}},"required":["indicator","description"]}},"required":["page","status"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v2/components.json":{"get":{"tags":["Statuspage-compatible"],"summary":"Components","description":"Every component and group with its status. Served on the page's own address only (its custom domain or `<slug>.upstreamr.page`), for that page: there is no `{page}` in the path, and other hosts answer 404.","parameters":[{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Components","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"time_zone":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","url","time_zone","updated_at"]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}}},"required":["page","components"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v2/incidents/unresolved.json":{"get":{"tags":["Statuspage-compatible"],"summary":"Unresolved incidents","description":"Incidents in the `investigating`, `identified` or `monitoring` state, newest first. Served on the page's own address only (its custom domain or `<slug>.upstreamr.page`), for that page: there is no `{page}` in the path, and other hosts answer 404.","parameters":[{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Unresolved incidents","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"time_zone":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","url","time_zone","updated_at"]},"incidents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"monitoring_at":{"type":["string","null"],"format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"shortlink":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"page_id":{"type":"string"},"incident_updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed"]}]},"body":{"type":"string"},"incident_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"display_at":{"type":"string","format":"date-time"},"affected_components":{"type":["array","null"],"items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"old_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"new_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["code","name","old_status","new_status"]}},"deliver_notifications":{"type":"boolean"},"custom_tweet":{"type":["string","null"]},"tweet_id":{"type":["string","null"]}},"required":["id","status","body","incident_id","created_at","updated_at","display_at","affected_components","deliver_notifications","custom_tweet","tweet_id"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},"reminder_intervals":{"type":["string","null"]}},"required":["id","name","created_at","updated_at","monitoring_at","resolved_at","impact","shortlink","started_at","page_id","incident_updates","components","status","reminder_intervals"]}}},"required":["page","incidents"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v2/incidents.json":{"get":{"tags":["Statuspage-compatible"],"summary":"All incidents","description":"The 50 most recent incidents, resolved ones included, newest first. Served on the page's own address only (its custom domain or `<slug>.upstreamr.page`), for that page: there is no `{page}` in the path, and other hosts answer 404.","parameters":[{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"All incidents","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"time_zone":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","url","time_zone","updated_at"]},"incidents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"monitoring_at":{"type":["string","null"],"format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"shortlink":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"page_id":{"type":"string"},"incident_updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed"]}]},"body":{"type":"string"},"incident_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"display_at":{"type":"string","format":"date-time"},"affected_components":{"type":["array","null"],"items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"old_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"new_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["code","name","old_status","new_status"]}},"deliver_notifications":{"type":"boolean"},"custom_tweet":{"type":["string","null"]},"tweet_id":{"type":["string","null"]}},"required":["id","status","body","incident_id","created_at","updated_at","display_at","affected_components","deliver_notifications","custom_tweet","tweet_id"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},"reminder_intervals":{"type":["string","null"]}},"required":["id","name","created_at","updated_at","monitoring_at","resolved_at","impact","shortlink","started_at","page_id","incident_updates","components","status","reminder_intervals"]}}},"required":["page","incidents"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v2/scheduled-maintenances/upcoming.json":{"get":{"tags":["Statuspage-compatible"],"summary":"Upcoming maintenance","description":"Maintenance still in the `scheduled` state, soonest first. Served on the page's own address only (its custom domain or `<slug>.upstreamr.page`), for that page: there is no `{page}` in the path, and other hosts answer 404.","parameters":[{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Upcoming maintenance","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"time_zone":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","url","time_zone","updated_at"]},"scheduled_maintenances":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"monitoring_at":{"type":["string","null"],"format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"shortlink":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"page_id":{"type":"string"},"incident_updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed"]}]},"body":{"type":"string"},"incident_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"display_at":{"type":"string","format":"date-time"},"affected_components":{"type":["array","null"],"items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"old_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"new_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["code","name","old_status","new_status"]}},"deliver_notifications":{"type":"boolean"},"custom_tweet":{"type":["string","null"]},"tweet_id":{"type":["string","null"]}},"required":["id","status","body","incident_id","created_at","updated_at","display_at","affected_components","deliver_notifications","custom_tweet","tweet_id"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}},"status":{"type":"string","enum":["scheduled","in_progress","verifying","completed"]},"scheduled_for":{"type":["string","null"],"format":"date-time"},"scheduled_until":{"type":["string","null"],"format":"date-time"}},"required":["id","name","created_at","updated_at","monitoring_at","resolved_at","impact","shortlink","started_at","page_id","incident_updates","components","status","scheduled_for","scheduled_until"]}}},"required":["page","scheduled_maintenances"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v2/scheduled-maintenances/active.json":{"get":{"tags":["Statuspage-compatible"],"summary":"Active maintenance","description":"Maintenance in the `in_progress` or `verifying` state. Served on the page's own address only (its custom domain or `<slug>.upstreamr.page`), for that page: there is no `{page}` in the path, and other hosts answer 404.","parameters":[{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"Active maintenance","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"time_zone":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","url","time_zone","updated_at"]},"scheduled_maintenances":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"monitoring_at":{"type":["string","null"],"format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"shortlink":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"page_id":{"type":"string"},"incident_updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed"]}]},"body":{"type":"string"},"incident_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"display_at":{"type":"string","format":"date-time"},"affected_components":{"type":["array","null"],"items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"old_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"new_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["code","name","old_status","new_status"]}},"deliver_notifications":{"type":"boolean"},"custom_tweet":{"type":["string","null"]},"tweet_id":{"type":["string","null"]}},"required":["id","status","body","incident_id","created_at","updated_at","display_at","affected_components","deliver_notifications","custom_tweet","tweet_id"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}},"status":{"type":"string","enum":["scheduled","in_progress","verifying","completed"]},"scheduled_for":{"type":["string","null"],"format":"date-time"},"scheduled_until":{"type":["string","null"],"format":"date-time"}},"required":["id","name","created_at","updated_at","monitoring_at","resolved_at","impact","shortlink","started_at","page_id","incident_updates","components","status","scheduled_for","scheduled_until"]}}},"required":["page","scheduled_maintenances"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v2/scheduled-maintenances.json":{"get":{"tags":["Statuspage-compatible"],"summary":"All maintenance","description":"The 50 most recent maintenances, completed ones included, latest window first. Served on the page's own address only (its custom domain or `<slug>.upstreamr.page`), for that page: there is no `{page}` in the path, and other hosts answer 404.","parameters":[{"schema":{"type":"string","maxLength":16,"example":"ro","description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written."},"required":false,"description":"Language for the human-readable texts: the page's state, the scheduler's own updates and recurrence descriptions. One of the page's `languages`; anything else means its default. Texts the team wrote (titles, updates, component and group names, the description) come in this language when the team wrote it, else as written.","name":"lang","in":"query"}],"responses":{"200":{"description":"All maintenance","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"time_zone":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","url","time_zone","updated_at"]},"scheduled_maintenances":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"monitoring_at":{"type":["string","null"],"format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"impact":{"type":"string","enum":["none","minor","major","critical","maintenance"]},"shortlink":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"page_id":{"type":"string"},"incident_updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["investigating","identified","monitoring","resolved","postmortem"]},{"type":"string","enum":["scheduled","in_progress","verifying","completed"]}]},"body":{"type":"string"},"incident_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"display_at":{"type":"string","format":"date-time"},"affected_components":{"type":["array","null"],"items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"old_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"new_status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]}},"required":["code","name","old_status","new_status"]}},"deliver_notifications":{"type":"boolean"},"custom_tweet":{"type":["string","null"]},"tweet_id":{"type":["string","null"]}},"required":["id","status","body","incident_id","created_at","updated_at","display_at","affected_components","deliver_notifications","custom_tweet","tweet_id"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["operational","degraded_performance","partial_outage","major_outage","under_maintenance"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"position":{"type":"integer"},"description":{"type":["string","null"]},"showcase":{"type":"boolean"},"start_date":{"type":["string","null"]},"group_id":{"type":["string","null"]},"page_id":{"type":"string"},"group":{"type":"boolean"},"only_show_if_degraded":{"type":"boolean"},"components":{"type":"array","items":{"type":"string"}}},"required":["id","name","status","created_at","updated_at","position","description","showcase","start_date","group_id","page_id","group","only_show_if_degraded"]}},"status":{"type":"string","enum":["scheduled","in_progress","verifying","completed"]},"scheduled_for":{"type":["string","null"],"format":"date-time"},"scheduled_until":{"type":["string","null"],"format":"date-time"}},"required":["id","name","created_at","updated_at","monitoring_at","resolved_at","impact","shortlink","started_at","page_id","incident_updates","components","status","scheduled_for","scheduled_until"]}}},"required":["page","scheduled_maintenances"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{}}