{"openapi":"3.1.0","info":{"title":"OnlineOrNot API","description":"Interact with OnlineOrNot programmatically via the OnlineOrNot API.\n\nUsing the OnlineOrNot API requires authentication so that OnlineOrNot knows who is making requests and what permissions you have. Create an API token to grant access to the API to perform actions.\n\nTo create an API token, from the OnlineOrNot dashboard, go to API Tokens and click Create token.\n\n## Documentation\n\n- [API Reference](https://developers.onlineornot.com) - Full API documentation with examples\n- [LLM-friendly docs](https://developers.onlineornot.com/llms.txt) - Markdown documentation index for AI assistants\n\nTotally new to OnlineOrNot? [Start here](https://onlineornot.com/docs/welcome/).","license":{"name":"BSD-3-Clause","url":"https://opensource.org/licenses/BSD-3-Clause"},"version":"1.0.0"},"servers":[{"url":"https://api.onlineornot.com","description":"Client API"}],"tags":[{"name":"Audit Logs","description":"View audit log events for your organisation"},{"name":"Tokens","description":"Create, list, verify, and delete API tokens for authentication"},{"name":"Checks","description":"Create and manage uptime checks, retrieve check results and status history"},{"name":"Heartbeats","description":"Monitor cron jobs and scheduled tasks with heartbeat pings"},{"name":"Status Pages","description":"Create and manage public status pages for communicating service health"},{"name":"Status Page Components","description":"Add and manage individual service components displayed on status pages"},{"name":"Status Page Component Groups","description":"Organize status page components into logical groups"},{"name":"Status Page Incidents","description":"Create and manage incidents to communicate outages on status pages"},{"name":"Status Page Incident Updates","description":"Post timeline updates to active incidents"},{"name":"Status Page Scheduled Maintenance","description":"Schedule and manage planned maintenance windows on status pages"},{"name":"Status Page Subscribers","description":"Manage email subscribers for status page notifications"},{"name":"Maintenance Windows","description":"Configure maintenance windows to suppress alerts during planned downtime"},{"name":"People","description":"List and manage users in your organization, including pending invitations"},{"name":"Webhooks","description":"Configure webhook integrations for alert notifications"}],"components":{"securitySchemes":{"api_token":{"type":"http","scheme":"bearer","description":"API token or OAuth access token. OAuth grants covering multiple organizations require the X-OnlineOrNot-Organisation header. API tokens already identify their organization."}},"schemas":{"PublicApiErrorResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]},"PublicApiBadRequest":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]},"PublicApiServerError":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]},"AnyCheckResponse":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/AnyCheck"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},"AnyCheck":{"oneOf":[{"$ref":"#/components/schemas/ExpandedUptimeCheck"},{"$ref":"#/components/schemas/ExpandedBrowserCheck"},{"$ref":"#/components/schemas/ExpandedDnsCheck"},{"$ref":"#/components/schemas/ExpandedTcpCheck"}],"discriminator":{"propertyName":"check_type","mapping":{"UPTIME":"#/components/schemas/ExpandedUptimeCheck","BROWSER":"#/components/schemas/ExpandedBrowserCheck","DNS":"#/components/schemas/ExpandedDnsCheck","TCP":"#/components/schemas/ExpandedTcpCheck"}}},"ExpandedUptimeCheck":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Uptime Check ID"},"name":{"type":"string","example":"My landing page"},"url":{"type":["string","null"],"format":"uri","example":"https://example.com","description":"URL to check (null for script-based browser checks)"},"last_queued":{"type":["string","null"],"example":"2021-01-01T00:00:00.000Z","description":"Last time the check was queued"},"status":{"type":"string","enum":["UP","DOWN","PENDING","PAUSED","MUTED","MAINTENANCE","RECOVERING","VERIFYING"],"example":"UP","description":"Current status of the check based on the latest uptime event"},"headers":{"type":["object","null"],"additionalProperties":{"type":"string"},"example":{"X-My-Header":"My Value"},"description":"Headers to send with the request"},"text_to_search_for":{"type":["string","null"],"description":"Text to search for in the response"},"reminder_alert_interval_minutes":{"type":["number","null"],"example":1440,"description":"Interval in minutes between reminder alerts (-1 for never); null for legacy checks without a configured interval"},"confirmation_period_seconds":{"type":"number","example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"number","example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"test_interval":{"type":"number","example":60,"description":"Interval in seconds between checks"},"timeout":{"type":"number"},"version":{"type":["string","null"],"enum":["NODE24_PLAYWRIGHT","CLOUDFLARE",null],"example":"NODE24_PLAYWRIGHT","description":"Runtime version for browser checks (null for standard uptime checks)"},"script":{"type":["string","null"],"description":"Playwright Test script loaded by GET for scripted browser checks; null for URL-based checks or when script content was not loaded. Mutation responses do not load script content."},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"example":"HIGH","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"verify_ssl":{"type":"boolean","example":true,"description":"Whether to verify SSL certificates"},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"example":"GET","description":"HTTP method to use"},"body":{"type":["string","null"],"description":"Request body for POST/PUT/PATCH requests"},"follow_redirects":{"type":"boolean","example":true},"assertions":{"type":["array","null"],"items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]},"description":"Assertions to validate the response"},"auth_username":{"type":["string","null"],"description":"Username for HTTP Basic Auth. Null when unset; an empty string represents an empty user-id."},"auth_password":{"type":["string","null"],"description":"Password for HTTP Basic Auth. Null when unset; empty strings are preserved."},"test_regions":{"type":"array","items":{"type":"string"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions the check runs from. Format: aws:{region}"},"user_alerts":{"type":"array","items":{"type":"string"},"description":"User IDs to notify on alerts"},"slack_alerts":{"type":"array","items":{"type":"string"},"description":"Slack integration IDs to notify"},"discord_alerts":{"type":"array","items":{"type":"string"},"description":"Discord integration IDs to notify"},"incident_io_alerts":{"type":"array","items":{"type":"string"},"description":"Incident.io integration IDs to notify"},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"},"description":"Microsoft Teams integration IDs to notify"},"telegram_alerts":{"type":"array","items":{"type":"string"},"description":"Telegram integration IDs to notify"},"pushover_alerts":{"type":"array","items":{"type":"string"},"description":"Pushover integration IDs to notify"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"On-call integration IDs (PagerDuty, Opsgenie, Grafana, Spike)"},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"Webhook IDs to notify"},"check_type":{"type":"string","enum":["UPTIME"],"example":"UPTIME"}},"required":["id","name","url","last_queued","status","headers","text_to_search_for","reminder_alert_interval_minutes","confirmation_period_seconds","recovery_period_seconds","test_interval","timeout","version","script","alert_priority","verify_ssl","method","body","follow_redirects","assertions","auth_username","auth_password","test_regions","user_alerts","slack_alerts","discord_alerts","incident_io_alerts","microsoft_teams_alerts","telegram_alerts","pushover_alerts","oncall_alerts","webhook_alerts","check_type"]},"ExpandedBrowserCheck":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Uptime Check ID"},"name":{"type":"string","example":"My landing page"},"url":{"type":["string","null"],"format":"uri","example":"https://example.com","description":"URL to check (null for script-based browser checks)"},"last_queued":{"type":["string","null"],"example":"2021-01-01T00:00:00.000Z","description":"Last time the check was queued"},"status":{"type":"string","enum":["UP","DOWN","PENDING","PAUSED","MUTED","MAINTENANCE","RECOVERING","VERIFYING"],"example":"UP","description":"Current status of the check based on the latest uptime event"},"headers":{"type":["object","null"],"additionalProperties":{"type":"string"},"example":{"X-My-Header":"My Value"},"description":"Headers to send with the request"},"text_to_search_for":{"type":["string","null"],"description":"Text to search for in the response"},"reminder_alert_interval_minutes":{"type":["number","null"],"example":1440,"description":"Interval in minutes between reminder alerts (-1 for never); null for legacy checks without a configured interval"},"confirmation_period_seconds":{"type":"number","example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"number","example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"test_interval":{"type":"number","example":60,"description":"Interval in seconds between checks"},"timeout":{"type":["number","null"],"example":10000,"description":"Timeout in milliseconds"},"script":{"type":["string","null"],"description":"Playwright Test script loaded by GET for scripted browser checks; null for URL-based checks or when script content was not loaded. Mutation responses do not load script content."},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"example":"HIGH","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"verify_ssl":{"type":"boolean","example":true,"description":"Whether to verify SSL certificates"},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"example":"GET","description":"HTTP method to use"},"body":{"type":["string","null"],"description":"Request body for POST/PUT/PATCH requests"},"follow_redirects":{"type":"boolean","example":true},"assertions":{"type":["array","null"],"items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]},"description":"Assertions to validate the response"},"auth_username":{"type":["string","null"],"description":"Username for HTTP Basic Auth. Null when unset; an empty string represents an empty user-id."},"auth_password":{"type":["string","null"],"description":"Password for HTTP Basic Auth. Null when unset; empty strings are preserved."},"test_regions":{"type":"array","items":{"type":"string"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions the check runs from. Format: aws:{region}"},"user_alerts":{"type":"array","items":{"type":"string"},"description":"User IDs to notify on alerts"},"slack_alerts":{"type":"array","items":{"type":"string"},"description":"Slack integration IDs to notify"},"discord_alerts":{"type":"array","items":{"type":"string"},"description":"Discord integration IDs to notify"},"incident_io_alerts":{"type":"array","items":{"type":"string"},"description":"Incident.io integration IDs to notify"},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"},"description":"Microsoft Teams integration IDs to notify"},"telegram_alerts":{"type":"array","items":{"type":"string"},"description":"Telegram integration IDs to notify"},"pushover_alerts":{"type":"array","items":{"type":"string"},"description":"Pushover integration IDs to notify"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"On-call integration IDs (PagerDuty, Opsgenie, Grafana, Spike)"},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"Webhook IDs to notify"},"version":{"type":"string","enum":["NODE24_PLAYWRIGHT","CLOUDFLARE"],"example":"NODE24_PLAYWRIGHT","description":"Runtime version for browser checks."},"check_type":{"type":"string","enum":["BROWSER"],"example":"BROWSER"}},"required":["id","name","url","last_queued","status","headers","text_to_search_for","reminder_alert_interval_minutes","confirmation_period_seconds","recovery_period_seconds","test_interval","timeout","script","alert_priority","verify_ssl","method","body","follow_redirects","assertions","auth_username","auth_password","test_regions","user_alerts","slack_alerts","discord_alerts","incident_io_alerts","microsoft_teams_alerts","telegram_alerts","pushover_alerts","oncall_alerts","webhook_alerts","version","check_type"]},"ExpandedDnsCheck":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Uptime Check ID"},"name":{"type":"string","example":"My landing page"},"last_queued":{"type":["string","null"],"example":"2021-01-01T00:00:00.000Z","description":"Last time the check was queued"},"status":{"type":"string","enum":["UP","DOWN","PENDING","PAUSED","MUTED","MAINTENANCE","RECOVERING","VERIFYING"],"example":"UP","description":"Current status of the check based on the latest uptime event"},"reminder_alert_interval_minutes":{"type":["number","null"],"example":1440,"description":"Interval in minutes between reminder alerts (-1 for never); null for legacy checks without a configured interval"},"confirmation_period_seconds":{"type":"number","example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"number","example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"test_interval":{"type":"number","example":60,"description":"Interval in seconds between checks"},"timeout":{"type":"number"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"example":"HIGH","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"test_regions":{"type":"array","items":{"type":"string"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions the check runs from. Format: aws:{region}"},"user_alerts":{"type":"array","items":{"type":"string"},"description":"User IDs to notify on alerts"},"slack_alerts":{"type":"array","items":{"type":"string"},"description":"Slack integration IDs to notify"},"discord_alerts":{"type":"array","items":{"type":"string"},"description":"Discord integration IDs to notify"},"incident_io_alerts":{"type":"array","items":{"type":"string"},"description":"Incident.io integration IDs to notify"},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"},"description":"Microsoft Teams integration IDs to notify"},"telegram_alerts":{"type":"array","items":{"type":"string"},"description":"Telegram integration IDs to notify"},"pushover_alerts":{"type":"array","items":{"type":"string"},"description":"Pushover integration IDs to notify"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"On-call integration IDs (PagerDuty, Opsgenie, Grafana, Spike)"},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"Webhook IDs to notify"},"check_type":{"type":"string","enum":["DNS"],"example":"DNS"},"url":{"type":"null","description":"DNS checks do not use a URL target."},"version":{"type":"string","enum":["NODE24_DNS"],"example":"NODE24_DNS","description":"Runtime version for DNS checks."},"dns_domain":{"type":"string","example":"example.com","description":"DNS name queried by this check."},"dns_record_type":{"type":"string","enum":["A","AAAA","CNAME","MX","NS","SOA","TXT"],"example":"A","description":"DNS record type queried by this check."},"dns_resolver":{"type":["string","null"],"example":"8.8.8.8:53","description":"Custom resolver used by this check, or null for the default resolver."},"dns_protocol":{"type":"string","enum":["UDP","TCP"],"example":"UDP","description":"DNS transport protocol used by this check."},"assertions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DnsAssertion"},"description":"DNS assertions to validate the response."}},"required":["id","name","last_queued","status","reminder_alert_interval_minutes","confirmation_period_seconds","recovery_period_seconds","test_interval","timeout","alert_priority","test_regions","user_alerts","slack_alerts","discord_alerts","incident_io_alerts","microsoft_teams_alerts","telegram_alerts","pushover_alerts","oncall_alerts","webhook_alerts","check_type","url","version","dns_domain","dns_record_type","dns_resolver","dns_protocol","assertions"]},"DnsAssertion":{"type":"object","properties":{"type":{"type":"string","enum":["DNS_RESPONSE_CODE","DNS_TEXT_ANSWER","DNS_JSON_ANSWER"],"example":"DNS_JSON_ANSWER","description":"Type of DNS assertion"},"property":{"type":"string","example":"$.answers[0].data","description":"Property to assert on. Use JSONPath for DNS_JSON_ANSWER, status for DNS_RESPONSE_CODE, and an empty string for DNS_TEXT_ANSWER."},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"93.184.216.34","description":"Expected value"}},"required":["type","property","comparison","expected"]},"ExpandedTcpCheck":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Uptime Check ID"},"name":{"type":"string","example":"My landing page"},"last_queued":{"type":["string","null"],"example":"2021-01-01T00:00:00.000Z","description":"Last time the check was queued"},"status":{"type":"string","enum":["UP","DOWN","PENDING","PAUSED","MUTED","MAINTENANCE","RECOVERING","VERIFYING"],"example":"UP","description":"Current status of the check based on the latest uptime event"},"reminder_alert_interval_minutes":{"type":["number","null"],"example":1440,"description":"Interval in minutes between reminder alerts (-1 for never); null for legacy checks without a configured interval"},"confirmation_period_seconds":{"type":"number","example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"number","example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"test_interval":{"type":"number","example":60,"description":"Interval in seconds between checks"},"timeout":{"type":"number"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"example":"HIGH","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"test_regions":{"type":"array","items":{"type":"string"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions the check runs from. Format: aws:{region}"},"user_alerts":{"type":"array","items":{"type":"string"},"description":"User IDs to notify on alerts"},"slack_alerts":{"type":"array","items":{"type":"string"},"description":"Slack integration IDs to notify"},"discord_alerts":{"type":"array","items":{"type":"string"},"description":"Discord integration IDs to notify"},"incident_io_alerts":{"type":"array","items":{"type":"string"},"description":"Incident.io integration IDs to notify"},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"},"description":"Microsoft Teams integration IDs to notify"},"telegram_alerts":{"type":"array","items":{"type":"string"},"description":"Telegram integration IDs to notify"},"pushover_alerts":{"type":"array","items":{"type":"string"},"description":"Pushover integration IDs to notify"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"On-call integration IDs (PagerDuty, Opsgenie, Grafana, Spike)"},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"Webhook IDs to notify"},"check_type":{"type":"string","enum":["TCP"],"example":"TCP"},"url":{"type":"null","description":"TCP checks do not use a URL target."},"version":{"type":"string","enum":["NODE24_TCP"],"example":"NODE24_TCP","description":"Runtime version for TCP checks."},"tcp_hostname":{"type":"string","example":"tcpbin.com","description":"TCP hostname connected to by this check."},"tcp_port":{"type":"integer","minimum":1,"maximum":65535,"example":4242,"description":"TCP port to connect to"},"tcp_ip_family":{"type":"string","enum":["IPv4","IPv6"],"example":"IPv4","description":"IP family used by this check."},"tcp_data":{"type":["string","null"],"description":"Optional TCP payload sent by this check."},"tcp_should_fail":{"type":"boolean","example":false,"description":"Whether failed TCP connections are expected."},"assertions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/TcpAssertion"},"description":"TCP assertions to validate the response."}},"required":["id","name","last_queued","status","reminder_alert_interval_minutes","confirmation_period_seconds","recovery_period_seconds","test_interval","timeout","alert_priority","test_regions","user_alerts","slack_alerts","discord_alerts","incident_io_alerts","microsoft_teams_alerts","telegram_alerts","pushover_alerts","oncall_alerts","webhook_alerts","check_type","url","version","tcp_hostname","tcp_port","tcp_ip_family","tcp_data","tcp_should_fail","assertions"]},"TcpAssertion":{"type":"object","properties":{"type":{"type":"string","enum":["TCP_RESPONSE_TIME","TCP_RESPONSE_DATA"],"example":"TCP_RESPONSE_DATA","description":"Type of TCP assertion"},"property":{"type":"string","example":"","description":"Property to assert on. Use an empty string for raw TCP response data and responseTime for response time assertions."},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"OK","description":"Expected value"}},"required":["type","property","comparison","expected"]},"CheckListResponse":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/CheckListItem"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},"CheckListItem":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Uptime Check ID"},"name":{"type":"string","example":"My landing page"},"url":{"type":["string","null"],"format":"uri","example":"https://example.com","description":"URL to check (null for DNS or script-based browser checks)"},"check_type":{"type":"string","enum":["UPTIME","BROWSER","DNS","TCP"],"example":"UPTIME"},"last_queued":{"type":["string","null"],"example":"2021-01-01T00:00:00.000Z","description":"Last time the check was queued"},"status":{"type":"string","enum":["UP","DOWN","PENDING","PAUSED","MUTED","MAINTENANCE","RECOVERING","VERIFYING"],"example":"UP","description":"Current status of the check based on the latest event"},"dns_domain":{"type":["string","null"],"example":"example.com","description":"DNS name queried by this check. Present for DNS checks."},"dns_record_type":{"type":["string","null"],"enum":["A","AAAA","CNAME","MX","NS","SOA","TXT",null],"example":"A","description":"DNS record type queried by this check. Present for DNS checks."},"dns_resolver":{"type":["string","null"],"example":"8.8.8.8:53","description":"Custom resolver used by this DNS check, or null for the default resolver."},"dns_protocol":{"type":["string","null"],"enum":["UDP","TCP",null],"example":"UDP","description":"DNS transport protocol used by this check. Present for DNS checks."},"tcp_hostname":{"type":["string","null"],"example":"tcpbin.com","description":"TCP hostname connected to by this check. Present for TCP checks."},"tcp_port":{"type":["integer","null"],"minimum":1,"maximum":65535,"example":4242,"description":"TCP port to connect to"},"tcp_ip_family":{"type":["string","null"],"enum":["IPv4","IPv6",null],"example":"IPv4","description":"IP family used by this check. Present for TCP checks."}},"required":["id","name","url","check_type","last_queued","status"]},"PublicApiValidationError":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]},"PublicCheckIncidentErrorResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]},"PublicCheckResultsErrorResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]},"DnsCheckResponse":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedDnsCheck"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},"DnsCheckInput":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"default":60,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"default":180,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"default":1440,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"default":10000,"example":10000,"description":"Timeout in milliseconds"},"type":{"type":"string","enum":["DNS_CHECK"]},"dns_domain":{"type":"string","minLength":1,"maxLength":253,"example":"example.com","description":"DNS name to query"},"dns_record_type":{"type":"string","enum":["A","AAAA","CNAME","MX","NS","SOA","TXT"],"example":"A","description":"DNS record type to query"},"dns_resolver":{"type":["string","null"],"example":"8.8.8.8:53","description":"Custom DNS resolver in host:port format. IPv6 must use bracket notation."},"dns_protocol":{"type":"string","enum":["UDP","TCP"],"default":"UDP","example":"UDP","description":"DNS transport protocol"},"assertions":{"type":"array","items":{"$ref":"#/components/schemas/DnsAssertion"},"description":"DNS assertions to run on the response"}},"required":["name","dns_domain","dns_record_type"],"additionalProperties":false},"DnsCheckPatch":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"example":10000,"description":"Timeout in milliseconds"},"paused":{"type":"boolean","example":false,"description":"Stops check execution when true."},"muted":{"type":"boolean","example":false,"description":"Suppresses alerts without stopping checks."},"dns_domain":{"type":"string","minLength":1,"maxLength":253},"dns_record_type":{"type":"string","enum":["A","AAAA","CNAME","MX","NS","SOA","TXT"]},"dns_resolver":{"type":["string","null"],"example":"8.8.8.8:53","description":"Custom DNS resolver in host:port format. IPv6 must use bracket notation."},"dns_protocol":{"type":"string","enum":["UDP","TCP"]},"assertions":{"type":"array","items":{"$ref":"#/components/schemas/DnsAssertion"}}},"additionalProperties":false},"CheckDeleteResponse":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Uptime Check ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},"TcpCheckResponse":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedTcpCheck"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},"TcpCheckInput":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"default":60,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"default":180,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"default":1440,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"default":10000,"example":10000,"description":"Timeout in milliseconds"},"type":{"type":"string","enum":["TCP_CHECK"]},"tcp_hostname":{"type":"string","minLength":1,"maxLength":253,"example":"tcpbin.com","description":"Publicly reachable hostname or IP address to connect to"},"tcp_port":{"type":"integer","minimum":1,"maximum":65535,"example":4242,"description":"TCP port to connect to"},"tcp_ip_family":{"type":"string","enum":["IPv4","IPv6"],"default":"IPv4","example":"IPv4","description":"IP family to use for DNS resolution and socket connection"},"tcp_data":{"type":["string","null"],"maxLength":16384,"example":"PING\r\n","description":"Optional TCP payload to send immediately after connecting"},"tcp_should_fail":{"type":"boolean","default":false,"example":false,"description":"Whether a failed TCP connection should be treated as passing"},"assertions":{"type":"array","items":{"$ref":"#/components/schemas/TcpAssertion"},"description":"TCP assertions to run on response time or response data"}},"required":["name","tcp_hostname","tcp_port"],"additionalProperties":false},"TcpCheckPatch":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"example":10000,"description":"Timeout in milliseconds"},"paused":{"type":"boolean","example":false,"description":"Stops check execution when true."},"muted":{"type":"boolean","example":false,"description":"Suppresses alerts without stopping checks."},"tcp_hostname":{"type":"string","minLength":1,"maxLength":253,"example":"tcpbin.com","description":"Publicly reachable hostname or IP address to connect to"},"tcp_port":{"type":"integer","minimum":1,"maximum":65535,"example":4242,"description":"TCP port to connect to"},"tcp_ip_family":{"type":"string","enum":["IPv4","IPv6"]},"tcp_data":{"type":["string","null"],"maxLength":16384,"example":"PING\r\n","description":"Optional TCP payload to send immediately after connecting"},"tcp_should_fail":{"type":"boolean"},"assertions":{"type":"array","items":{"$ref":"#/components/schemas/TcpAssertion"}}},"additionalProperties":false},"UptimeCheckResponse":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedUptimeCheck"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},"UptimeCheckInput":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"default":60,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"default":180,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"default":1440,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"default":10000,"example":10000,"description":"Timeout in milliseconds"},"url":{"type":"string","format":"uri","example":"https://example.com","description":"URL to check."},"text_to_search_for":{"type":"string","maxLength":4000,"example":"Example Domain","description":"Text to search for in the response"},"type":{"type":"string","enum":["UPTIME_CHECK"],"default":"UPTIME_CHECK","example":"UPTIME_CHECK"},"headers":{"type":"object","additionalProperties":{"type":"string","example":"Bearer {{API_TOKEN}}"},"example":{"Authorization":"Bearer {{API_TOKEN}}"},"description":"Headers to send. Uptime checks support environment variable references such as {{API_TOKEN}}. Terraform example: Authorization = \"Bearer {{API_TOKEN}}\". Terraform stores the template; create the referenced variable separately."},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"default":"GET","example":"GET","description":"HTTP Method"},"body":{"type":"string","example":"Hello World"},"follow_redirects":{"type":"boolean","default":true,"example":true},"assertions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]},"example":[{"type":"JSON_BODY","property":"$.data.name","comparison":"EQUALS","expected":"John Doe"},{"type":"HTML_BODY","property":"meta[name=\"description\"]","comparison":"NOT_EMPTY","expected":""}],"description":"Assertions to run on the response"},"verify_ssl":{"type":"boolean","default":true,"example":true,"description":"Whether to fail a check if SSL verification fails"},"auth_username":{"type":"string","example":"username","description":"Username to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; an empty string represents an empty user-id."},"auth_password":{"type":"string","example":"password","description":"Password to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; empty strings are preserved."}},"required":["name","url"],"additionalProperties":false},"UptimeCheckPatch":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"example":10000,"description":"Timeout in milliseconds"},"paused":{"type":"boolean","example":false,"description":"Stops check execution when true."},"muted":{"type":"boolean","example":false,"description":"Suppresses alerts without stopping checks."},"url":{"type":"string","format":"uri","example":"https://example.com","description":"URL to check"},"text_to_search_for":{"type":"string","maxLength":4000,"example":"Example Domain","description":"Text to search for in the response"},"headers":{"type":"object","additionalProperties":{"type":"string","example":"Bearer {{API_TOKEN}}"},"example":{"Authorization":"Bearer {{API_TOKEN}}"},"description":"Headers to send. Uptime checks support environment variable references such as {{API_TOKEN}}. Terraform example: Authorization = \"Bearer {{API_TOKEN}}\". Terraform stores the template; create the referenced variable separately."},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"example":"GET","description":"HTTP Method"},"body":{"type":"string","example":"Hello World"},"follow_redirects":{"type":"boolean","example":true},"assertions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]}},"verify_ssl":{"type":"boolean","example":false,"description":"Whether to fail a check if SSL verification fails"},"auth_username":{"type":"string","example":"username","description":"Username to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; an empty string represents an empty user-id."},"auth_password":{"type":"string","example":"password","description":"Password to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; empty strings are preserved."}},"additionalProperties":false},"BrowserCheckResponse":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedBrowserCheck"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},"BrowserCheckInput":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"default":60,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"default":180,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"default":1440,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"default":10000,"example":10000,"description":"Timeout in milliseconds"},"url":{"type":["string","null"],"format":"uri","example":"https://example.com","description":"URL to load for URL-based browser checks. Optional when script is provided."},"text_to_search_for":{"type":"string","maxLength":4000,"example":"Example Domain","description":"Text to search for in the response"},"type":{"type":"string","enum":["BROWSER_CHECK"],"default":"BROWSER_CHECK","example":"BROWSER_CHECK"},"headers":{"type":"object","additionalProperties":{"type":"string","example":"My Value"},"example":{"X-My-Header":"My Value"},"description":"Headers to send with the browser request. Environment variable references are not supported."},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"default":"GET","example":"GET","description":"HTTP Method"},"body":{"type":"string","example":"Hello World"},"follow_redirects":{"type":"boolean","default":true,"example":true},"assertions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]},"example":[{"type":"JSON_BODY","property":"$.data.name","comparison":"EQUALS","expected":"John Doe"},{"type":"HTML_BODY","property":"meta[name=\"description\"]","comparison":"NOT_EMPTY","expected":""}],"description":"Assertions to run on the response"},"verify_ssl":{"type":"boolean","default":true,"example":true,"description":"Whether to fail a check if SSL verification fails"},"auth_username":{"type":"string","example":"username","description":"Username to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; an empty string represents an empty user-id."},"auth_password":{"type":"string","example":"password","description":"Password to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; empty strings are preserved."},"version":{"type":"string","enum":["NODE24_PLAYWRIGHT"],"example":"NODE24_PLAYWRIGHT","description":"Runtime version for browser checks."},"script":{"type":"string","example":"import { test, expect } from '@playwright/test';\ntest('check homepage', async ({ page }) => {\n  await page.goto('https://example.com');\n  await expect(page.locator('h1')).toContainText('Example');\n});","description":"Playwright Test script for scripted browser checks. Optional when url is provided."}},"required":["name"],"additionalProperties":false,"description":"Browser check create payload. Provide either url for a URL-based browser check or script for a scripted Playwright check."},"BrowserCheckPatch":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"example":10000,"description":"Timeout in milliseconds"},"paused":{"type":"boolean","example":false,"description":"Stops check execution when true."},"muted":{"type":"boolean","example":false,"description":"Suppresses alerts without stopping checks."},"url":{"type":["string","null"],"format":"uri","example":"https://example.com","description":"URL to check"},"text_to_search_for":{"type":"string","maxLength":4000,"example":"Example Domain","description":"Text to search for in the response"},"headers":{"type":"object","additionalProperties":{"type":"string","example":"My Value"},"example":{"X-My-Header":"My Value"},"description":"Headers to send with the browser request. Environment variable references are not supported."},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"example":"GET","description":"HTTP Method"},"body":{"type":"string","example":"Hello World"},"follow_redirects":{"type":"boolean","example":true},"assertions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]}},"verify_ssl":{"type":"boolean","example":false,"description":"Whether to fail a check if SSL verification fails"},"auth_username":{"type":"string","example":"username","description":"Username to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; an empty string represents an empty user-id."},"auth_password":{"type":"string","example":"password","description":"Password to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; empty strings are preserved."},"version":{"type":"string","enum":["NODE24_PLAYWRIGHT"],"example":"NODE24_PLAYWRIGHT","description":"Runtime version for browser checks."},"script":{"type":"string","example":"import { test, expect } from '@playwright/test';\ntest('check homepage', async ({ page }) => {\n  await page.goto('https://example.com');\n  await expect(page.locator('h1')).toContainText('Example');\n});","description":"Playwright Test script to run. Must import from @playwright/test and contain at least one test() block."}},"additionalProperties":false},"PublicCheckIncidentListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"result":{"type":"array","items":{"$ref":"#/components/schemas/PublicCheckIncident"}},"result_info":{"$ref":"#/components/schemas/PublicCheckIncidentResultInfo"},"errors":{"type":"array","prefixItems":[]},"messages":{"type":"array","prefixItems":[]}},"required":["success","result","result_info","errors","messages"],"additionalProperties":false},"PublicCheckIncident":{"type":"object","properties":{"id":{"type":"string"},"check_id":{"type":"string"},"started_at":{"type":"string","format":"date-time"},"ended_at":{"type":["string","null"],"format":"date-time"}},"required":["id","check_id","started_at","ended_at"],"additionalProperties":false},"PublicCheckIncidentResultInfo":{"type":"object","properties":{"page":{"type":"integer","exclusiveMinimum":0},"per_page":{"type":"integer","minimum":1,"maximum":100},"count":{"type":"integer","minimum":0},"total_count":{"type":"integer","minimum":0}},"required":["page","per_page","count","total_count"],"additionalProperties":false},"PublicUptimeCheckResultsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"result":{"type":"object","properties":{"check_id":{"type":"string","minLength":1},"check_type":{"type":"string","enum":["UPTIME"]},"window":{"$ref":"#/components/schemas/PublicCheckResultWindow"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicHttpCheckResult"}},"result_info":{"$ref":"#/components/schemas/PublicCheckResultsResultInfo"}},"required":["check_id","check_type","window","results","result_info"],"additionalProperties":false},"errors":{"type":"array","prefixItems":[]},"messages":{"type":"array","prefixItems":[]}},"required":["success","result","errors","messages"],"additionalProperties":false},"PublicCheckResultWindow":{"type":"object","properties":{"from":{"type":"string","format":"date-time","description":"Inclusive start of the returned result window"},"to":{"type":"string","format":"date-time","description":"Exclusive end of the returned result window"}},"required":["from","to"],"additionalProperties":false},"PublicHttpCheckResult":{"type":"object","properties":{"id":{"type":"string","minLength":1},"checked_at":{"type":"string","format":"date-time"},"checked_from":{"type":["string","null"],"enum":["aws:us-east-1","aws:us-east-2","aws:us-west-1","aws:eu-central-1","aws:eu-west-2","aws:ap-south-1","aws:ap-southeast-2","aws:ap-northeast-1",null],"description":"Region identifier in format aws:{region}"},"passing":{"type":["boolean","null"]},"response_time_ms":{"type":"number","minimum":0},"attempt_number":{"type":["integer","null"],"minimum":0},"is_final_attempt":{"type":["boolean","null"]},"dispatched_at_ms":{"type":["integer","null"],"minimum":0},"response_body":{"type":["string","null"]},"body_availability":{"$ref":"#/components/schemas/PublicCheckResultBodyAvailability"},"response_code":{"type":["integer","null"],"minimum":100,"maximum":599},"result_summary":{"type":["string","null"]},"has_stored_response":{"type":"boolean"}},"required":["id","checked_at","checked_from","passing","response_time_ms","attempt_number","is_final_attempt","dispatched_at_ms","response_body","body_availability","response_code","result_summary","has_stored_response"],"additionalProperties":false},"PublicCheckResultBodyAvailability":{"type":"string","enum":["AVAILABLE","NOT_RECORDED","EXPIRED","TRACE_ONLY"]},"PublicCheckResultsResultInfo":{"type":"object","properties":{"page":{"type":"integer","exclusiveMinimum":0},"per_page":{"type":"integer","minimum":1,"maximum":100},"count":{"type":"integer","minimum":0},"total_count":{"type":"integer","minimum":0}},"required":["page","per_page","count","total_count"],"additionalProperties":false},"PublicBrowserCheckResultsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"result":{"type":"object","properties":{"check_id":{"type":"string","minLength":1},"check_type":{"type":"string","enum":["BROWSER"]},"window":{"$ref":"#/components/schemas/PublicCheckResultWindow"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicHttpCheckResult"}},"result_info":{"$ref":"#/components/schemas/PublicCheckResultsResultInfo"}},"required":["check_id","check_type","window","results","result_info"],"additionalProperties":false},"errors":{"type":"array","prefixItems":[]},"messages":{"type":"array","prefixItems":[]}},"required":["success","result","errors","messages"],"additionalProperties":false},"PublicDnsCheckResultsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"result":{"type":"object","properties":{"check_id":{"type":"string","minLength":1},"check_type":{"type":"string","enum":["DNS"]},"window":{"$ref":"#/components/schemas/PublicCheckResultWindow"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicDnsCheckResult"}},"result_info":{"$ref":"#/components/schemas/PublicCheckResultsResultInfo"}},"required":["check_id","check_type","window","results","result_info"],"additionalProperties":false},"errors":{"type":"array","prefixItems":[]},"messages":{"type":"array","prefixItems":[]}},"required":["success","result","errors","messages"],"additionalProperties":false},"PublicDnsCheckResult":{"type":"object","properties":{"id":{"type":"string","minLength":1},"checked_at":{"type":"string","format":"date-time"},"checked_from":{"type":["string","null"],"enum":["aws:us-east-1","aws:us-east-2","aws:us-west-1","aws:eu-central-1","aws:eu-west-2","aws:ap-south-1","aws:ap-southeast-2","aws:ap-northeast-1",null],"description":"Region identifier in format aws:{region}"},"passing":{"type":["boolean","null"]},"response_time_ms":{"type":"number","minimum":0},"attempt_number":{"type":["integer","null"],"minimum":0},"is_final_attempt":{"type":["boolean","null"]},"dispatched_at_ms":{"type":["integer","null"],"minimum":0},"response_body":{"type":["string","null"]},"body_availability":{"$ref":"#/components/schemas/PublicCheckResultBodyAvailability"},"dns_status":{"type":["string","null"]},"failure_source":{"type":["string","null"],"enum":["TRANSPORT","ASSERTION",null]},"failure_type":{"type":["string","null"]},"resolver":{"type":["string","null"]},"parsed_response":{"type":["string","null"]}},"required":["id","checked_at","checked_from","passing","response_time_ms","attempt_number","is_final_attempt","dispatched_at_ms","response_body","body_availability","dns_status","failure_source","failure_type","resolver","parsed_response"],"additionalProperties":false},"PublicTcpCheckResultsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"result":{"type":"object","properties":{"check_id":{"type":"string","minLength":1},"check_type":{"type":"string","enum":["TCP"]},"window":{"$ref":"#/components/schemas/PublicCheckResultWindow"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicTcpCheckResult"}},"result_info":{"$ref":"#/components/schemas/PublicCheckResultsResultInfo"}},"required":["check_id","check_type","window","results","result_info"],"additionalProperties":false},"errors":{"type":"array","prefixItems":[]},"messages":{"type":"array","prefixItems":[]}},"required":["success","result","errors","messages"],"additionalProperties":false},"PublicTcpCheckResult":{"type":"object","properties":{"id":{"type":"string","minLength":1},"checked_at":{"type":"string","format":"date-time"},"checked_from":{"type":["string","null"],"enum":["aws:us-east-1","aws:us-east-2","aws:us-west-1","aws:eu-central-1","aws:eu-west-2","aws:ap-south-1","aws:ap-southeast-2","aws:ap-northeast-1",null],"description":"Region identifier in format aws:{region}"},"passing":{"type":["boolean","null"]},"response_time_ms":{"type":"number","minimum":0},"attempt_number":{"type":["integer","null"],"minimum":0},"is_final_attempt":{"type":["boolean","null"]},"dispatched_at_ms":{"type":["integer","null"],"minimum":0},"response_body":{"type":["string","null"]},"body_availability":{"$ref":"#/components/schemas/PublicCheckResultBodyAvailability"},"tcp_status":{"type":["string","null"]},"failure_source":{"type":["string","null"],"enum":["TRANSPORT","ASSERTION",null]},"failure_type":{"type":["string","null"]},"dns_time_ms":{"type":["number","null"],"minimum":0},"connect_time_ms":{"type":["number","null"],"minimum":0},"data_time_ms":{"type":["number","null"],"minimum":0}},"required":["id","checked_at","checked_from","passing","response_time_ms","attempt_number","is_final_attempt","dispatched_at_ms","response_body","body_availability","tcp_status","failure_source","failure_type","dns_time_ms","connect_time_ms","data_time_ms"],"additionalProperties":false},"CheckResponse":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedCheck"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},"ExpandedCheck":{"allOf":[{"$ref":"#/components/schemas/Check"},{"type":"object","properties":{"headers":{"type":["object","null"],"additionalProperties":{"type":"string"},"example":{"X-My-Header":"My Value"},"description":"Headers to send with the request"},"text_to_search_for":{"type":["string","null"],"description":"Text to search for in the response"},"reminder_alert_interval_minutes":{"type":["number","null"],"example":1440,"description":"Interval in minutes between reminder alerts (-1 for never); null for legacy checks without a configured interval"},"confirmation_period_seconds":{"type":"number","example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"number","example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"test_interval":{"type":"number","example":60,"description":"Interval in seconds between checks"},"timeout":{"type":["number","null"],"example":10000,"description":"Timeout in milliseconds"},"version":{"type":["string","null"],"enum":["NODE24_PLAYWRIGHT","CLOUDFLARE",null],"example":"NODE24_PLAYWRIGHT","description":"Runtime version for browser checks (null for standard uptime checks)"},"script":{"type":["string","null"],"description":"Playwright Test script loaded by GET for scripted browser checks; null for URL-based checks or when script content was not loaded. Mutation responses do not load script content."},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"example":"HIGH","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"verify_ssl":{"type":"boolean","example":true,"description":"Whether to verify SSL certificates"},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"example":"GET","description":"HTTP method to use"},"body":{"type":["string","null"],"description":"Request body for POST/PUT/PATCH requests"},"follow_redirects":{"type":"boolean","example":true},"assertions":{"type":["array","null"],"items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]},"description":"Assertions to validate the response"},"auth_username":{"type":["string","null"],"description":"Username for HTTP Basic Auth. Null when unset; an empty string represents an empty user-id."},"auth_password":{"type":["string","null"],"description":"Password for HTTP Basic Auth. Null when unset; empty strings are preserved."},"test_regions":{"type":"array","items":{"type":"string"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions the check runs from. Format: aws:{region}"},"user_alerts":{"type":"array","items":{"type":"string"},"description":"User IDs to notify on alerts"},"slack_alerts":{"type":"array","items":{"type":"string"},"description":"Slack integration IDs to notify"},"discord_alerts":{"type":"array","items":{"type":"string"},"description":"Discord integration IDs to notify"},"incident_io_alerts":{"type":"array","items":{"type":"string"},"description":"Incident.io integration IDs to notify"},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"},"description":"Microsoft Teams integration IDs to notify"},"telegram_alerts":{"type":"array","items":{"type":"string"},"description":"Telegram integration IDs to notify"},"pushover_alerts":{"type":"array","items":{"type":"string"},"description":"Pushover integration IDs to notify"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"On-call integration IDs (PagerDuty, Opsgenie, Grafana, Spike)"},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"Webhook IDs to notify"}},"required":["headers","text_to_search_for","reminder_alert_interval_minutes","confirmation_period_seconds","recovery_period_seconds","test_interval","timeout","version","script","alert_priority","verify_ssl","method","body","follow_redirects","assertions","auth_username","auth_password","test_regions","user_alerts","slack_alerts","discord_alerts","incident_io_alerts","microsoft_teams_alerts","telegram_alerts","pushover_alerts","oncall_alerts","webhook_alerts"]}]},"Check":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Uptime Check ID"},"name":{"type":"string","example":"My landing page"},"url":{"type":["string","null"],"format":"uri","example":"https://example.com","description":"URL to check (null for script-based browser checks)"},"check_type":{"type":"string","enum":["UPTIME","BROWSER"],"example":"UPTIME","description":"Indicates whether the check is a regular uptime check or browser check."},"last_queued":{"type":["string","null"],"example":"2021-01-01T00:00:00.000Z","description":"Last time the check was queued"},"status":{"type":"string","enum":["UP","DOWN","PENDING","PAUSED","MUTED","MAINTENANCE","RECOVERING","VERIFYING"],"example":"UP","description":"Current status of the check based on the latest uptime event"}},"required":["id","name","url","check_type","last_queued","status"]},"CheckInput":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"default":60,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"default":180,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"default":1440,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"default":10000,"example":10000,"description":"Timeout in milliseconds"},"url":{"type":["string","null"],"format":"uri","example":"https://example.com","description":"URL to check. Required for URL-based checks, optional for script-based checks."},"text_to_search_for":{"type":"string","maxLength":4000,"example":"Example Domain","description":"Text to search for in the response"},"type":{"type":"string","enum":["UPTIME_CHECK","BROWSER_CHECK"],"default":"UPTIME_CHECK","example":"UPTIME_CHECK"},"headers":{"type":"object","additionalProperties":{"type":"string","example":"Bearer {{API_TOKEN}}"},"example":{"Authorization":"Bearer {{API_TOKEN}}"},"description":"Headers to send. Uptime checks support environment variable references such as {{API_TOKEN}}. Terraform example: Authorization = \"Bearer {{API_TOKEN}}\". Terraform stores the template; create the referenced variable separately."},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"default":"GET","example":"GET","description":"HTTP Method"},"body":{"type":"string","example":"Hello World"},"follow_redirects":{"type":"boolean","default":true,"example":true},"assertions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]},"example":[{"type":"JSON_BODY","property":"$.data.name","comparison":"EQUALS","expected":"John Doe"},{"type":"HTML_BODY","property":"meta[name=\"description\"]","comparison":"NOT_EMPTY","expected":""}],"description":"Assertions to run on the response"},"verify_ssl":{"type":"boolean","default":true,"example":true,"description":"Whether to fail a check if SSL verification fails"},"auth_username":{"type":"string","example":"username","description":"Username to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; an empty string represents an empty user-id."},"auth_password":{"type":"string","example":"password","description":"Password to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; empty strings are preserved."},"version":{"type":"string","enum":["NODE24_PLAYWRIGHT"],"example":"NODE24_PLAYWRIGHT","description":"Runtime version for browser checks."},"script":{"type":"string","example":"import { test, expect } from '@playwright/test';\ntest('check homepage', async ({ page }) => {\n  await page.goto('https://example.com');\n  await expect(page.locator('h1')).toContainText('Example');\n});","description":"Playwright Test script for scripted browser checks. Required for script-based checks, optional for URL-based checks."}},"required":["name"]},"CheckPatch":{"type":"object","properties":{"name":{"type":"string","example":"My monitor"},"test_interval":{"type":"integer","minimum":30,"example":60,"description":"Interval in seconds between checks"},"test_regions":{"type":"array","items":{"type":"string","description":"Region identifier in format aws:{region}"},"example":["aws:us-east-1","aws:eu-central-1"],"description":"Regions to run checks from. Valid regions: aws:us-east-1, aws:us-east-2, aws:us-west-1, aws:eu-central-1, aws:eu-west-2, aws:ap-south-1, aws:ap-southeast-2, aws:ap-northeast-1"},"user_alerts":{"type":"array","items":{"type":"string"}},"slack_alerts":{"type":"array","items":{"type":"string"}},"discord_alerts":{"type":"array","items":{"type":"string"}},"incident_io_alerts":{"type":"array","items":{"type":"string"}},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"}},"telegram_alerts":{"type":"array","items":{"type":"string"}},"pushover_alerts":{"type":"array","items":{"type":"string"}},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this check"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"HIGH","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"confirmation_period_seconds":{"type":"integer","minimum":0,"example":60,"description":"Seconds before confirming [downtime](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#confirmation-period)."},"recovery_period_seconds":{"type":"integer","minimum":0,"example":180,"description":"Seconds before confirming [recovery](https://onlineornot.com/docs/explanation/confirmation-recovery-periods#recovery-period)."},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"example":1440,"description":"Interval in minutes between reminders (-1 for never)"},"timeout":{"type":"integer","minimum":1000,"example":10000,"description":"Timeout in milliseconds"},"paused":{"type":"boolean","example":false,"description":"Stops check execution when true."},"muted":{"type":"boolean","example":false,"description":"Suppresses alerts without stopping checks."},"url":{"type":["string","null"],"format":"uri","example":"https://example.com","description":"URL to check"},"text_to_search_for":{"type":"string","maxLength":4000,"example":"Example Domain","description":"Text to search for in the response"},"type":{"type":"string","enum":["UPTIME_CHECK","BROWSER_CHECK"],"example":"UPTIME_CHECK"},"headers":{"type":"object","additionalProperties":{"type":"string","example":"Bearer {{API_TOKEN}}"},"example":{"Authorization":"Bearer {{API_TOKEN}}"},"description":"Headers to send. Uptime checks support environment variable references such as {{API_TOKEN}}. Terraform example: Authorization = \"Bearer {{API_TOKEN}}\". Terraform stores the template; create the referenced variable separately."},"method":{"type":"string","enum":["GET","HEAD","POST","PUT","PATCH","DELETE"],"example":"GET","description":"HTTP Method"},"body":{"type":"string","example":"Hello World"},"follow_redirects":{"type":"boolean","example":true},"assertions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["JSON_BODY","TEXT_BODY","RESPONSE_HEADERS","HTML_BODY"],"example":"JSON_BODY","description":"Type of assertion"},"property":{"type":"string","example":"$.data.name","description":"Property to assert on (JSONPath for JSON_BODY, header name for RESPONSE_HEADERS, CSS selector for HTML_BODY; unused for TEXT_BODY)"},"comparison":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","NULL","NOT_NULL","EMPTY","NOT_EMPTY","CONTAINS","NOT_CONTAINS","FALSE","TRUE"],"example":"EQUALS","description":"Comparison operator"},"expected":{"type":"string","example":"John Doe","description":"Expected value"}},"required":["type","property","comparison","expected"]}},"verify_ssl":{"type":"boolean","example":false,"description":"Whether to fail a check if SSL verification fails"},"auth_username":{"type":"string","example":"username","description":"Username to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; an empty string represents an empty user-id."},"auth_password":{"type":"string","example":"password","description":"Password to use for URLs behind HTTP Basic Auth. Uptime checks with environment variables can use {{NAME}} references; empty strings are preserved."},"version":{"type":"string","enum":["NODE24_PLAYWRIGHT"],"example":"NODE24_PLAYWRIGHT","description":"Runtime version for browser checks."},"script":{"type":"string","example":"import { test, expect } from '@playwright/test';\ntest('check homepage', async ({ page }) => {\n  await page.goto('https://example.com');\n  await expect(page.locator('h1')).toContainText('Example');\n});","description":"Playwright Test script to run. Must import from @playwright/test and contain at least one test() block."}}},"EnvironmentVariableMetadata":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6g7h8","description":"Stable public environment variable ID."},"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"type":{"type":"string","enum":["config","secret"],"example":"secret","description":"Immutable variable type. Config values are readable and unsuitable for credentials; secret values are write-only."},"has_value":{"type":"boolean","enum":[true],"example":true,"description":"Confirms that a value is stored without revealing write-only secret values."},"created_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Creation timestamp in ISO 8601 format."},"updated_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Last update timestamp in ISO 8601 format."}},"required":["id","name","type","has_value","created_at","updated_at"]},"Heartbeat":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Heartbeat ID"},"name":{"type":"string","example":"Daily backup job"},"status":{"type":"string","enum":["UP","DOWN","PENDING","PAUSED","MAINTENANCE","MUTED"],"example":"UP","description":"Current status of the heartbeat"},"last_seen":{"type":["string","null"],"example":"2021-01-01T00:00:00.000Z","description":"Last time a heartbeat ping was received"},"report_period":{"type":["number","null"],"example":3600,"description":"Expected interval in seconds between heartbeat pings"},"report_period_cron":{"type":["string","null"],"example":"0 0 * * *","description":"Cron expression for expected heartbeat schedule"},"timezone":{"type":["string","null"],"example":"America/New_York","description":"Timezone for cron schedule"},"grace_period":{"type":"number","example":300,"description":"Grace period in seconds before alerting"},"reminder_alert_interval_minutes":{"type":["number","null"],"example":1440,"description":"Interval in minutes between reminder alerts"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"created_at":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the heartbeat was created"},"updated_at":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the heartbeat was last updated"}},"required":["id","name","status","last_seen","report_period","report_period_cron","timezone","grace_period","reminder_alert_interval_minutes","alert_priority","created_at","updated_at"]},"ExpandedHeartbeat":{"allOf":[{"$ref":"#/components/schemas/Heartbeat"},{"type":"object","properties":{"user_alerts":{"type":"array","items":{"type":"string"},"description":"User IDs subscribed to alerts"},"slack_alerts":{"type":"array","items":{"type":"string"},"description":"Slack integration IDs subscribed to alerts"},"discord_alerts":{"type":"array","items":{"type":"string"},"description":"Discord integration IDs subscribed to alerts"},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"Webhook IDs subscribed to alerts"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"On-call integration IDs (PagerDuty, Opsgenie, etc.) subscribed to alerts"},"incident_io_alerts":{"type":"array","items":{"type":"string"},"description":"incident.io integration IDs subscribed to alerts"},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"},"description":"Microsoft Teams integration IDs subscribed to alerts"},"telegram_alerts":{"type":"array","items":{"type":"string"},"description":"Telegram integration IDs subscribed to alerts"},"pushover_alerts":{"type":"array","items":{"type":"string"},"description":"Pushover integration IDs subscribed to alerts"}},"required":["user_alerts","slack_alerts","discord_alerts","webhook_alerts","oncall_alerts","incident_io_alerts","microsoft_teams_alerts","telegram_alerts","pushover_alerts"]}]},"MaintenanceWindow":{"type":"object","properties":{"id":{"type":"string","example":"abc123def456","description":"Maintenance Window ID"},"name":{"type":"string","example":"Weekly Maintenance"},"start_date":{"type":"string","example":"2026-09-13T09:00:00.000Z","description":"Start date and time of the maintenance window, as a timestamp"},"duration_minutes":{"type":"number","example":60,"description":"Duration of the maintenance window in minutes"},"timezone":{"type":"string","example":"America/New_York","description":"Timezone for the maintenance window"},"days_of_week":{"type":"array","items":{"type":"string","enum":["SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"]},"example":["MONDAY","WEDNESDAY","FRIDAY"],"description":"Days of the week when the maintenance window is active"},"status":{"type":"string","enum":["ENABLED","DISABLED"],"example":"ENABLED"}},"required":["id","name","start_date","duration_minutes","timezone","days_of_week","status"]},"FullMaintenanceWindow":{"allOf":[{"$ref":"#/components/schemas/MaintenanceWindow"},{"type":"object","properties":{"checks":{"type":"array","items":{"type":"string"},"example":["abc123","def456"],"description":"IDs of uptime checks associated with this maintenance window"},"heartbeats":{"type":"array","items":{"type":"string"},"example":["ghi789"],"description":"IDs of heartbeats associated with this maintenance window"}},"required":["checks","heartbeats"]}]},"OrgUser":{"type":"object","properties":{"id":{"type":"string","example":"abc123","description":"The unique identifier of the user"},"first_name":{"type":["string","null"],"example":"Jane","description":"The user's first name"},"last_name":{"type":["string","null"],"example":"Doe","description":"The user's last name"},"email":{"type":["string","null"],"example":"jane@example.com","description":"The user's email address"},"image":{"type":["string","null"],"example":"https://example.com/avatar.jpg","description":"URL to the user's avatar image"},"role":{"type":"string","enum":["ADMIN","STANDARD"],"example":"STANDARD","description":"The role of the user in the organisation"}},"required":["id","first_name","last_name","email","image","role"]},"Invitation":{"type":"object","properties":{"id":{"type":"string","example":"inv123","description":"The unique identifier of the invitation"},"email":{"type":"string","example":"newuser@example.com","description":"The email address the invitation was sent to"},"role":{"type":"string","enum":["ADMIN","STANDARD"],"example":"STANDARD","description":"The role of the user in the organisation"},"created_at":{"type":"string","example":"2024-01-15T10:30:00Z","description":"When the invitation was created"}},"required":["id","email","role","created_at"]},"StatusPage":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page ID"},"name":{"type":"string","minLength":1,"maxLength":100,"example":"My Example SaaS"},"subdomain":{"type":"string","pattern":"^\\w(?:[\\w-]{0,61}\\w)?$","example":"status","description":"The subdomain your status page will be hosted at. For example \"status\" would become \"status.yourdomain.com\""},"custom_domain":{"type":["string","null"],"example":"status.yourdomain.com","description":"Stored custom-domain hostname, without a URL scheme."},"status":{"type":"string","enum":["ALL_SYSTEMS_OPERATIONAL","PARTIALLY_DEGRADED_SERVICE","MINOR_SERVICE_OUTAGE","MAJOR_SYSTEM_OUTAGE","SERVICE_UNDER_MAINTENANCE"],"example":"ALL_SYSTEMS_OPERATIONAL","description":"The current overall status of the status page"},"favicon_url":{"type":["string","null"],"example":"https://example.com/favicon.ico","description":"URL to the favicon for the status page"},"logo_url":{"type":["string","null"],"example":"https://example.com/logo.png","description":"URL to the logo for the status page"},"dark_logo_url":{"type":["string","null"],"example":"https://example.com/logo-dark.png","description":"URL to the dark mode logo for the status page"},"description":{"type":["string","null"],"example":"Real-time status updates for My Example SaaS","description":"A description of the status page"},"hide_from_search_engines":{"type":"boolean","example":false,"description":"Whether the status page is hidden from search engines"},"has_password":{"type":"boolean","example":false,"description":"Whether the status page requires a password to view"},"allowed_ips":{"type":["array","null"],"items":{"type":"string"},"example":["192.168.1.1","10.0.0.0/8"],"description":"List of IP addresses or CIDR ranges allowed to access this status page"}},"required":["id","name","subdomain","status","hide_from_search_engines","has_password"]},"StatusPageIdentity":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page ID"},"name":{"type":"string","minLength":1,"maxLength":100,"example":"My Example SaaS"},"subdomain":{"type":"string","pattern":"^\\w(?:[\\w-]{0,61}\\w)?$","example":"status","description":"The subdomain your status page will be hosted at. For example \"status\" would become \"status.yourdomain.com\""},"custom_domain":{"type":["string","null"],"example":"status.yourdomain.com","description":"Stored custom-domain hostname, without a URL scheme."}},"required":["id","name","subdomain"]},"StatusPageComponent":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page Component ID"},"name":{"type":"string","example":"Website","description":"a name for the component"},"status":{"type":"string","enum":["OPERATIONAL","MAJOR_OUTAGE","PARTIAL_OUTAGE","DEGRADED_PERFORMANCE","MAINTENANCE","NO_IMPACT"],"example":"MAJOR_OUTAGE","description":"Status of the component"},"display_uptime":{"type":"boolean","default":true,"example":true,"description":"Show this component's uptime and historical incidents on the status page."},"display_metrics":{"type":"boolean","default":true,"example":true,"description":"Show this component's response time metrics on the status page."},"created_at":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the component was created"},"updated_at":{"type":"string","example":"2021-02-01T00:00:00.000Z","description":"When the component was last updated"},"group_id":{"type":["string","null"],"example":"a1b2c3d4","description":"Status Page Group ID"},"sort_order":{"type":["number","null"],"description":"Zero-based sort order, or null when unordered."},"is_external_component":{"type":"boolean","example":false,"description":"Whether this component is synced from an external status page"}},"required":["id","name","status","display_uptime","display_metrics","created_at","updated_at","group_id"]},"StatusPageIncident":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page Incident ID"},"title":{"type":"string","minLength":1,"maxLength":256,"example":"API is inaccessible","description":"a title for the incident"},"impact":{"type":"string","enum":["MAJOR_OUTAGE","PARTIAL_OUTAGE","DEGRADED_PERFORMANCE","NO_IMPACT","MAINTENANCE"],"example":"MAJOR_OUTAGE","description":"Impact of the incident"},"started":{"type":["string","null"],"example":"2021-01-01T00:00:00.000Z","description":"When the incident started"},"ended":{"type":["string","null"],"example":"2021-02-01T00:00:00.000Z","description":"When the incident was resolved"},"created_at":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the incident was created"},"updated_at":{"type":"string","example":"2021-02-01T00:00:00.000Z","description":"When the incident was last updated"}},"required":["id","title","impact","started","created_at","updated_at"]},"StatusPageScheduledMaintenance":{"allOf":[{"$ref":"#/components/schemas/StatusPageIncident"},{"type":"object","properties":{"start_date":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the scheduled maintenance is expected to start"},"duration_minutes":{"type":"integer","minimum":1,"example":60,"description":"How long (in minutes) the scheduled maintenance should be displayed on your status page before being resolved automatically"},"notifications":{"type":"object","properties":{"an_hour_before":{"type":"boolean","default":false,"example":false,"description":"Notify subscribers one hour before maintenance starts"},"at_start":{"type":"boolean","default":true,"example":true,"description":"Notify subscribers when maintenance starts"},"at_end":{"type":"boolean","default":true,"example":true,"description":"Notify subscribers when maintenance ends"}},"description":"Subscriber notification settings"},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"comp123","description":"Component ID"},"name":{"type":"string","example":"API Server","description":"Component name"}},"required":["id","name"],"description":"Component associated with the scheduled maintenance"},"description":"Components affected by this maintenance"}},"required":["start_date","duration_minutes"]}]},"StatusPageComponentGroup":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page Component Group ID"},"name":{"type":"string","example":"Core Services","description":"Name of the component group"},"description":{"type":["string","null"],"example":"Our core infrastructure services","description":"Description of the component group"},"sort_order":{"type":["number","null"],"example":1,"description":"Sort order of the group"},"created_at":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the component group was created"},"updated_at":{"type":"string","example":"2021-02-01T00:00:00.000Z","description":"When the component group was last updated"}},"required":["id","name","sort_order","created_at","updated_at"]},"Subscriber":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6","description":"Status Page Subscriber ID"},"email_address":{"type":"string","format":"email","example":"user@example.com","description":"Email address of the subscriber"},"confirmed":{"type":"boolean","example":false,"description":"Whether the subscriber has confirmed their email"},"component_subscription_mode":{"type":"string","enum":["ALL_COMPONENTS","SELECTED_COMPONENTS"],"example":"ALL_COMPONENTS","description":"Component alert preference mode for this subscriber"},"component_ids":{"type":"array","items":{"type":"string","example":"a1b2c3d4","description":"Status Page Component ID"},"example":["a1b2c3d4"],"description":"Selected component IDs when component_subscription_mode is SELECTED_COMPONENTS"},"created_at":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the subscriber was created"}},"required":["id","email_address","confirmed","component_subscription_mode","component_ids","created_at"]},"StatusPageIncidentWithLatestUpdate":{"allOf":[{"$ref":"#/components/schemas/StatusPageIncident"},{"type":"object","properties":{"latest_update":{"type":"object","properties":{"id":{"type":"string","example":"upd123","description":"Latest update ID"},"status":{"type":"string","enum":["INVESTIGATING","IDENTIFIED","MONITORING","RESOLVED","UPDATE","SCHEDULED","IN_PROGRESS","VERIFYING","COMPLETED"],"example":"INVESTIGATING","description":"Status of the latest update"},"date_happened":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the latest update occurred"}},"required":["id","status","date_happened"],"description":"Latest update summary"},"scheduled_maintenance":{"type":"object","properties":{"id":{"type":"string","example":"sm123","description":"Scheduled maintenance ID"},"start_date":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When the maintenance starts"},"duration_minutes":{"type":"number","example":60,"description":"Duration in minutes"},"notify_subscribers_at_start":{"type":"boolean","example":true,"description":"Notify subscribers when maintenance starts"},"notify_subscribers_at_end":{"type":"boolean","example":true,"description":"Notify subscribers when maintenance ends"}},"required":["id","start_date","duration_minutes","notify_subscribers_at_start","notify_subscribers_at_end"],"description":"Scheduled maintenance info"}}}]},"StatusPageIncidentDetail":{"allOf":[{"$ref":"#/components/schemas/StatusPageIncidentWithLatestUpdate"},{"type":"object","properties":{"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"comp123","description":"Component ID"},"name":{"type":"string","example":"API Server","description":"Component name"}},"required":["id","name"],"description":"Component associated with the incident"}},"updates":{"type":"array","items":{"$ref":"#/components/schemas/IncidentUpdate"}}}}]},"IncidentUpdate":{"type":"object","properties":{"id":{"type":"string","example":"e5f6g7h8","description":"Incident Update ID"},"incident_id":{"type":"string","example":"a1b2c3d4","description":"Parent incident ID"},"status":{"type":"string","enum":["INVESTIGATING","IDENTIFIED","MONITORING","RESOLVED","UPDATE","SCHEDULED","IN_PROGRESS","VERIFYING","COMPLETED"],"example":"INVESTIGATING","description":"Status of this update"},"description":{"type":"string","example":"We are investigating reports of connectivity issues","description":"Update message"},"date_happened":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When this update occurred"},"created_at":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When this update was created"},"updated_at":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When this update was last modified"},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"comp123","description":"Component ID"},"name":{"type":"string","example":"API Server","description":"Component name"},"old_status":{"type":["string","null"],"example":"OPERATIONAL","description":"Previous component status"},"new_status":{"type":"string","example":"MAJOR_OUTAGE","description":"New component status"}},"required":["id","name","old_status","new_status"]},"description":"Component status changes in this update"}},"required":["id","incident_id","status","description","date_happened","created_at","updated_at"]},"Webhook":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Webhook ID"},"url":{"type":"string","format":"uri","example":"https://api.example.com/webhooks/onlineornot","description":"Webhook endpoint URL"},"description":{"type":["string","null"],"example":"Production webhook for incident notifications","description":"Optional description of the webhook"},"events":{"type":"array","items":{"type":"string","enum":["status_page.incident.started","status_page.incident.updated","status_page.incident.resolved","uptime.down","uptime.up","heartbeat.down","heartbeat.up"],"description":"Webhook event type","example":"status_page.incident.started"},"example":["status_page.incident.started","status_page.incident.resolved"],"description":"Event types this webhook subscribes to"},"created_at":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Webhook creation timestamp"},"updated_at":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Webhook last update timestamp"},"status_pages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"x9y8z7w6","description":"Status page ID"},"name":{"type":"string","example":"My Status Page","description":"Status page name"}},"required":["id","name"]},"description":"Status pages this webhook is associated with"},"checks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"c1d2e3f4","description":"Check ID"},"name":{"type":"string","example":"API Health Check","description":"Check name"}},"required":["id","name"]},"description":"Uptime checks this webhook is associated with"},"heartbeats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"h1i2j3k4","description":"Heartbeat ID"},"name":{"type":"string","example":"Daily Backup Job","description":"Heartbeat name"}},"required":["id","name"]},"description":"Heartbeats this webhook is associated with"}},"required":["id","url","description","events","created_at","updated_at","status_pages","checks","heartbeats"]}},"parameters":{}},"paths":{"/{heartbeat_id}":{"get":{"tags":["Heartbeats"],"description":"Send a heartbeat ping (GET). Use this from scripts or cron jobs to signal completion. Note: This endpoint uses oonchk.com, not api.onlineornot.com.","summary":"Send a heartbeat (GET)","operationId":"pingHeartbeatGet","servers":[{"url":"https://oonchk.com","description":"Heartbeat Ping Server"}],"security":[],"parameters":[{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Heartbeat ID"},"required":true,"description":"Heartbeat ID","name":"heartbeat_id","in":"path"}],"responses":{"200":{"description":"Accepted for asynchronous processing, with an empty body. Does not guarantee the ping was recorded: missing, paused, early pings and processing failures can still return 200. Request body and query are ignored."},"404":{"description":"Invalid heartbeat ID","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"description":"Too many requests for this heartbeat ID. Retry later.","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"text/plain":{"schema":{"type":"string"}}}}}},"post":{"tags":["Heartbeats"],"description":"Send a heartbeat ping (POST). Use this from scripts or cron jobs to signal completion. Note: This endpoint uses oonchk.com, not api.onlineornot.com.","summary":"Send a heartbeat (POST)","operationId":"pingHeartbeat","servers":[{"url":"https://oonchk.com","description":"Heartbeat Ping Server"}],"security":[],"parameters":[{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Heartbeat ID"},"required":true,"description":"Heartbeat ID","name":"heartbeat_id","in":"path"}],"responses":{"200":{"description":"Accepted for asynchronous processing, with an empty body. Does not guarantee the ping was recorded: missing, paused, early pings and processing failures can still return 200. Request body and query are ignored."},"404":{"description":"Invalid heartbeat ID","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"description":"Too many requests for this heartbeat ID. Retry later.","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v1/audit_logs":{"get":{"tags":["Audit Logs"],"summary":"List audit log events","description":"Retrieve a paginated list of audit log events for your organisation\n\nRequires PEOPLE:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listAuditLogs","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a paginated list of audit log events","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"a6uatzrn2k3l"},"type":{"type":"string","example":"AuditLogEvent"},"actor_id":{"type":["string","null"],"example":"user_123"},"actor_type":{"type":"string","enum":["User","ApiToken","System"],"example":"User"},"actor_display_name":{"type":["string","null"],"example":"max@onlineornot.com"},"auditable_id":{"type":["string","null"],"example":"abc123"},"auditable_type":{"type":"string","example":"Check"},"auditable_display_name":{"type":["string","null"],"example":"My Website Check"},"target_id":{"type":["string","null"],"example":"1"},"target_type":{"type":["string","null"],"example":"Organisation"},"target_display_name":{"type":["string","null"]},"audit_action":{"type":"string","example":"check.created"},"action":{"type":"string","example":"created"},"location":{"type":["string","null"],"example":"Sydney, NSW, AU"},"remote_ip":{"type":["string","null"],"example":"91.169.182.144"},"created_at":{"type":"string","example":"2026-02-17T10:58:07.000Z"},"metadata":{"type":["object","null"],"additionalProperties":{}}},"required":["id","type","actor_id","actor_type","actor_display_name","auditable_id","auditable_type","auditable_display_name","target_id","target_type","target_display_name","audit_action","action","location","remote_ip","created_at","metadata"]}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/tokens/verify":{"get":{"tags":["Tokens"],"operationId":"verifyToken","summary":"Verify a token","description":"Check whether an API token or OAuth access token is valid. Send the token in the `Authorization` header as `Bearer <token>`. Session cookies are not accepted, and no organization needs to be selected. Check success in the response body: invalid tokens return HTTP 200 with success: false. A missing Authorization header returns HTTP 401.","security":[{"api_token":[]}],"responses":{"200":{"description":"Verification result. Valid API tokens include result.id; valid OAuth tokens omit it. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"API token ID. Omitted when verifying an OAuth access token."},"status":{"type":"string","example":"active","description":"Status"}},"required":["status"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Authorization header is missing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/tokens/permissions":{"get":{"tags":["Tokens"],"operationId":"getTokenPermissions","summary":"Get token permissions","description":"List the permissions granted to an API token. Send the token in the `Authorization` header as `Bearer <token>`. This endpoint does not support OAuth scopes or session cookies, or require organization selection. Expired and invalid tokens return HTTP 200 with success: false.","security":[{"api_token":[]}],"responses":{"200":{"description":"API-token permissions or a failure envelope. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"object","properties":{"permissions":{"type":"array","items":{"type":"string","example":"uptime_checks (read)","description":"One of the token's permissions"}}},"required":["permissions"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Authorization header is missing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/tokens":{"get":{"tags":["Tokens"],"summary":"List all API tokens","description":"Retrieve a paginated list of all API tokens for the organization\n\nRequires API_TOKENS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listTokens","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":10,"example":10,"description":"Number of tokens per page, default 10. Pagination metadata is nested at result.result_info."},"required":false,"description":"Number of tokens per page, default 10. Pagination metadata is nested at result.result_info.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of API tokens","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"name":{"type":"string","example":"My API Token","description":"Token name"},"expiresAfter":{"type":["string","null"],"example":"2025-12-31T23:59:59.000Z","description":"Token expiration date, or null for a token that never expires."},"createdAt":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"grants":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS","ENVIRONMENT_VARIABLES"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"description":"List of grants (scope and permission pairs) assigned to this token"}},"required":["id","name","expiresAfter","createdAt","grants"]}},"result_info":{"type":"object","properties":{"page":{"type":"number"},"per_page":{"type":"number"},"total_count":{"type":"number"},"total_pages":{"type":"number"}},"required":["page","per_page","total_count","total_pages"]}},"required":["result","result_info"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Tokens"],"summary":"Create an API token","description":"Create a new API token for the organization\n\nRequires API_TOKENS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createToken","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"basic":{"summary":"Create token with read permissions","value":{"name":"My API Token","grants":[{"scope":"UPTIME_CHECKS","permission":"READ"}]}},"advanced":{"summary":"Create token with multiple permissions","value":{"name":"Full Access Token","grants":[{"scope":"UPTIME_CHECKS","permission":"EDIT"},{"scope":"STATUS_PAGES","permission":"EDIT"}]}}},"schema":{"type":"object","properties":{"name":{"type":"string","example":"My API Token","description":"Token name"},"grants":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS","ENVIRONMENT_VARIABLES"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"example":[{"scope":"UPTIME_CHECKS","permission":"READ"}],"description":"List of grants (scope and permission pairs) for the token"},"expiresAt":{"type":["string","null"],"format":"date-time","example":"2025-12-31T23:59:59.000Z","description":"Custom expiration date for the token. If not provided, defaults to 365 days from now. Set to null for no expiration."}},"required":["name","grants"]}}}},"responses":{"201":{"description":"Create a new API token","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"name":{"type":"string","example":"My API Token","description":"Token name"},"expiresAfter":{"type":["string","null"],"example":"2025-12-31T23:59:59.000Z","description":"Token expiration date, or null for a token that never expires."},"createdAt":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"token":{"type":"string","example":"abc123def456ghi789jkl012mno345pqrs678tuv","description":"The actual token string (only shown once on creation)"}},"required":["id","name","expiresAfter","createdAt","token"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/tokens/{token_id}":{"get":{"tags":["Tokens"],"summary":"Retrieve an API token","description":"Look up detailed information about a specific API token\n\nRequires API_TOKENS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getToken","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","example":"a1b2c3d4","description":"The token ID"},"required":true,"description":"The token ID","name":"token_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Retrieve the specified API token","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"name":{"type":"string","example":"My API Token","description":"Token name"},"expiresAfter":{"type":["string","null"],"example":"2025-12-31T23:59:59.000Z","description":"Token expiration date, or null for a token that never expires."},"createdAt":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"grants":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS","ENVIRONMENT_VARIABLES"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"description":"List of grants (scope and permission pairs) assigned to this token"}},"required":["id","name","expiresAfter","createdAt","grants"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Token not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Tokens"],"summary":"Delete an API token","description":"Permanently delete an API token\n\nRequires API_TOKENS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteToken","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","example":"a1b2c3d4","description":"The token ID"},"required":true,"description":"The token ID","name":"token_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Delete the specified API token","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Token not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/dns":{"post":{"tags":["DNS Checks"],"summary":"Create a DNS check","description":"Create a new DNS check to monitor DNS records\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createDnsCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"basic":{"summary":"Basic DNS A record check","value":{"name":"DNS for example.com","dns_domain":"example.com","dns_record_type":"A","test_interval":60}},"resolver":{"summary":"DNS check with custom resolver","value":{"name":"DNS through Google resolver","dns_domain":"example.com","dns_record_type":"A","dns_resolver":"8.8.8.8:53","dns_protocol":"UDP"}}},"schema":{"$ref":"#/components/schemas/DnsCheckInput"}}}},"responses":{"201":{"description":"Create a new OnlineOrNot DNS Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsCheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/dns/{check_id}":{"get":{"tags":["DNS Checks"],"summary":"Retrieve a DNS check","description":"Look up detailed information about a specific DNS check\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getDnsCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Retrieve the specified OnlineOrNot DNS Check. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedDnsCheck"},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"DNS check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["DNS Checks"],"summary":"Modify a DNS check","description":"Modify the configuration of an existing DNS check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"updateDnsCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"updateDnsConfig":{"summary":"Update DNS query config","value":{"dns_domain":"example.org","dns_record_type":"TXT","dns_resolver":"1.1.1.1:53","dns_protocol":"TCP"}}},"schema":{"$ref":"#/components/schemas/DnsCheckPatch"}}}},"responses":{"200":{"description":"Modify an OnlineOrNot DNS Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsCheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"DNS check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["DNS Checks"],"summary":"Delete a DNS check","description":"Permanently delete a DNS check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteDnsCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted OnlineOrNot DNS Check's ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckDeleteResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"DNS check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/tcp":{"post":{"tags":["TCP Checks"],"summary":"Create a TCP check","description":"Create a new TCP check to monitor TCP connectivity\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createTcpCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"basic":{"summary":"Basic TCP connection check","value":{"name":"TCP for example.com:443","tcp_hostname":"example.com","tcp_port":443,"test_interval":60}},"payload":{"summary":"TCP check with payload assertion","value":{"name":"TCP banner check","tcp_hostname":"tcpbin.com","tcp_port":4242,"tcp_data":"PING\r\n","assertions":[{"type":"TCP_RESPONSE_DATA","property":"response_data","comparison":"CONTAINS","expected":"PONG"}]}}},"schema":{"$ref":"#/components/schemas/TcpCheckInput"}}}},"responses":{"201":{"description":"Create a new OnlineOrNot TCP Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TcpCheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/tcp/{check_id}":{"get":{"tags":["TCP Checks"],"summary":"Retrieve a TCP check","description":"Look up detailed information about a specific TCP check\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getTcpCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Retrieve the specified OnlineOrNot TCP Check. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedTcpCheck"},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"TCP check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["TCP Checks"],"summary":"Modify a TCP check","description":"Modify the configuration of an existing TCP check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"updateTcpCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"updateTcpConfig":{"summary":"Update TCP target config","value":{"tcp_hostname":"example.org","tcp_port":8443,"tcp_ip_family":"IPv4"}}},"schema":{"$ref":"#/components/schemas/TcpCheckPatch"}}}},"responses":{"200":{"description":"Modify an OnlineOrNot TCP Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TcpCheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"TCP check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["TCP Checks"],"summary":"Delete a TCP check","description":"Permanently delete a TCP check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteTcpCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted OnlineOrNot TCP Check's ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckDeleteResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"TCP check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/uptime":{"post":{"tags":["Uptime Checks"],"summary":"Create an uptime check","description":"Create a new HTTP uptime check to monitor a URL\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createUptimeCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"basic":{"summary":"Basic uptime check","value":{"name":"My Website Check","url":"https://example.com","test_interval":60}},"variableBackedHeader":{"summary":"Uptime check with a variable-backed header","value":{"name":"Authenticated API Check","url":"https://api.example.com/health","headers":{"Authorization":"Bearer {{API_TOKEN}}"},"test_interval":60}}},"schema":{"$ref":"#/components/schemas/UptimeCheckInput"}}}},"responses":{"201":{"description":"Create a new OnlineOrNot Uptime Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeCheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/uptime/{check_id}":{"get":{"tags":["Uptime Checks"],"summary":"Retrieve an uptime check","description":"Look up detailed information about a specific uptime check\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getUptimeCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Retrieve the specified OnlineOrNot Uptime Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeCheckResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Uptime check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Uptime Checks"],"summary":"Modify an uptime check","description":"Modify the configuration of an existing uptime check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"updateUptimeCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"updateHeaderTemplates":{"summary":"Update check header templates","value":{"headers":{"Authorization":"Bearer {{API_TOKEN}}"}}}},"schema":{"$ref":"#/components/schemas/UptimeCheckPatch"}}}},"responses":{"200":{"description":"Modify an OnlineOrNot Uptime Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeCheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Uptime check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Uptime Checks"],"summary":"Delete an uptime check","description":"Permanently delete an uptime check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteUptimeCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted OnlineOrNot Uptime Check's ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckDeleteResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Uptime check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/browser":{"post":{"tags":["Browser Checks"],"summary":"Create a browser check","description":"Create a new browser check using Playwright\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createBrowserCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"url":{"summary":"URL-based browser check","value":{"name":"Homepage browser check","url":"https://example.com","test_interval":60}}},"schema":{"$ref":"#/components/schemas/BrowserCheckInput"}}}},"responses":{"201":{"description":"Create a new OnlineOrNot Browser Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserCheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/browser/{check_id}":{"get":{"tags":["Browser Checks"],"summary":"Retrieve a browser check","description":"Look up detailed information about a specific browser check\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getBrowserCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Retrieve the specified OnlineOrNot Browser Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserCheckResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Browser check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Browser Checks"],"summary":"Modify a browser check","description":"Modify the configuration of an existing browser check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"updateBrowserCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserCheckPatch"}}}},"responses":{"200":{"description":"Modify an OnlineOrNot Browser Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserCheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Browser check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Browser Checks"],"summary":"Delete a browser check","description":"Permanently delete a browser check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteBrowserCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted OnlineOrNot Browser Check's ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckDeleteResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Browser check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/uptime/{check_id}/incidents":{"get":{"tags":["Uptime Checks"],"description":"List incidents for an uptime check. Optional from/to select overlapping incidents, not only incidents starting within the interval. Results are ordered by started time descending, then ID descending. Bounds accept at most millisecond precision; page/per_page and the computed offset must be safe integers, with per_page <= 100.\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Review recent failures and recoveries for a specific uptime check","operationId":"listUptimeCheckIncidents","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4","description":"Public check ID"},"required":true,"description":"Public check ID","name":"check_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results"},"required":false,"description":"Page number of paginated results","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"maximum":100,"example":20,"description":"Number of records per page, from 1 through 100"},"required":false,"description":"Number of records per page, from 1 through 100","name":"per_page","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T10:00:00Z","description":"Inclusive start of the requested time range"},"required":false,"description":"Inclusive start of the requested time range","name":"from","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T11:00:00Z","description":"Exclusive end of the requested time range. Must be later than from when both are provided."},"required":false,"description":"Exclusive end of the requested time range. Must be later than from when both are provided.","name":"to","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"A page of incidents for the check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCheckIncidentListResponse"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/browser/{check_id}/incidents":{"get":{"tags":["Browser Checks"],"description":"List incidents for a browser check. Optional from/to select overlapping incidents, not only incidents starting within the interval. Results are ordered by started time descending, then ID descending. Bounds accept at most millisecond precision; page/per_page and the computed offset must be safe integers, with per_page <= 100.\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Review recent failures and recoveries for a specific browser check","operationId":"listBrowserCheckIncidents","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4","description":"Public check ID"},"required":true,"description":"Public check ID","name":"check_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results"},"required":false,"description":"Page number of paginated results","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"maximum":100,"example":20,"description":"Number of records per page, from 1 through 100"},"required":false,"description":"Number of records per page, from 1 through 100","name":"per_page","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T10:00:00Z","description":"Inclusive start of the requested time range"},"required":false,"description":"Inclusive start of the requested time range","name":"from","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T11:00:00Z","description":"Exclusive end of the requested time range. Must be later than from when both are provided."},"required":false,"description":"Exclusive end of the requested time range. Must be later than from when both are provided.","name":"to","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"A page of incidents for the check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCheckIncidentListResponse"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/dns/{check_id}/incidents":{"get":{"tags":["DNS Checks"],"description":"List incidents for a DNS check. Optional from/to select overlapping incidents, not only incidents starting within the interval. Results are ordered by started time descending, then ID descending. Bounds accept at most millisecond precision; page/per_page and the computed offset must be safe integers, with per_page <= 100.\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Review recent failures and recoveries for a specific DNS check","operationId":"listDnsCheckIncidents","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4","description":"Public check ID"},"required":true,"description":"Public check ID","name":"check_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results"},"required":false,"description":"Page number of paginated results","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"maximum":100,"example":20,"description":"Number of records per page, from 1 through 100"},"required":false,"description":"Number of records per page, from 1 through 100","name":"per_page","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T10:00:00Z","description":"Inclusive start of the requested time range"},"required":false,"description":"Inclusive start of the requested time range","name":"from","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T11:00:00Z","description":"Exclusive end of the requested time range. Must be later than from when both are provided."},"required":false,"description":"Exclusive end of the requested time range. Must be later than from when both are provided.","name":"to","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"A page of incidents for the check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCheckIncidentListResponse"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/tcp/{check_id}/incidents":{"get":{"tags":["TCP Checks"],"description":"List incidents for a TCP check. Optional from/to select overlapping incidents, not only incidents starting within the interval. Results are ordered by started time descending, then ID descending. Bounds accept at most millisecond precision; page/per_page and the computed offset must be safe integers, with per_page <= 100.\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Review recent failures and recoveries for a specific TCP check","operationId":"listTcpCheckIncidents","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4","description":"Public check ID"},"required":true,"description":"Public check ID","name":"check_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results"},"required":false,"description":"Page number of paginated results","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"maximum":100,"example":20,"description":"Number of records per page, from 1 through 100"},"required":false,"description":"Number of records per page, from 1 through 100","name":"per_page","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T10:00:00Z","description":"Inclusive start of the requested time range"},"required":false,"description":"Inclusive start of the requested time range","name":"from","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T11:00:00Z","description":"Exclusive end of the requested time range. Must be later than from when both are provided."},"required":false,"description":"Exclusive end of the requested time range. Must be later than from when both are provided.","name":"to","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"A page of incidents for the check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCheckIncidentListResponse"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/uptime/{check_id}/results":{"get":{"tags":["Uptime Checks"],"description":"List results for an uptime check. Requires from < to, at most seven days, and at most three fractional timestamp digits. Pagination uses positive safe integers with per_page <= 100 and a safe integer offset.\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Review raw uptime check results over a bounded time range","operationId":"listUptimeCheckResults","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4","description":"Public check ID"},"required":true,"description":"Public check ID","name":"check_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results"},"required":false,"description":"Page number of paginated results","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"maximum":100,"example":20,"description":"Number of records per page, from 1 through 100"},"required":false,"description":"Number of records per page, from 1 through 100","name":"per_page","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T10:00:00Z","description":"Inclusive start of the requested time range"},"required":true,"description":"Inclusive start of the requested time range","name":"from","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T11:00:00Z","description":"Exclusive end of the requested time range"},"required":true,"description":"Exclusive end of the requested time range","name":"to","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"A chronological page of raw check results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicUptimeCheckResultsResponse"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}},"503":{"description":"Required result storage unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}}}},"/v1/checks/browser/{check_id}/results":{"get":{"tags":["Browser Checks"],"description":"List results for a browser check. Requires from < to, at most seven days, and at most three fractional timestamp digits. Pagination uses positive safe integers with per_page <= 100 and a safe integer offset.\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Review raw browser check results over a bounded time range","operationId":"listBrowserCheckResults","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4","description":"Public check ID"},"required":true,"description":"Public check ID","name":"check_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results"},"required":false,"description":"Page number of paginated results","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"maximum":100,"example":20,"description":"Number of records per page, from 1 through 100"},"required":false,"description":"Number of records per page, from 1 through 100","name":"per_page","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T10:00:00Z","description":"Inclusive start of the requested time range"},"required":true,"description":"Inclusive start of the requested time range","name":"from","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T11:00:00Z","description":"Exclusive end of the requested time range"},"required":true,"description":"Exclusive end of the requested time range","name":"to","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"A chronological page of raw check results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBrowserCheckResultsResponse"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}},"503":{"description":"Required result storage unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}}}},"/v1/checks/dns/{check_id}/results":{"get":{"tags":["DNS Checks"],"description":"List results for a DNS check. Requires from < to, at most seven days, and at most three fractional timestamp digits. Pagination uses positive safe integers with per_page <= 100 and a safe integer offset.\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Review raw DNS check results over a bounded time range","operationId":"listDnsCheckResults","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4","description":"Public check ID"},"required":true,"description":"Public check ID","name":"check_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results"},"required":false,"description":"Page number of paginated results","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"maximum":100,"example":20,"description":"Number of records per page, from 1 through 100"},"required":false,"description":"Number of records per page, from 1 through 100","name":"per_page","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T10:00:00Z","description":"Inclusive start of the requested time range"},"required":true,"description":"Inclusive start of the requested time range","name":"from","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T11:00:00Z","description":"Exclusive end of the requested time range"},"required":true,"description":"Exclusive end of the requested time range","name":"to","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"A chronological page of raw check results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDnsCheckResultsResponse"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}},"503":{"description":"Required result storage unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}}}},"/v1/checks/tcp/{check_id}/results":{"get":{"tags":["TCP Checks"],"description":"List results for a TCP check. Requires from < to, at most seven days, and at most three fractional timestamp digits. Pagination uses positive safe integers with per_page <= 100 and a safe integer offset.\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Review raw TCP check results over a bounded time range","operationId":"listTcpCheckResults","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4","description":"Public check ID"},"required":true,"description":"Public check ID","name":"check_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results"},"required":false,"description":"Page number of paginated results","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"maximum":100,"example":20,"description":"Number of records per page, from 1 through 100"},"required":false,"description":"Number of records per page, from 1 through 100","name":"per_page","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T10:00:00Z","description":"Inclusive start of the requested time range"},"required":true,"description":"Inclusive start of the requested time range","name":"from","in":"query"},{"schema":{"type":"string","format":"date-time","example":"2026-08-25T11:00:00Z","description":"Exclusive end of the requested time range"},"required":true,"description":"Exclusive end of the requested time range","name":"to","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"A chronological page of raw check results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTcpCheckResultsResponse"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}},"503":{"description":"Required result storage unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}}}},"/v1/checks":{"get":{"tags":["Checks"],"summary":"List all checks","description":"Retrieve a paginated list of all uptime checks\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listChecks","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"},{"schema":{"type":"string","enum":["DOWN","MUTED","NA","PAUSED","PENDING","RECOVERING","UP","VERIFYING"],"example":"DOWN","description":"Filter by current check status. NA, omitted and unrecognized values leave status unfiltered."},"required":false,"description":"Filter by current check status. NA, omitted and unrecognized values leave status unfiltered.","name":"filter","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of OnlineOrNot Checks. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/CheckListItem"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Checks"],"summary":"Create a check","description":"Create a new uptime check to monitor a URL\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"basic":{"summary":"Basic uptime check","value":{"name":"My Website Check","url":"https://example.com","test_interval":60}},"variableBackedHeader":{"summary":"Uptime check with a variable-backed header","value":{"name":"API Check with Auth","url":"https://api.example.com","headers":{"Authorization":"Bearer {{API_TOKEN}}"},"test_interval":30,"alert_priority":"HIGH"}}},"schema":{"$ref":"#/components/schemas/CheckInput"}}}},"responses":{"201":{"description":"Create a new OnlineOrNot Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/checks/{check_id}":{"get":{"tags":["Checks"],"summary":"Retrieve a check","description":"Look up detailed information about a specific uptime check\n\nRequires UPTIME_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Retrieve the specified OnlineOrNot Check. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"$ref":"#/components/schemas/AnyCheck"},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Checks"],"summary":"Delete a check","description":"Permanently delete an uptime check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted OnlineOrNot Check's ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckDeleteResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Checks"],"summary":"Modify a check","description":"Modify the configuration of an existing uptime check\n\nRequires UPTIME_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"updateCheck","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Uptime Check ID"},"required":true,"description":"Uptime Check ID","name":"check_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"updateHeaders":{"summary":"Update check header templates","value":{"muted":true,"headers":{"Authorization":"Bearer {{API_TOKEN}}"}}}},"schema":{"$ref":"#/components/schemas/CheckPatch"}}}},"responses":{"200":{"description":"Modify an OnlineOrNot Check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Check not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/env":{"get":{"tags":["Environment Variables"],"summary":"List environment variables","description":"List environment variables. Values are omitted for both config and secret variables.\n\nRequires ENVIRONMENT_VARIABLES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listEnvironmentVariables","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","maxLength":64,"description":"Case-insensitive substring search on environment variable names.","example":"TOKEN"},"required":false,"description":"Case-insensitive substring search on environment variable names.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Paginated environment variable metadata.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableMetadata"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Feature disabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Environment Variables"],"summary":"Create an environment variable","description":"Create a reusable config or secret for uptime check request headers. Config values are readable; secrets are write-only. A variable's type cannot be changed after creation. Anyone who can edit uptime checks can use variables from the same organization. Exact secret values are automatically redacted from results; encoded or transformed values may remain visible.\n\nRequires ENVIRONMENT_VARIABLES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createEnvironmentVariable","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"config":{"summary":"Create a readable config variable","value":{"name":"PRIMARY_REGION","type":"config","value":"us-east-1"}},"secret":{"summary":"Create a write-only secret variable","value":{"name":"API_TOKEN","type":"secret","value":"<secret value>"}}},"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"type":{"type":"string","enum":["config","secret"],"example":"secret","description":"Immutable variable type. Config values are readable and unsuitable for credentials; secret values are write-only."},"value":{"type":"string","example":"<value>","description":"Value of the variable, limited to 8 KiB of UTF-8. Secret values are write-only and never appear in API responses."}},"required":["name","type","value"],"additionalProperties":false}}}},"responses":{"201":{"description":"Environment variable created. Config responses include the value; secret responses contain metadata only.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6g7h8","description":"Stable public environment variable ID."},"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"type":{"type":"string","enum":["secret"]},"has_value":{"type":"boolean","enum":[true],"example":true,"description":"Confirms that a value is stored without revealing write-only secret values."},"created_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Creation timestamp in ISO 8601 format."},"updated_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Last update timestamp in ISO 8601 format."}},"required":["id","name","type","has_value","created_at","updated_at"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6g7h8","description":"Stable public environment variable ID."},"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"type":{"type":"string","enum":["config"]},"has_value":{"type":"boolean","enum":[true],"example":true,"description":"Confirms that a value is stored without revealing write-only secret values."},"created_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Creation timestamp in ISO 8601 format."},"updated_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Last update timestamp in ISO 8601 format."},"value":{"type":"string","example":"us-east-1","description":"Readable config value."}},"required":["id","name","type","has_value","created_at","updated_at","value"],"additionalProperties":false}]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Feature disabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The organization has 1,000 variables (environment_variable_limit_reached) or the name already exists (environment_variable_name_conflict)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/env/{environment_variable_id}":{"get":{"tags":["Environment Variables"],"summary":"Get an environment variable","description":"Get an environment variable. Config responses include the value; secret responses do not.\n\nRequires ENVIRONMENT_VARIABLES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getEnvironmentVariable","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4e5f6g7h8","description":"Environment variable ID."},"required":true,"description":"Environment variable ID.","name":"environment_variable_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Environment variable detail.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6g7h8","description":"Stable public environment variable ID."},"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"type":{"type":"string","enum":["secret"]},"has_value":{"type":"boolean","enum":[true],"example":true,"description":"Confirms that a value is stored without revealing write-only secret values."},"created_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Creation timestamp in ISO 8601 format."},"updated_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Last update timestamp in ISO 8601 format."}},"required":["id","name","type","has_value","created_at","updated_at"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6g7h8","description":"Stable public environment variable ID."},"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"type":{"type":"string","enum":["config"]},"has_value":{"type":"boolean","enum":[true],"example":true,"description":"Confirms that a value is stored without revealing write-only secret values."},"created_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Creation timestamp in ISO 8601 format."},"updated_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Last update timestamp in ISO 8601 format."},"value":{"type":"string","example":"us-east-1","description":"Readable config value."}},"required":["id","name","type","has_value","created_at","updated_at","value"],"additionalProperties":false}]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Environment variable not found or feature disabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Environment Variables"],"summary":"Update an environment variable","description":"Rename a variable, replace its value, or both. Renaming updates saved check header references. Type cannot be changed; secret values are never returned.\n\nRequires ENVIRONMENT_VARIABLES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"updateEnvironmentVariable","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4e5f6g7h8","description":"Environment variable ID."},"required":true,"description":"Environment variable ID.","name":"environment_variable_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"replaceValue":{"summary":"Replace a value","value":{"value":"<replacement value>"}},"rename":{"summary":"Rename without replacing the value","value":{"name":"SERVICE_API_TOKEN"}},"renameAndReplace":{"summary":"Rename and replace atomically","value":{"name":"SERVICE_API_TOKEN","value":"<replacement value>"}}},"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"value":{"type":"string","example":"<value>","description":"Value of the variable, limited to 8 KiB of UTF-8. Secret values are write-only and never appear in API responses."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Environment variable updated. Config responses include the value; secret responses contain metadata only.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6g7h8","description":"Stable public environment variable ID."},"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"type":{"type":"string","enum":["secret"]},"has_value":{"type":"boolean","enum":[true],"example":true,"description":"Confirms that a value is stored without revealing write-only secret values."},"created_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Creation timestamp in ISO 8601 format."},"updated_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Last update timestamp in ISO 8601 format."}},"required":["id","name","type","has_value","created_at","updated_at"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6g7h8","description":"Stable public environment variable ID."},"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]{0,63}$","example":"API_TOKEN","description":"Case-sensitive name matching [A-Z_][A-Z0-9_]{0,63}, unique within the organization."},"type":{"type":"string","enum":["config"]},"has_value":{"type":"boolean","enum":[true],"example":true,"description":"Confirms that a value is stored without revealing write-only secret values."},"created_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Creation timestamp in ISO 8601 format."},"updated_at":{"type":"string","format":"date-time","example":"2026-09-20T12:00:00.000Z","description":"Last update timestamp in ISO 8601 format."},"value":{"type":"string","example":"us-east-1","description":"Readable config value."}},"required":["id","name","type","has_value","created_at","updated_at","value"],"additionalProperties":false}]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Environment variable not found or feature disabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The new name already exists (environment_variable_name_conflict)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Environment Variables"],"summary":"Delete an environment variable","description":"Delete an environment variable that is not referenced by a saved check. References from paused checks also block deletion.\n\nRequires ENVIRONMENT_VARIABLES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteEnvironmentVariable","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":1,"example":"a1b2c3d4e5f6g7h8","description":"Environment variable ID."},"required":true,"description":"Environment variable ID.","name":"environment_variable_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Environment variable deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Environment variable not found or feature disabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The variable is referenced by a saved check (environment_variable_in_use)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/heartbeats":{"get":{"tags":["Heartbeats"],"summary":"List all heartbeats","description":"Retrieve a paginated list of all heartbeat monitors\n\nRequires HEARTBEAT_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listHeartbeats","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of OnlineOrNot Heartbeats. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/Heartbeat"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Heartbeats"],"summary":"Create a heartbeat.","description":"Create a new heartbeat monitor for cron jobs or scheduled tasks\n\nRequires HEARTBEAT_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createHeartbeat","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"simple":{"summary":"Simple interval heartbeat","value":{"name":"Daily backup job","report_period":86400,"grace_period":300}},"cron":{"summary":"Cron-based heartbeat","value":{"name":"Hourly sync task","report_period_cron":"0 * * * *","timezone":"America/New_York","grace_period":600,"alert_priority":"HIGH"}}},"schema":{"type":"object","properties":{"name":{"type":"string","example":"Daily backup job"},"report_period":{"type":"integer","minimum":1,"example":3600,"description":"Expected interval in seconds between heartbeat pings (for simple schedule)"},"report_period_cron":{"type":"string","example":"0 0 * * *","description":"Cron expression for expected heartbeat schedule"},"timezone":{"type":"string","example":"America/New_York","description":"Timezone for cron schedule"},"grace_period":{"type":"integer","minimum":1,"example":300,"description":"Grace period in seconds to wait after missed heartbeat before alerting"},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"default":1440,"example":1440,"description":"Interval in minutes between reminder alerts (-1 for never)"},"user_alerts":{"type":"array","items":{"type":"string"},"description":"User IDs to notify"},"slack_alerts":{"type":"array","items":{"type":"string"},"description":"Slack integration IDs to notify"},"discord_alerts":{"type":"array","items":{"type":"string"},"description":"Discord integration IDs to notify"},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this heartbeat"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"incident_io_alerts":{"type":"array","items":{"type":"string"},"description":"incident.io integration IDs to notify"},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"},"description":"Microsoft Teams integration IDs to notify"},"telegram_alerts":{"type":"array","items":{"type":"string"},"description":"Telegram integration IDs to notify"},"pushover_alerts":{"type":"array","items":{"type":"string"},"description":"Pushover integration IDs to notify"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"default":"LOW","example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."}},"required":["name","grace_period"]}}}},"responses":{"201":{"description":"Create a new OnlineOrNot Heartbeat","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedHeartbeat"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/heartbeats/{heartbeat_id}":{"get":{"tags":["Heartbeats"],"summary":"Retrieve a heartbeat","description":"Look up detailed information about a specific heartbeat monitor\n\nRequires HEARTBEAT_CHECKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getHeartbeat","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Heartbeat ID"},"required":true,"description":"Heartbeat ID","name":"heartbeat_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Retrieve the specified OnlineOrNot Heartbeat","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedHeartbeat"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Heartbeat not found or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Heartbeats"],"summary":"Update a heartbeat.","description":"Modify the configuration of an existing heartbeat monitor\n\nRequires HEARTBEAT_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"updateHeartbeat","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Heartbeat ID"},"required":true,"description":"Heartbeat ID","name":"heartbeat_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"updateSchedule":{"summary":"Update heartbeat schedule","value":{"report_period":7200,"grace_period":600}},"pause":{"summary":"Pause heartbeat monitoring","value":{"paused":true}},"mute":{"summary":"Mute heartbeat alerts","value":{"muted":true}}},"schema":{"type":"object","properties":{"name":{"type":"string","example":"Daily backup job"},"report_period":{"type":["integer","null"],"minimum":1,"example":3600,"description":"Expected interval in seconds between heartbeat pings (for simple schedule)"},"report_period_cron":{"type":["string","null"],"example":"0 0 * * *","description":"Cron expression for expected heartbeat schedule"},"timezone":{"type":["string","null"],"example":"America/New_York","description":"Timezone for cron schedule"},"grace_period":{"type":"integer","minimum":1,"example":300,"description":"Grace period in seconds to wait after missed heartbeat before alerting"},"reminder_alert_interval_minutes":{"type":"integer","minimum":-1,"example":1440,"description":"Interval in minutes between reminder alerts (-1 for never)"},"user_alerts":{"type":"array","items":{"type":"string"},"description":"User IDs to notify"},"slack_alerts":{"type":"array","items":{"type":"string"},"description":"Slack integration IDs to notify"},"discord_alerts":{"type":"array","items":{"type":"string"},"description":"Discord integration IDs to notify"},"webhook_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of webhooks to associate with this heartbeat"},"oncall_alerts":{"type":"array","items":{"type":"string"},"description":"IDs of on-call integrations (Grafana, PagerDuty, Opsgenie, Spike)"},"incident_io_alerts":{"type":"array","items":{"type":"string"},"description":"incident.io integration IDs to notify"},"microsoft_teams_alerts":{"type":"array","items":{"type":"string"},"description":"Microsoft Teams integration IDs to notify"},"telegram_alerts":{"type":"array","items":{"type":"string"},"description":"Telegram integration IDs to notify"},"pushover_alerts":{"type":"array","items":{"type":"string"},"description":"Pushover integration IDs to notify"},"alert_priority":{"type":"string","enum":["LOW","HIGH"],"example":"LOW","description":"[Alert priority](https://onlineornot.com/docs/how-to/alerts/configure-priority)."},"paused":{"type":"boolean","example":false,"description":"Whether the heartbeat is paused"},"muted":{"type":"boolean","example":false,"description":"Suppresses alerts without stopping heartbeat monitoring."}}}}}},"responses":{"200":{"description":"Modify an OnlineOrNot Heartbeat","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/ExpandedHeartbeat"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Heartbeats"],"summary":"Delete a heartbeat","description":"Permanently delete a heartbeat monitor\n\nRequires HEARTBEAT_CHECKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteHeartbeat","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Heartbeat ID"},"required":true,"description":"Heartbeat ID","name":"heartbeat_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted OnlineOrNot Heartbeat's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Heartbeat ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/maintenance-windows":{"get":{"tags":["Maintenance Windows"],"summary":"List all maintenance windows","description":"Retrieve a paginated list of all maintenance windows\n\nRequires MAINTENANCE_WINDOWS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listMaintenanceWindows","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"weekly","description":"Search term to filter maintenance windows by name"},"required":false,"description":"Search term to filter maintenance windows by name","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of maintenance windows. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/MaintenanceWindow"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized - Invalid or missing API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Maintenance Windows"],"description":"Create a new maintenance window with associated checks and heartbeats\n\nRequires MAINTENANCE_WINDOWS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Create a new maintenance window","operationId":"createMaintenanceWindow","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"simple":{"summary":"Weekly maintenance window","value":{"name":"Weekly Server Maintenance","start_date":"2026-09-13T03:00:00.000Z","duration_minutes":60,"timezone":"America/New_York","days_of_week":["SUNDAY"]}},"withAssociations":{"summary":"With checks and heartbeats","value":{"name":"Database Maintenance","start_date":"2026-09-13T02:00:00.000Z","duration_minutes":120,"timezone":"UTC","days_of_week":["SATURDAY","SUNDAY"],"checks":["abc123","def456"],"heartbeats":["ghi789"]}}},"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Weekly Maintenance"},"start_date":{"type":"string","example":"2026-09-13T09:00:00.000Z","description":"Start date and time of the maintenance window, as a timestamp"},"duration_minutes":{"type":"integer","exclusiveMinimum":0,"example":60,"description":"Duration of the maintenance window in minutes"},"timezone":{"type":"string","example":"America/New_York","description":"Timezone for the maintenance window"},"days_of_week":{"type":"array","items":{"type":"string","enum":["SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"]},"minItems":1,"example":["MONDAY","WEDNESDAY","FRIDAY"],"description":"Days of the week when the maintenance window is active"},"checks":{"type":"array","items":{"type":"string"},"default":[],"example":["abc123","def456"],"description":"Uptime check IDs to associate with this maintenance window"},"heartbeats":{"type":"array","items":{"type":"string"},"default":[],"example":["ghi789"],"description":"Heartbeat IDs to associate with this maintenance window"}},"required":["name","start_date","duration_minutes","timezone","days_of_week"]}}}},"responses":{"201":{"description":"Returns the created maintenance window","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/FullMaintenanceWindow"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Bad Request - Invalid input (e.g., invalid check/heartbeat IDs, empty name)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized - Invalid or missing API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/maintenance-windows/{maintenance_window_id}":{"get":{"tags":["Maintenance Windows"],"summary":"Get a maintenance window by ID","description":"Retrieve a maintenance window with associated checks and heartbeats\n\nRequires MAINTENANCE_WINDOWS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getMaintenanceWindow","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"abc123def456","description":"Maintenance Window ID"},"required":true,"description":"Maintenance Window ID","name":"maintenance_window_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a maintenance window with associated check and heartbeat IDs","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/FullMaintenanceWindow"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized - Invalid or missing API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not Found - Maintenance window does not exist or belongs to different organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Maintenance Windows"],"description":"Update a maintenance window. All fields are optional - only provided fields will be updated. Updating checks or heartbeats replaces existing associations.\n\nRequires MAINTENANCE_WINDOWS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Update a maintenance window","operationId":"updateMaintenanceWindow","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"abc123def456","description":"Maintenance Window ID"},"required":true,"description":"Maintenance Window ID","name":"maintenance_window_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"updateName":{"summary":"Update name only","value":{"name":"Updated Maintenance Window"}},"toggleStatus":{"summary":"Disable maintenance window","value":{"status":"DISABLED"}},"updateSchedule":{"summary":"Update schedule","value":{"start_date":"2026-09-13T04:00:00.000Z","duration_minutes":90,"days_of_week":["SATURDAY"]}},"updateAssociations":{"summary":"Replace check/heartbeat associations","value":{"checks":["newcheck123"],"heartbeats":[]}}},"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Weekly Maintenance"},"start_date":{"type":"string","example":"2026-09-13T09:00:00.000Z","description":"Start date and time of the maintenance window, as a timestamp"},"duration_minutes":{"type":"integer","exclusiveMinimum":0,"example":60,"description":"Duration of the maintenance window in minutes"},"timezone":{"type":"string","example":"America/New_York","description":"Timezone for the maintenance window"},"days_of_week":{"type":"array","items":{"type":"string","enum":["SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"]},"minItems":1,"example":["MONDAY","WEDNESDAY","FRIDAY"],"description":"Days of the week when the maintenance window is active"},"status":{"type":"string","enum":["ENABLED","DISABLED"],"example":"ENABLED"},"checks":{"type":"array","items":{"type":"string"},"example":["abc123","def456"],"description":"Uptime check IDs. Replaces existing associations."},"heartbeats":{"type":"array","items":{"type":"string"},"example":["ghi789"],"description":"Heartbeat IDs. Replaces existing associations."}}}}}},"responses":{"200":{"description":"Returns the updated maintenance window","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/FullMaintenanceWindow"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Bad Request - Invalid input (e.g., invalid check/heartbeat IDs, no fields to update)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized - Invalid or missing API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not Found - Maintenance window does not exist or belongs to different organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Maintenance Windows"],"description":"Delete a maintenance window and all its associations with checks and heartbeats\n\nRequires MAINTENANCE_WINDOWS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","summary":"Delete a maintenance window","operationId":"deleteMaintenanceWindow","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"abc123def456","description":"Maintenance Window ID"},"required":true,"description":"Maintenance Window ID","name":"maintenance_window_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted maintenance window ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"abc123def456","description":"ID of the deleted maintenance window"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized - Invalid or missing API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not Found - Maintenance window does not exist or belongs to different organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/users":{"get":{"tags":["People"],"summary":"List all users","description":"Retrieve a paginated list of all users in your organisation\n\nRequires PEOPLE:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listUsers","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of users in the organisation. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/OrgUser"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/users/{user_id}":{"delete":{"tags":["People"],"summary":"Remove a user from the organisation","description":"Remove a team member from your organisation\n\nRequires PEOPLE:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"removeUser","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","example":"abc123def","description":"The unique identifier of the user"},"required":true,"description":"The unique identifier of the user","name":"user_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the ID of the removed user","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"abc123","description":"ID of the removed user"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Bad Request - Invalid user ID or cannot remove yourself","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not Found - User not in organisation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/invitations":{"get":{"tags":["People"],"summary":"List all invitations","description":"Retrieve a paginated list of all pending invitations in your organisation\n\nRequires PEOPLE:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listInvitations","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of pending invitations. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/Invitation"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["People"],"summary":"Create an invitation","description":"Send an invitation email to add a new team member to your organisation\n\nRequires PEOPLE:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createInvitation","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"standardUser":{"summary":"Invite a standard user","value":{"email":"newuser@example.com","role":"STANDARD"}},"adminUser":{"summary":"Invite an admin user","value":{"email":"admin@example.com","role":"ADMIN"}}},"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","example":"newuser@example.com","description":"The email address to send the invitation to"},"role":{"type":"string","enum":["ADMIN","STANDARD"],"default":"STANDARD","example":"STANDARD","description":"The role to assign to the invited user"}},"required":["email"]}}}},"responses":{"201":{"description":"Returns the created invitation","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/Invitation"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Bad Request - Invalid email or user already invited/exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden - Plan limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}":{"get":{"tags":["Status Pages"],"operationId":"getStatusPage","summary":"Retrieve a status page","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Retrieve the specified OnlineOrNot Status Page","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPage"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Status Pages"],"operationId":"updateStatusPage","summary":"Update a status page","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"example":"My Example SaaS"},"subdomain":{"type":"string","pattern":"^\\w(?:[\\w-]{0,61}\\w)?$","example":"status","description":"The subdomain your status page will be hosted at. For example \"status\" would become \"status.onlineornot.com\""},"custom_domain":{"type":"string","format":"uri","example":"https://status.yourdomain.com","description":"The custom domain your status page is hosted at."},"password":{"type":["string","null"],"maxLength":4096,"description":"Password protection. Send null or an empty string to remove it; omit to leave it unchanged."},"description":{"type":"string","example":"Real-time status updates for My Example SaaS"},"hide_from_search_engines":{"type":"boolean","example":false,"description":"Whether to hide the status page from search engines"},"allowed_ips":{"type":"array","items":{"type":"string"},"example":["192.168.1.1","10.0.0.0/8"],"description":"List of IP addresses or CIDR ranges allowed to access this status page"}},"required":["name","subdomain"]}}}},"responses":{"200":{"description":"Update an existing OnlineOrNot Status Page","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"allOf":[{"$ref":"#/components/schemas/StatusPageIdentity"},{"type":"object","properties":{"description":{"type":["string","null"],"example":"Real-time status updates for My Example SaaS","description":"A description of the status page"},"hide_from_search_engines":{"type":"boolean","example":false,"description":"Whether the status page is hidden from search engines"}},"required":["hide_from_search_engines"]}]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Status Pages"],"operationId":"deleteStatusPage","summary":"Delete a status page","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted OnlineOrNot Check's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_subdomain}/summary":{"get":{"tags":["Status Pages"],"operationId":"getStatusPageSummary","summary":"Get a status page's overview.","security":[],"parameters":[{"schema":{"type":"string","minLength":1,"example":"hackernews","description":"The subdomain part of a status page's URL"},"required":true,"description":"The subdomain part of a status page's URL","name":"status_page_subdomain","in":"path"}],"responses":{"200":{"description":"Retrieve the specified OnlineOrNot status page summary","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"status":{"type":"object","properties":{"description":{"type":"string","enum":["Major System Outage","Minor Service Outage","Partially Degraded Service","Service Under Maintenance","All Systems Operational"],"example":"All Systems Operational","description":"The overall system's current status"}},"required":["description"]},"status_page":{"$ref":"#/components/schemas/StatusPageIdentity"},"components":{"type":"array","items":{"$ref":"#/components/schemas/StatusPageComponent"}},"active_incidents":{"type":"array","items":{"$ref":"#/components/schemas/StatusPageIncident"}},"scheduled_maintenance":{"type":"array","items":{"$ref":"#/components/schemas/StatusPageScheduledMaintenance"}}},"required":["status","status_page","components","active_incidents","scheduled_maintenance"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid path","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"404":{"description":"Not found or private status page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages":{"post":{"tags":["Status Pages"],"operationId":"createStatusPage","summary":"Create a status page","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"example":"My Example SaaS"},"subdomain":{"type":"string","pattern":"^\\w(?:[\\w-]{0,61}\\w)?$","example":"status","description":"The subdomain your status page will be hosted at. For example \"status\" would become \"status.onlineornot.com\""},"custom_domain":{"type":"string","format":"uri","example":"https://status.yourdomain.com","description":"The custom domain your status page is hosted at."},"password":{"type":["string","null"],"maxLength":4096,"description":"Password protection. Send null or an empty string to remove it; omit to leave it unchanged."},"description":{"type":"string","example":"Real-time status updates for My Example SaaS"},"hide_from_search_engines":{"type":"boolean","example":false,"description":"Whether to hide the status page from search engines"},"allowed_ips":{"type":"array","items":{"type":"string"},"example":["192.168.1.1","10.0.0.0/8"],"description":"List of IP addresses or CIDR ranges allowed to access this status page"}},"required":["name","subdomain"]}}}},"responses":{"201":{"description":"Create a new OnlineOrNot Status Page","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageIdentity"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"get":{"tags":["Status Pages"],"operationId":"listStatusPages","summary":"List all status pages","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of OnlineOrNot Status Pages. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page ID"},"name":{"type":"string","minLength":1,"maxLength":100,"example":"My Example SaaS"},"subdomain":{"type":"string","pattern":"^\\w(?:[\\w-]{0,61}\\w)?$","example":"status","description":"The subdomain your status page will be hosted at. For example \"status\" would become \"status.yourdomain.com\""},"custom_domain":{"type":["string","null"],"example":"status.yourdomain.com","description":"Stored custom-domain hostname, without a URL scheme."},"status":{"type":"string","enum":["ALL_SYSTEMS_OPERATIONAL","PARTIALLY_DEGRADED_SERVICE","MINOR_SERVICE_OUTAGE","MAJOR_SYSTEM_OUTAGE","SERVICE_UNDER_MAINTENANCE"],"example":"ALL_SYSTEMS_OPERATIONAL","description":"The current overall status of the status page"},"favicon_url":{"type":["string","null"],"example":"https://example.com/favicon.ico","description":"URL to the favicon for the status page"},"logo_url":{"type":["string","null"],"example":"https://example.com/logo.png","description":"URL to the logo for the status page"},"dark_logo_url":{"type":["string","null"],"example":"https://example.com/logo-dark.png","description":"URL to the dark mode logo for the status page"},"description":{"type":["string","null"],"example":"Real-time status updates for My Example SaaS","description":"A description of the status page"},"hide_from_search_engines":{"type":"boolean","example":false,"description":"Whether the status page is hidden from search engines"},"has_password":{"type":"boolean","example":false,"description":"Whether the status page requires a password to view"},"allowed_ips":{"type":["array","null"],"items":{"type":"string"},"example":["192.168.1.1","10.0.0.0/8"],"description":"List of IP addresses or CIDR ranges allowed to access this status page"},"custom_domain_entitled":{"type":"boolean"},"private_status_page_entitled":{"type":"boolean"}},"required":["id","name","subdomain","status","hide_from_search_engines","has_password","custom_domain_entitled","private_status_page_entitled"]}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/components":{"post":{"tags":["Status Page Components"],"operationId":"createStatusPageComponent","summary":"Create a component","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Website","description":"a name for the component"},"status":{"type":"string","enum":["OPERATIONAL","MAJOR_OUTAGE","PARTIAL_OUTAGE","DEGRADED_PERFORMANCE","NO_IMPACT","MAINTENANCE"],"default":"OPERATIONAL","example":"MAJOR_OUTAGE","description":"Status of the component"},"display_uptime":{"type":"boolean","default":true,"example":true,"description":"Show this component's uptime and historical incidents on the status page."},"display_metrics":{"type":"boolean","default":true,"example":true,"description":"Show this component's response time metrics on the status page."}},"required":["name"]}}}},"responses":{"201":{"description":"Returns the newly created status page component","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageComponent"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"get":{"tags":["Status Page Components"],"operationId":"listStatusPageComponents","summary":"List all components","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of components for a status page. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/StatusPageComponent"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/components/{status_page_component_id}":{"get":{"tags":["Status Page Components"],"operationId":"getStatusPageComponent","summary":"Retrieve a component","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Component ID"},"required":true,"description":"Status Page Component ID","name":"status_page_component_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a status page component","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageComponent"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Status Page Components"],"operationId":"updateStatusPageComponent","summary":"Update a component","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Component ID"},"required":true,"description":"Status Page Component ID","name":"status_page_component_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Website","description":"a name for the component"},"status":{"type":"string","enum":["OPERATIONAL","MAJOR_OUTAGE","PARTIAL_OUTAGE","DEGRADED_PERFORMANCE","NO_IMPACT","MAINTENANCE"],"example":"MAJOR_OUTAGE","description":"Status of the component"},"display_uptime":{"type":"boolean","example":true,"description":"Show this component's uptime and historical incidents on the status page."},"display_metrics":{"type":"boolean","example":true,"description":"Show this component's response time metrics on the status page."},"group_id":{"type":["string","null"],"example":"a1b2c3d4","description":"Component group ID to associate this component with. Set to null to remove from group."},"check_ids":{"type":"array","items":{"type":"string"},"example":["abc123","def456"],"description":"Array of uptime check IDs to associate with this component"},"heartbeat_id":{"type":["string","null"],"example":"hb123456","description":"Heartbeat ID to associate with this component. Set to null to remove."},"override_status":{"type":"boolean","example":false,"description":"Override the automatic status from external status page. When true, status can be manually set."}}}}}},"responses":{"200":{"description":"Returns the updated status page component","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageComponent"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Status Page Components"],"operationId":"deleteStatusPageComponent","summary":"Delete a component","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Component ID"},"required":true,"description":"Status Page Component ID","name":"status_page_component_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted component's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page Component ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/components/sort-order":{"put":{"tags":["Status Page Components"],"operationId":"updateStatusPageComponentSortOrder","summary":"Update the sort order of ungrouped components","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"component_ids":{"type":"array","items":{"type":"string"},"example":["a1b2c3d4","e5f6g7h8"],"description":"Ordered list of ungrouped component IDs"}},"required":["component_ids"]}}}},"responses":{"200":{"description":"Sort order updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"message":{"type":"string","example":"Sort order updated successfully","description":"Success message"}},"required":["message"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/groups":{"get":{"tags":["Status Page Component Groups"],"operationId":"listStatusPageComponentGroups","summary":"List all component groups","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of component groups for a status page. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/StatusPageComponentGroup"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Status Page Component Groups"],"operationId":"createStatusPageComponentGroup","summary":"Create a component group","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Core Services","description":"Name of the component group"},"description":{"type":"string","example":"Our core infrastructure services","description":"Description of the component group"}},"required":["name"]}}}},"responses":{"201":{"description":"Returns the newly created component group","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageComponentGroup"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/groups/{group_id}":{"get":{"tags":["Status Page Component Groups"],"operationId":"getStatusPageComponentGroup","summary":"Retrieve a component group","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Component Group ID"},"required":true,"description":"Status Page Component Group ID","name":"group_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a component group","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageComponentGroup"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Status Page Component Groups"],"operationId":"updateStatusPageComponentGroup","summary":"Update a component group","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Component Group ID"},"required":true,"description":"Status Page Component Group ID","name":"group_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Core Services","description":"Name of the component group"},"description":{"type":["string","null"],"example":"Our core infrastructure services","description":"Description of the component group"}}}}}},"responses":{"200":{"description":"Returns the updated component group","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageComponentGroup"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Status Page Component Groups"],"operationId":"deleteStatusPageComponentGroup","summary":"Delete a component group","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Component Group ID"},"required":true,"description":"Status Page Component Group ID","name":"group_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted group's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page Component Group ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/groups/sort-order":{"put":{"tags":["Status Page Component Groups"],"operationId":"updateStatusPageComponentGroupSortOrder","summary":"Update the sort order of component groups","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"group_ids":{"type":"array","items":{"type":"string"},"example":["a1b2c3d4","e5f6g7h8"],"description":"Ordered list of component group IDs"}},"required":["group_ids"]}}}},"responses":{"200":{"description":"Sort order updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"message":{"type":"string","example":"Sort order updated successfully","description":"Success message"}},"required":["message"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/groups/{group_id}/sort-order":{"put":{"tags":["Status Page Component Groups"],"operationId":"updateStatusPageGroupComponentSortOrder","summary":"Update the sort order of components within a group","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Component Group ID"},"required":true,"description":"Status Page Component Group ID","name":"group_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"component_ids":{"type":"array","items":{"type":"string"},"example":["a1b2c3d4","e5f6g7h8"],"description":"Ordered list of component IDs within the group"}},"required":["component_ids"]}}}},"responses":{"200":{"description":"Sort order updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"message":{"type":"string","example":"Sort order updated successfully","description":"Success message"}},"required":["message"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/subscribers":{"get":{"tags":["Status Page Subscribers"],"operationId":"listStatusPageSubscribers","summary":"List all subscribers","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of subscribers for a status page","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/Subscriber"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Unauthorized - status page not in user's organisation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Status Page Subscribers"],"operationId":"createStatusPageSubscriber","summary":"Create a subscriber","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email_address":{"type":"string","format":"email","example":"user@example.com","description":"Email address of the subscriber"},"component_subscription_mode":{"type":"string","enum":["ALL_COMPONENTS","SELECTED_COMPONENTS"],"default":"ALL_COMPONENTS","example":"ALL_COMPONENTS","description":"Component alert preference mode for this subscriber"},"component_ids":{"type":"array","items":{"type":"string","example":"a1b2c3d4","description":"Status Page Component ID"},"default":[],"example":["a1b2c3d4"],"description":"Selected component IDs when component_subscription_mode is SELECTED_COMPONENTS"}},"required":["email_address"]}}}},"responses":{"201":{"description":"Returns the newly created subscriber","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/Subscriber"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid email address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Unauthorized - status page not in user's organisation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"Email already subscribed or has pending invitation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/subscribers/{subscriber_id}":{"delete":{"tags":["Status Page Subscribers"],"operationId":"deleteStatusPageSubscriber","summary":"Delete a subscriber","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4e5f6","description":"Status Page Subscriber ID"},"required":true,"description":"Status Page Subscriber ID","name":"subscriber_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted subscriber's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4e5f6","description":"Status Page Subscriber ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Subscriber not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/incidents":{"get":{"tags":["Status Page Incidents"],"operationId":"listStatusPageIncidents","summary":"List all incidents","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of incidents for a status page. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/StatusPageIncidentWithLatestUpdate"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Status Page Incidents"],"operationId":"createStatusPageIncident","summary":"Create an incident","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":256,"example":"API is inaccessible","description":"a title for the incident"},"description":{"type":"string","example":"We are currently investigating the issue","description":"a description of the incident"},"status":{"type":"string","enum":["INVESTIGATING","IDENTIFIED","MONITORING","RESOLVED","UPDATE"],"example":"INVESTIGATING","description":"The current status of the incident"},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page Component ID"},"status":{"type":"string","enum":["OPERATIONAL","MAJOR_OUTAGE","PARTIAL_OUTAGE","DEGRADED_PERFORMANCE","MAINTENANCE","NO_IMPACT"],"example":"MAJOR_OUTAGE","description":"New status for the component"}},"required":["id","status"]},"description":"Components affected by this incident with their status"},"notify_subscribers":{"type":"boolean","default":true,"example":true,"description":"Whether to notify status page subscribers"}},"required":["title","description","status"]}}}},"responses":{"201":{"description":"Returns the newly created status page incident","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageIncidentDetail"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/incidents/{status_page_incident_id}":{"get":{"tags":["Status Page Incidents"],"operationId":"getStatusPageIncident","summary":"Retrieve an incident","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Incident ID"},"required":true,"description":"Status Page Incident ID","name":"status_page_incident_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a status page incident","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageIncidentDetail"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Status Page Incidents"],"operationId":"updateStatusPageIncident","summary":"Update an incident","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Incident ID"},"required":true,"description":"Status Page Incident ID","name":"status_page_incident_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":256,"example":"API is inaccessible","description":"a title for the incident"},"impact":{"type":"string","enum":["MAJOR_OUTAGE","PARTIAL_OUTAGE","DEGRADED_PERFORMANCE","NO_IMPACT","MAINTENANCE"],"example":"MAJOR_OUTAGE","description":"Impact of the incident"}},"required":["title","impact"]}}}},"responses":{"200":{"description":"Returns the updated status page incident","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageIncidentDetail"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Status Page Incidents"],"operationId":"deleteStatusPageIncident","summary":"Delete an incident","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Incident ID"},"required":true,"description":"Status Page Incident ID","name":"status_page_incident_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted incident's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page Incident ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/incidents/{status_page_incident_id}/updates":{"get":{"tags":["Status Page Incident Updates"],"operationId":"listStatusPageIncidentUpdates","summary":"List all updates for an incident","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Incident ID"},"required":true,"description":"Status Page Incident ID","name":"status_page_incident_id","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of updates for the incident. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/IncidentUpdate"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Status Page Incident Updates"],"operationId":"createStatusPageIncidentUpdate","summary":"Create a new update for an incident","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Incident ID"},"required":true,"description":"Status Page Incident ID","name":"status_page_incident_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["INVESTIGATING","IDENTIFIED","MONITORING","RESOLVED","UPDATE","SCHEDULED","IN_PROGRESS","VERIFYING","COMPLETED"],"example":"INVESTIGATING","description":"Status for this update"},"description":{"type":"string","minLength":1,"example":"We are investigating reports of connectivity issues","description":"Update message"},"notify_subscribers":{"type":"boolean","default":true,"example":true,"description":"Whether to notify status page subscribers"},"components_affected":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Status Page Component ID"},"status":{"type":"string","enum":["OPERATIONAL","MAJOR_OUTAGE","PARTIAL_OUTAGE","DEGRADED_PERFORMANCE","MAINTENANCE","NO_IMPACT"],"example":"MAJOR_OUTAGE","description":"New status for the component"}},"required":["id","status"]},"description":"Components affected by this update with their new status"},"date_happened":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"When this update occurred (defaults to now)"}},"required":["status","description"]}}}},"responses":{"201":{"description":"Returns the newly created incident update","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/IncidentUpdate"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/incidents/{status_page_incident_id}/updates/{incident_update_id}":{"get":{"tags":["Status Page Incident Updates"],"operationId":"getStatusPageIncidentUpdate","summary":"Retrieve a single incident update","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Incident ID"},"required":true,"description":"Status Page Incident ID","name":"status_page_incident_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"e5f6g7h8","description":"Incident Update ID"},"required":true,"description":"Incident Update ID","name":"incident_update_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the incident update","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/IncidentUpdate"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Status Page Incident Updates"],"operationId":"updateStatusPageIncidentUpdate","summary":"Update an existing incident update","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Incident ID"},"required":true,"description":"Status Page Incident ID","name":"status_page_incident_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"e5f6g7h8","description":"Incident Update ID"},"required":true,"description":"Incident Update ID","name":"incident_update_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["INVESTIGATING","IDENTIFIED","MONITORING","RESOLVED","UPDATE","SCHEDULED","IN_PROGRESS","VERIFYING","COMPLETED"],"example":"IDENTIFIED","description":"Updated status"},"description":{"type":"string","minLength":1,"example":"The issue has been identified","description":"Updated message"},"date_happened":{"type":"string","example":"2021-01-01T00:00:00.000Z","description":"Updated timestamp"}}}}}},"responses":{"200":{"description":"Returns the updated incident update","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/IncidentUpdate"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Status Page Incident Updates"],"operationId":"deleteStatusPageIncidentUpdate","summary":"Delete an incident update","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page Incident ID"},"required":true,"description":"Status Page Incident ID","name":"status_page_incident_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"e5f6g7h8","description":"Incident Update ID"},"required":true,"description":"Incident Update ID","name":"incident_update_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted incident update's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"e5f6g7h8","description":"Incident Update ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/scheduled_maintenance":{"post":{"tags":["Status Page Scheduled Maintenance"],"operationId":"createStatusPageScheduledMaintenance","summary":"Schedule maintenance for a status page","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"example":"Database upgrade","description":"Title of the scheduled maintenance"},"description":{"type":"string","minLength":1,"example":"Upgrading to PostgreSQL 16","description":"Description of the scheduled maintenance"},"start_date":{"type":"string","format":"date-time","example":"2024-03-01T02:00:00.000Z","description":"When the scheduled maintenance is expected to start (ISO 8601)"},"duration_minutes":{"type":"integer","minimum":1,"example":60,"description":"How long (in minutes) the maintenance is expected to last"},"components_affected":{"type":"array","items":{"type":"string"},"example":["comp_abc123","comp_def456"],"description":"Component IDs affected by this maintenance"},"notifications":{"type":"object","properties":{"an_hour_before":{"type":"boolean","default":false,"example":false,"description":"Notify subscribers one hour before maintenance starts"},"at_start":{"type":"boolean","default":true,"example":true,"description":"Notify subscribers when maintenance starts"},"at_end":{"type":"boolean","default":true,"example":true,"description":"Notify subscribers when maintenance ends"}},"description":"Notification settings for subscribers"}},"required":["title","description","start_date","duration_minutes"]}}}},"responses":{"201":{"description":"Returns the newly created scheduled maintenance","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageScheduledMaintenance"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Bad Request - validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Resource not found, unavailable, or rejected by the domain operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/status_pages/{status_page_id}/scheduled_maintenance/{scheduled_maintenance_id}":{"get":{"tags":["Status Page Scheduled Maintenance"],"operationId":"getStatusPageScheduledMaintenance","summary":"Retrieve a scheduled maintenance","description":"Requires STATUS_PAGES:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"sm1b2c3d4","description":"Scheduled Maintenance ID"},"required":true,"description":"Scheduled Maintenance ID","name":"scheduled_maintenance_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the scheduled maintenance","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageScheduledMaintenance"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Status Page Scheduled Maintenance"],"operationId":"updateStatusPageScheduledMaintenance","summary":"Update a scheduled maintenance (only before it has started)","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"sm1b2c3d4","description":"Scheduled Maintenance ID"},"required":true,"description":"Scheduled Maintenance ID","name":"scheduled_maintenance_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"example":"Database upgrade v2","description":"Updated title"},"start_date":{"type":"string","format":"date-time","example":"2024-03-02T02:00:00.000Z","description":"Updated start date (ISO 8601)"},"duration_minutes":{"type":"integer","minimum":1,"example":120,"description":"Updated duration in minutes"}}}}}},"responses":{"200":{"description":"Returns the updated scheduled maintenance","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/StatusPageScheduledMaintenance"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Bad Request - cannot update after maintenance has started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Status Page Scheduled Maintenance"],"operationId":"deleteStatusPageScheduledMaintenance","summary":"Delete a scheduled maintenance","description":"Requires STATUS_PAGES:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Status Page ID"},"required":true,"description":"Status Page ID","name":"status_page_id","in":"path"},{"schema":{"type":"string","minLength":8,"example":"sm1b2c3d4","description":"Scheduled Maintenance ID"},"required":true,"description":"Scheduled Maintenance ID","name":"scheduled_maintenance_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted scheduled maintenance's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"sm1b2c3d4","description":"Deleted scheduled maintenance ID"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/webhooks":{"get":{"tags":["Webhooks"],"summary":"List all webhooks","description":"Retrieve a paginated list of all webhooks for your organization\n\nRequires WEBHOOKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"listWebhooks","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"integer","minimum":1,"default":1,"example":1,"description":"Page number of paginated results, starting at 1."},"required":false,"description":"Page number of paginated results, starting at 1.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"default":20,"example":20,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty."},"required":false,"description":"Number of items per page. Defaults to 20. Continue requesting subsequent pages until the accumulated item count reaches result_info.total_count or a page is empty.","name":"per_page","in":"query"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns a list of webhooks. May also return a canonical failure envelope with success: false at HTTP200.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"result_info":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"success":{"type":"boolean","enum":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","result_info","success","errors","messages"]},{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"result":{"type":"null"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"minItems":1},"messages":{"type":"array","items":{},"minItems":0,"maxItems":0}},"required":["success","result","errors","messages"]}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"post":{"tags":["Webhooks"],"summary":"Create a webhook","description":"Create a new webhook to receive event notifications\n\nRequires WEBHOOKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"createWebhook","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"basic":{"summary":"Basic webhook for incidents","value":{"url":"https://api.example.com/webhooks/onlineornot","events":["status_page.incident.started","status_page.incident.resolved"],"status_page_ids":["x9y8z7w6"]}},"withDescription":{"summary":"Webhook with description and status pages","value":{"url":"https://api.example.com/webhooks/onlineornot","description":"Production incident notifications","events":["status_page.incident.started","status_page.incident.updated","status_page.incident.resolved"],"status_page_ids":["x9y8z7w6"]}}},"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","example":"https://api.example.com/webhooks/onlineornot","description":"Webhook endpoint URL"},"description":{"type":"string","example":"Production webhook for incident notifications","description":"Optional description of the webhook"},"events":{"type":"array","items":{"type":"string","enum":["status_page.incident.started","status_page.incident.updated","status_page.incident.resolved","uptime.down","uptime.up","heartbeat.down","heartbeat.up"],"description":"Webhook event type","example":"status_page.incident.started"},"minItems":1,"example":["status_page.incident.started","status_page.incident.resolved"],"description":"Event types this webhook should subscribe to"},"status_page_ids":{"type":"array","items":{"type":"string"},"example":["x9y8z7w6","p5q4r3s2"],"description":"IDs of status pages to associate with this webhook"},"check_ids":{"type":"array","items":{"type":"string"},"example":["c1d2e3f4","g5h6i7j8"],"description":"IDs of uptime checks to associate with this webhook"},"heartbeat_ids":{"type":"array","items":{"type":"string"},"example":["h1i2j3k4","l5m6n7o8"],"description":"IDs of heartbeats to associate with this webhook"}},"required":["url","events"],"description":"At least one nonempty status_page_ids, check_ids, or heartbeat_ids association is required.","not":{"properties":{"status_page_ids":{"maxItems":0},"check_ids":{"maxItems":0},"heartbeat_ids":{"maxItems":0}}}}}}},"responses":{"201":{"description":"Webhook created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/Webhook"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Forbidden - Webhooks require a paid plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}},"/v1/webhooks/{webhook_id}":{"get":{"tags":["Webhooks"],"summary":"Retrieve a webhook","description":"Look up detailed information about a specific webhook\n\nRequires WEBHOOKS:READ; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"getWebhook","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Webhook ID"},"required":true,"description":"Webhook ID","name":"webhook_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the specified webhook","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/Webhook"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Webhook not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"patch":{"tags":["Webhooks"],"summary":"Modify a webhook","description":"Update the configuration of an existing webhook\n\nRequires WEBHOOKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"updateWebhook","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Webhook ID"},"required":true,"description":"Webhook ID","name":"webhook_id","in":"path"}],"security":[{"api_token":[]}],"requestBody":{"required":true,"content":{"application/json":{"examples":{"updateUrl":{"summary":"Update webhook URL","value":{"url":"https://api.example.com/webhooks/new-endpoint"}},"updateEvents":{"summary":"Update webhook events","value":{"events":["status_page.incident.started"]}}},"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","example":"https://api.example.com/webhooks/onlineornot","description":"Webhook endpoint URL"},"description":{"type":"string","example":"Production webhook for incident notifications","description":"Optional description of the webhook"},"events":{"type":"array","items":{"type":"string","enum":["status_page.incident.started","status_page.incident.updated","status_page.incident.resolved","uptime.down","uptime.up","heartbeat.down","heartbeat.up"],"description":"Webhook event type","example":"status_page.incident.started"},"minItems":1,"example":["status_page.incident.started","status_page.incident.resolved"],"description":"Event types this webhook should subscribe to"},"status_page_ids":{"type":"array","items":{"type":"string"},"example":["x9y8z7w6","p5q4r3s2"],"description":"IDs of status pages to associate with this webhook"},"check_ids":{"type":"array","items":{"type":"string"},"example":["c1d2e3f4","g5h6i7j8"],"description":"IDs of uptime checks to associate with this webhook"},"heartbeat_ids":{"type":"array","items":{"type":"string"},"example":["h1i2j3k4","l5m6n7o8"],"description":"IDs of heartbeats to associate with this webhook"}}}}}},"responses":{"200":{"description":"Webhook updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"$ref":"#/components/schemas/Webhook"},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Webhook not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}},"delete":{"tags":["Webhooks"],"summary":"Delete a webhook","description":"Permanently delete a webhook\n\nRequires WEBHOOKS:EDIT; EDIT also grants READ. Session cookies are accepted only when no bearer credential is supplied.","operationId":"deleteWebhook","parameters":[{"name":"X-OnlineOrNot-Organisation","in":"header","required":false,"description":"Public organization ID to select from an OAuth grant. Required for grants authorizing multiple organizations. Omit for single-organization grants and API tokens.","schema":{"type":"string"}},{"schema":{"type":"string","minLength":8,"example":"a1b2c3d4","description":"Webhook ID"},"required":true,"description":"Webhook ID","name":"webhook_id","in":"path"}],"security":[{"api_token":[]}],"responses":{"200":{"description":"Returns the deleted webhook's ID","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"ID of the deleted webhook"}},"required":["id"]},"success":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]},"messages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":["string","null"]}},"required":["code","message"]},"example":[]}},"required":["result","success","errors","messages"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiBadRequest"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"Webhook not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiServerError"}}}}}}}},"webhooks":{}}