{"openapi":"3.1.0","info":{"title":"Zenduty (BYOK) API","version":"0.1.0","description":"Zenduty (BYOK) lets an AI assistant read your own Zenduty data through the Zenduty API with a key you supply (Zenduty API key). Read-only: 12 tools (list_account_members, list_teams, list_services, get_service, list_escalation_policies, list_schedules, list_priorities, list_maintenance_windows, list_incidents, get_incident, list_incident_notes, list_incident_alerts). The BYOK key travels with...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-zenduty.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-zenduty/docs"},"termsOfService":"https://connectorbay.com/byok-zenduty/terms"},"servers":[{"url":"https://byok-zenduty.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-zenduty/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_account_members":{"post":{"operationId":"list_account_members","summary":"List the members of the Zenduty account with role (1 owner, 2 admin, 3 user), time zone, verification flag and join date","description":"List the members of the Zenduty account with role (1 owner, 2 admin, 3 user), time zone, verification flag and join date. Email addresses are not returned. Use for \"Who are the admins in our Zenduty account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_account_membersArguments","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_teams":{"post":{"operationId":"list_teams","summary":"List the teams of the account with name, owner and creation date. Use for \"Which teams do we have in Zenduty\".","description":"List the teams of the account with name, owner and creation date. Use for \"Which teams do we have in Zenduty\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_teamsArguments","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_services":{"post":{"operationId":"list_services","summary":"List the services of one team (the things alerts are routed to) with status, escalation policy and maintenance flag. Use","description":"List the services of one team (the things alerts are routed to) with status, escalation policy and maintenance flag. Use for \"Which services does the Backend team have in Zenduty\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Team unique id, taken from list_teams.","maxLength":200,"title":"Team Id","type":"string"}},"required":["team_id"],"title":"list_servicesArguments","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_service":{"post":{"operationId":"get_service","summary":"Get one service of a team with timeouts, escalation policy and maintenance flag. Use for \"Show the Production Service of","description":"Get one service of a team with timeouts, escalation policy and maintenance flag. Use for \"Show the Production Service of my team in Zenduty\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Team unique id, taken from list_teams.","maxLength":200,"title":"Team Id","type":"string"},"service_id":{"description":"Service unique id, taken from list_services.","maxLength":200,"title":"Service Id","type":"string"}},"required":["team_id","service_id"],"title":"get_serviceArguments","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_escalation_policies":{"post":{"operationId":"list_escalation_policies","summary":"List the escalation policies of one team with name, repeat count and whether the policy is global. Use for \"How are esca","description":"List the escalation policies of one team with name, repeat count and whether the policy is global. Use for \"How are escalations set up for the Backend team in Zenduty\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Team unique id, taken from list_teams.","maxLength":200,"title":"Team Id","type":"string"}},"required":["team_id"],"title":"list_escalation_policiesArguments","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_schedules":{"post":{"operationId":"list_schedules","summary":"List the on-call schedules of one team with name, summary and time zone. Use for \"Which on-call schedules does the Backe","description":"List the on-call schedules of one team with name, summary and time zone. Use for \"Which on-call schedules does the Backend team have in Zenduty\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Team unique id, taken from list_teams.","maxLength":200,"title":"Team Id","type":"string"}},"required":["team_id"],"title":"list_schedulesArguments","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_priorities":{"post":{"operationId":"list_priorities","summary":"List the incident priorities defined for one team with name, description and colour. Use for \"Which incident priorities ","description":"List the incident priorities defined for one team with name, description and colour. Use for \"Which incident priorities are defined for the Backend team\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Team unique id, taken from list_teams.","maxLength":200,"title":"Team Id","type":"string"}},"required":["team_id"],"title":"list_prioritiesArguments","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 the maintenance windows of one team with start, end, repeat interval and time zone. Use for \"Are any maintenance wi","description":"List the maintenance windows of one team with start, end, repeat interval and time zone. Use for \"Are any maintenance windows planned for the Backend team in Zenduty\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Team unique id, taken from list_teams.","maxLength":200,"title":"Team Id","type":"string"}},"required":["team_id"],"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/list_incidents":{"post":{"operationId":"list_incidents","summary":"List incidents matching a filter (status, creation date range, all teams or only the caller's teams), newest first, with","description":"List incidents matching a filter (status, creation date range, all teams or only the caller's teams), newest first, with title, status, SLA and assignee name. Uses a POST that only reads; follow next for more pages. Use for \"Which Zenduty incidents are still open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":[-1,0,1,2,3],"type":"integer"},{"type":"null"}],"default":-1,"description":"Which incidents: -1 open (triggered and acknowledged), 0 all, 1 triggered, 2 acknowledged, 3 resolved.","title":"Status"},"all_teams":{"anyOf":[{"enum":[0,1],"type":"integer"},{"type":"null"}],"default":1,"description":"1 to search all teams, 0 for only the teams of the key owner.","title":"All Teams"},"from_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only incidents created on or after this date (YYYY-MM-DD).","title":"From Date"},"to_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only incidents created on or before this date (YYYY-MM-DD).","title":"To Date"}},"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/get_incident":{"post":{"operationId":"get_incident","summary":"Get one incident by number with title, summary, status, urgency, assignee name and acknowledge and resolve times. Use fo","description":"Get one incident by number with title, summary, status, urgency, assignee name and acknowledge and resolve times. Use for \"Show Zenduty incident 255\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"incident_number":{"description":"Incident number (the integer shown in the Zenduty UI).","title":"Incident Number","type":"integer"}},"required":["incident_number"],"title":"get_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}},"/v1/tools/list_incident_notes":{"post":{"operationId":"list_incident_notes","summary":"List the notes written on one incident with author name and time. Use for \"What notes were left on Zenduty incident 255\"","description":"List the notes written on one incident with author name and time. Use for \"What notes were left on Zenduty incident 255\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"incident_number":{"description":"Incident number (the integer shown in the Zenduty UI).","title":"Incident Number","type":"integer"}},"required":["incident_number"],"title":"list_incident_notesArguments","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_incident_alerts":{"post":{"operationId":"list_incident_alerts","summary":"List the alerts grouped into one incident with summary, message, time and suppressed flag. Use for \"Which alerts are beh","description":"List the alerts grouped into one incident with summary, message, time and suppressed flag. Use for \"Which alerts are behind Zenduty incident 255\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"incident_number":{"description":"Incident number (the integer shown in the Zenduty UI).","title":"Incident Number","type":"integer"}},"required":["incident_number"],"title":"list_incident_alertsArguments","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}}}}