{"openapi":"3.1.0","info":{"title":"Sorry (BYOK) API","version":"0.1.0","description":"Sorry (BYOK) lets an AI assistant read your own Sorry data through the Sorry API with a key you supply (Sorry API token). Read-only: 12 tools (list_pages, get_page, list_components, get_component, list_notices, get_notice, list_notice_updates, get_notice_update, list_notice_templates, get_page_branding, get_custom_domain, list_timezones). The BYOK key travels with each request, is used for that...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-sorry.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-sorry/docs"},"termsOfService":"https://connectorbay.com/byok-sorry/terms"},"servers":[{"url":"https://byok-sorry.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-sorry/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_pages":{"post":{"operationId":"list_pages","summary":"List the status pages of the account with name, current state, time zone, locale, support contact and public address. Us","description":"List the status pages of the account with name, current state, time zone, locale, support contact and public address. Use for \"Which Sorry status pages do I have and are they operational\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_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_page":{"post":{"operationId":"get_page","summary":"Get one status page: current state, time zone, locale, support contact, public address and timeline settings. Use for \"S","description":"Get one status page: current state, time zone, locale, support contact, public address and timeline settings. Use for \"Show the settings of Sorry status page 12ab34cd\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"}},"required":["page_id"],"title":"get_pageArguments","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_components":{"post":{"operationId":"list_components","summary":"List the components (the parts of your service shown on the status page) with state, description, order and parent compo","description":"List the components (the parts of your service shown on the status page) with state, description, order and parent component. Use for \"Which components are degraded on my Sorry status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"}},"required":["page_id"],"title":"list_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/get_component":{"post":{"operationId":"get_component","summary":"Get one component of a status page with its current state. Use for \"Is Sorry component 3 operational\".","description":"Get one component of a status page with its current state. Use for \"Is Sorry component 3 operational\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"},"component_id":{"description":"Numeric id of the component (list_components returns it).","minimum":1,"title":"Component Id","type":"integer"}},"required":["page_id","component_id"],"title":"get_componentArguments","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_notices":{"post":{"operationId":"list_notices","summary":"List the notices (incidents and planned maintenance) of a status page with type, state, subject, synopsis, times and pub","description":"List the notices (incidents and planned maintenance) of a status page with type, state, subject, synopsis, times and public link. Use for \"What incidents did my Sorry status page report recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"}},"required":["page_id"],"title":"list_noticesArguments","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_notice":{"post":{"operationId":"get_notice","summary":"Get one notice (incident or planned maintenance) with its state, subject, synopsis, schedule and public link. Use for \"S","description":"Get one notice (incident or planned maintenance) with its state, subject, synopsis, schedule and public link. Use for \"Show Sorry notice 432500\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"},"notice_id":{"description":"Numeric id of the notice (list_notices returns it).","minimum":1,"title":"Notice Id","type":"integer"}},"required":["page_id","notice_id"],"title":"get_noticeArguments","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_notice_updates":{"post":{"operationId":"list_notice_updates","summary":"List the updates posted to one notice, oldest first as published, with text, whether it was sent out to subscribers, and","description":"List the updates posted to one notice, oldest first as published, with text, whether it was sent out to subscribers, and a public link. Use for \"What updates were posted for Sorry notice 432500\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"},"notice_id":{"description":"Numeric id of the notice (list_notices returns it).","minimum":1,"title":"Notice Id","type":"integer"}},"required":["page_id","notice_id"],"title":"list_notice_updatesArguments","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_notice_update":{"post":{"operationId":"get_notice_update","summary":"Get one update of a notice. Use for \"Show update 51028119 of Sorry notice 433244\".","description":"Get one update of a notice. Use for \"Show update 51028119 of Sorry notice 433244\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"},"notice_id":{"description":"Numeric id of the notice (list_notices returns it).","minimum":1,"title":"Notice Id","type":"integer"},"update_id":{"description":"Numeric id of the notice update (list_notice_updates returns it).","minimum":1,"title":"Update Id","type":"integer"}},"required":["page_id","notice_id","update_id"],"title":"get_notice_updateArguments","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_notice_templates":{"post":{"operationId":"list_notice_templates","summary":"List the saved notice templates of a status page with name, subject and starting text. Use for \"Which notice templates d","description":"List the saved notice templates of a status page with name, subject and starting text. Use for \"Which notice templates do I have on my Sorry status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"}},"required":["page_id"],"title":"list_notice_templatesArguments","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_page_branding":{"post":{"operationId":"get_page_branding","summary":"Get the colours used by a status page (state colours, navbar, header and body colours). Use for \"What colours does my So","description":"Get the colours used by a status page (state colours, navbar, header and body colours). Use for \"What colours does my Sorry status page use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"}},"required":["page_id"],"title":"get_page_brandingArguments","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_custom_domain":{"post":{"operationId":"get_custom_domain","summary":"Get the custom domain of a status page and the DNS record (type, from, to) that has to point at Sorry. Use for \"Which DN","description":"Get the custom domain of a status page and the DNS record (type, from, to) that has to point at Sorry. Use for \"Which DNS record does my Sorry status page custom domain need\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_id":{"description":"Id of the status page (list_pages returns it), for example '12ab34cd'.","maxLength":200,"title":"Page Id","type":"string"}},"required":["page_id"],"title":"get_custom_domainArguments","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_timezones":{"post":{"operationId":"list_timezones","summary":"List the time zone names a status page can use, with their UTC offset. Use for \"Which time zones can I set on a Sorry st","description":"List the time zone names a status page can use, with their UTC offset. Use for \"Which time zones can I set on a Sorry status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_timezonesArguments","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}}}}