{"openapi":"3.1.0","info":{"title":"OnlineOrNot (BYOK) API","version":"0.1.0","description":"OnlineOrNot (BYOK) lets an AI assistant read your own OnlineOrNot data through the OnlineOrNot API with a key you supply (OnlineOrNot API token). Read-only: 12 tools (list_checks, get_check, list_check_incidents, list_heartbeats, get_heartbeat, list_maintenance_windows, get_maintenance_window, list_status_pages, get_status_page_summary, list_status_page_components, list_status_page_incidents,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-onlineornot.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-onlineornot/docs"},"termsOfService":"https://connectorbay.com/byok-onlineornot/terms"},"servers":[{"url":"https://byok-onlineornot.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-onlineornot/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_checks":{"post":{"operationId":"list_checks","summary":"List uptime checks with name, URL, type, current status and last run time. Needs a token with UPTIME_CHECKS:READ. Use fo","description":"List uptime checks with name, URL, type, current status and last run time. Needs a token with UPTIME_CHECKS:READ. Use for \"Which of my OnlineOrNot checks are down\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100, default 20).","title":"Per Page"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose name contains this text.","title":"Search"},"status":{"anyOf":[{"enum":["DOWN","MUTED","PAUSED","PENDING","RECOVERING","UP","VERIFYING"],"type":"string"},{"type":"null"}],"default":null,"description":"Only checks with this current status.","title":"Status"}},"title":"list_checksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_check":{"post":{"operationId":"get_check","summary":"Get one uptime check: URL, method, interval in seconds, timeout, regions, alert priority and status. Request headers, bo","description":"Get one uptime check: URL, method, interval in seconds, timeout, regions, alert priority and status. Request headers, body and credentials are not returned. Use for \"Show the settings of OnlineOrNot check a1b2c3d4\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"check_id":{"description":"Id of the check (list_checks returns it).","maxLength":200,"title":"Check Id","type":"string"}},"required":["check_id"],"title":"get_checkArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_check_incidents":{"post":{"operationId":"list_check_incidents","summary":"List recent failures and recoveries of an uptime check (start and end of each outage) within an optional time range. Use","description":"List recent failures and recoveries of an uptime check (start and end of each outage) within an optional time range. Use for \"When did OnlineOrNot check a1b2c3d4 last go down\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"check_id":{"description":"Id of the uptime check.","maxLength":200,"title":"Check Id","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100, default 20).","title":"Per Page"},"start":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Inclusive start of the range as an ISO 8601 time, for example 2026-10-01T00:00:00Z.","title":"Start"},"end":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Exclusive end of the range as an ISO 8601 time.","title":"End"}},"required":["check_id"],"title":"list_check_incidentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_heartbeats":{"post":{"operationId":"list_heartbeats","summary":"List heartbeat (cron job) monitors with status, last time seen, expected period and grace period. Use for \"Are all my On","description":"List heartbeat (cron job) monitors with status, last time seen, expected period and grace period. Use for \"Are all my OnlineOrNot heartbeat jobs reporting in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100, default 20).","title":"Per Page"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose name contains this text.","title":"Search"}},"title":"list_heartbeatsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_heartbeat":{"post":{"operationId":"get_heartbeat","summary":"Get one heartbeat monitor with its schedule, grace period, status and last time seen. Use for \"Show OnlineOrNot heartbea","description":"Get one heartbeat monitor with its schedule, grace period, status and last time seen. Use for \"Show OnlineOrNot heartbeat a1b2c3d4\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"heartbeat_id":{"description":"Id of the heartbeat (list_heartbeats returns it).","maxLength":200,"title":"Heartbeat Id","type":"string"}},"required":["heartbeat_id"],"title":"get_heartbeatArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_maintenance_windows":{"post":{"operationId":"list_maintenance_windows","summary":"List maintenance windows with name, start, duration, time zone, weekdays and enabled state. Use for \"When are my OnlineO","description":"List maintenance windows with name, start, duration, time zone, weekdays and enabled state. Use for \"When are my OnlineOrNot maintenance windows\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100, default 20).","title":"Per Page"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose name contains this text.","title":"Search"}},"title":"list_maintenance_windowsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_maintenance_window":{"post":{"operationId":"get_maintenance_window","summary":"Get one maintenance window including the ids of the checks and heartbeats it covers. Use for \"Which monitors does Online","description":"Get one maintenance window including the ids of the checks and heartbeats it covers. Use for \"Which monitors does OnlineOrNot maintenance window abc123def456 cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"maintenance_window_id":{"description":"Id of the maintenance window.","maxLength":200,"title":"Maintenance Window Id","type":"string"}},"required":["maintenance_window_id"],"title":"get_maintenance_windowArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_status_pages":{"post":{"operationId":"list_status_pages","summary":"List your status pages with name, subdomain, custom domain and overall status. Use for \"Which status pages do I have on ","description":"List your status pages with name, subdomain, custom domain and overall status. Use for \"Which status pages do I have on OnlineOrNot\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100, default 20).","title":"Per Page"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose name contains this text.","title":"Search"}},"title":"list_status_pagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_status_page_summary":{"post":{"operationId":"get_status_page_summary","summary":"Get the public overview of a status page by subdomain: overall status, components with their state, active incidents and","description":"Get the public overview of a status page by subdomain: overall status, components with their state, active incidents and scheduled maintenance. Use for \"What is the current status shown on the 'status' OnlineOrNot status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status_page_subdomain":{"description":"The subdomain part of the status page URL, for example 'status'.","maxLength":200,"title":"Status Page Subdomain","type":"string"}},"required":["status_page_subdomain"],"title":"get_status_page_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_status_page_components":{"post":{"operationId":"list_status_page_components","summary":"List the components of a status page with their current status and group. Use for \"Which components are on my OnlineOrNo","description":"List the components of a status page with their current status and group. Use for \"Which components are on my OnlineOrNot status page and what state are they in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status_page_id":{"description":"Id of the status page (list_status_pages returns it).","maxLength":200,"title":"Status Page Id","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100, default 20).","title":"Per Page"}},"required":["status_page_id"],"title":"list_status_page_componentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_status_page_incidents":{"post":{"operationId":"list_status_page_incidents","summary":"List the incidents of a status page with title, impact, start and end and the latest update. Use for \"What incidents wer","description":"List the incidents of a status page with title, impact, start and end and the latest update. Use for \"What incidents were posted on my OnlineOrNot status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status_page_id":{"description":"Id of the status page (list_status_pages returns it).","maxLength":200,"title":"Status Page Id","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100, default 20).","title":"Per Page"}},"required":["status_page_id"],"title":"list_status_page_incidentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_status_page_incident":{"post":{"operationId":"get_status_page_incident","summary":"Get one status page incident with affected components and its full update timeline. Use for \"Show the update timeline of","description":"Get one status page incident with affected components and its full update timeline. Use for \"Show the update timeline of incident a1b2c3d4 on my OnlineOrNot status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status_page_id":{"description":"Id of the status page (list_status_pages returns it).","maxLength":200,"title":"Status Page Id","type":"string"},"status_page_incident_id":{"description":"Id of the incident.","maxLength":200,"title":"Status Page Incident Id","type":"string"}},"required":["status_page_id","status_page_incident_id"],"title":"get_status_page_incidentArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}