{"openapi":"3.1.0","info":{"title":"OpenStatus (BYOK) API","version":"0.1.0","description":"OpenStatus (BYOK) lets an AI assistant read your own OpenStatus data through the OpenStatus API with a key you supply (OpenStatus API key). Read-only: 12 tools (list_http_monitors, list_tcp_monitors, get_monitor_status, get_monitor_summary, list_response_logs, list_status_pages, get_status_page_content, get_overall_status, list_status_reports, get_status_report, list_incidents,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-openstatus.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-openstatus/docs"},"termsOfService":"https://connectorbay.com/byok-openstatus/terms"},"servers":[{"url":"https://byok-openstatus.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-openstatus/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_http_monitors":{"post":{"operationId":"list_http_monitors","summary":"List the HTTP uptime monitors with name, check interval, timeout, regions, public flag and current status. Request heade","description":"List the HTTP uptime monitors with name, check interval, timeout, regions, public flag and current status. Request headers, body and credentials of the monitor are not returned. Use for \"Which of my OpenStatus HTTP monitors are failing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"title":"list_http_monitorsArguments","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_tcp_monitors":{"post":{"operationId":"list_tcp_monitors","summary":"List the TCP port monitors with address, check interval, timeout, regions and current status. Use for \"Which TCP monitor","description":"List the TCP port monitors with address, check interval, timeout, regions and current status. Use for \"Which TCP monitors do I have in OpenStatus\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"title":"list_tcp_monitorsArguments","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_monitor_status":{"post":{"operationId":"get_monitor_status","summary":"Get the current status of one monitor in each region it runs from. Use for \"Is OpenStatus monitor mon_123 healthy in eve","description":"Get the current status of one monitor in each region it runs from. Use for \"Is OpenStatus monitor mon_123 healthy in every region\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Id of the monitor (list_http_monitors returns it).","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_monitor_statusArguments","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_monitor_summary":{"post":{"operationId":"get_monitor_summary","summary":"Get aggregated metrics of one monitor over 1, 7 or 14 days: latency percentiles p50 to p99, counts of successful, degrad","description":"Get aggregated metrics of one monitor over 1, 7 or 14 days: latency percentiles p50 to p99, counts of successful, degraded and failed checks, and the last check time. Use for \"What was the p95 latency of OpenStatus monitor mon_123 last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Id of the monitor (list_http_monitors returns it).","maxLength":200,"title":"Id","type":"string"},"time_range":{"anyOf":[{"enum":["TIME_RANGE_1D","TIME_RANGE_7D","TIME_RANGE_14D"],"type":"string"},{"type":"null"}],"default":"TIME_RANGE_7D","description":"Window to aggregate: 1 day, 7 days or 14 days.","title":"Time Range"}},"required":["id"],"title":"get_monitor_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_response_logs":{"post":{"operationId":"list_response_logs","summary":"List recent check results of an HTTP monitor from the last 14 days: latency, status code, region, outcome and time. Use ","description":"List recent check results of an HTTP monitor from the last 14 days: latency, status code, region, outcome and time. Use for \"Show the latest checks of OpenStatus monitor mon_123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Id of the monitor (list_http_monitors returns it).","maxLength":200,"title":"Id","type":"string"},"from_timestamp":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Start of the window in Unix milliseconds (within the last 14 days).","title":"From Timestamp"},"to_timestamp":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"End of the window in Unix milliseconds.","title":"To Timestamp"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many logs to return (1 to 100, default 25).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"required":["id"],"title":"list_response_logsArguments","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 title, slug, custom domain and whether each is published. Use for \"Which status pages do I r","description":"List your status pages with title, slug, custom domain and whether each is published. Use for \"Which status pages do I run on OpenStatus\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"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_content":{"post":{"operationId":"get_status_page_content","summary":"Get a status page with its settings (not the access password), components, component groups, active status reports and s","description":"Get a status page with its settings (not the access password), components, component groups, active status reports and scheduled maintenance. Give the page id or slug. Use for \"What does my OpenStatus status page 'acme' show right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Id of the status page (list_status_pages returns it). Give this or the slug.","title":"Id"},"slug":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Slug of the status page, for example 'acme'. Give this or the id.","title":"Slug"}},"title":"get_status_page_contentArguments","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_overall_status":{"post":{"operationId":"get_overall_status","summary":"Get the overall state of a status page (operational, degraded, partial outage, major outage or maintenance) and the stat","description":"Get the overall state of a status page (operational, degraded, partial outage, major outage or maintenance) and the state of each component. Give the page id or slug. Use for \"Is my OpenStatus status page 'acme' fully operational\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Id of the status page (list_status_pages returns it). Give this or the slug.","title":"Id"},"slug":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Slug of the status page, for example 'acme'. Give this or the id.","title":"Slug"}},"title":"get_overall_statusArguments","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_reports":{"post":{"operationId":"list_status_reports","summary":"List status reports (incident posts shown on status pages) with title, current stage, affected components and times. Use","description":"List status reports (incident posts shown on status pages) with title, current stage, affected components and times. Use get_status_page_content for their update timeline. Use for \"Which status reports has OpenStatus recorded recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"title":"list_status_reportsArguments","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_report":{"post":{"operationId":"get_status_report","summary":"Get one status report with its full update timeline (stage, message and time of every update). Use for \"Show the timelin","description":"Get one status report with its full update timeline (stage, message and time of every update). Use for \"Show the timeline of OpenStatus status report rep_1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Id of the status report (list_status_reports returns it).","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_status_reportArguments","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_incidents":{"post":{"operationId":"list_incidents","summary":"List declared incidents, newest first, with title, severity, status and declared, started, resolved and closed times. Na","description":"List declared incidents, newest first, with title, severity, status and declared, started, resolved and closed times. Names of people involved are not returned. Use for \"Which incidents did we declare in OpenStatus\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"},"closed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for closed incidents only, false for open ones only; leave out for both.","title":"Closed"}},"title":"list_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_maintenances":{"post":{"operationId":"list_maintenances","summary":"List scheduled maintenance windows with title, message, start and end and the status page components they cover. Use for","description":"List scheduled maintenance windows with title, message, start and end and the status page components they cover. Use for \"When is the next OpenStatus maintenance window\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"},"page_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only maintenance of this status page id.","title":"Page Id"}},"title":"list_maintenancesArguments","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}}}}