openapi: 3.0.0 info: version: 1.1.0 title: Zenduty Account Custom Role Analytics API termsOfService: https://zenduty.com contact: email: vishwa@zenduty.com license: name: Apache 2.0 x-logo: url: data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii05OC4zIDE3My43IDIwNi4zIDUzLjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgLTk4LjMgMTczLjcgMjA2LjMgNTMuMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzBGMTcyQTt9DQoJLnN0MXtmaWxsOiNGRDlBMDA7fQ0KPC9zdHlsZT4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMjksMjEwLjJoNi4zYzIuNywwLDQuOSwyLjIsNC45LDQuOWgtMTguMWMwLTUuMyw0LjEtOS40LDcuOS0xMy4xbDMuOC0zLjdoLTcuMWMtMi41LDAtNC42LTIuMS00LjYtNC42aDE4DQoJYzAsNS4zLTQuMSw5LjQtNy44LDEzLjJMLTI5LDIxMC4yeiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTMuNywyMDUuOGgtMTUuNWMwLjEsMS41LDAuNiwyLjcsMS42LDMuNmMwLjksMC45LDIuMSwxLjIsMy41LDEuMmMyLDAsMy40LTAuOSw0LjMtMi41aDUuOA0KCWMtMC42LDItMS44LDMuNi0zLjUsNC45Yy0xLjgsMS4yLTMuOSwyLTYuNCwyYy0yLDAtMy45LTAuNS01LjUtMS40Yy0xLjYtMC45LTIuOS0yLjEtMy44LTMuN2MtMC45LTEuNi0xLjQtMy40LTEuNC01LjcNCgljMC0yLjEsMC41LTQuMSwxLjQtNS43YzAuOS0xLjYsMi4xLTIuOCwzLjgtMy43YzEuNi0wLjksMy40LTEuNCw1LjUtMS40YzIsMCwzLjgsMC40LDUuNCwxLjJjMS42LDAuOSwyLjgsMi4xLDMuNywzLjYNCgljMC45LDEuNiwxLjMsMy4zLDEuMyw1LjRDMy44LDIwNC42LDMuOCwyMDUuMiwzLjcsMjA1Ljh6IE0tMS43LDIwMi4yYzAtMS40LTAuNS0yLjUtMS41LTMuMmMtMS0wLjktMi4xLTEuMi0zLjUtMS4yDQoJYy0xLjQsMC0yLjQsMC40LTMuNCwxLjJjLTAuOSwwLjctMS41LDEuOC0xLjYsMy4zaDEwLjFWMjAyLjJ6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjcuOSwxOTguNGMwLjktMS42LDItMi45LDMuNS0zLjhjMS41LTAuOSwzLjEtMS40LDQuOS0xLjRjMS40LDAsMi42LDAuMywzLjksMC45YzEuMywwLjYsMi4zLDEuNCwzLDIuNHYtMTYuNw0KCWg1LjR2MzVoLTUuNHYtMy4xYy0wLjYsMS0xLjYsMS45LTIuOCwyLjVjLTEuMywwLjYtMi42LDEtNC4yLDFjLTEuOCwwLTMuNC0wLjUtNC45LTEuNGMtMS41LTAuOS0yLjYtMi4zLTMuNS0zLjkNCgljLTAuOS0xLjYtMS4zLTMuNS0xLjMtNS44QzI2LjYsMjAyLDI3LDIwMCwyNy45LDE5OC40eiBNNDIuNSwyMDAuOWMtMC41LTAuOS0xLjMtMS42LTItMi4xYy0wLjktMC41LTEuOC0wLjgtMi44LTAuOA0KCWMtMSwwLTEuOSwwLjMtMi44LDAuOGMtMC45LDAuNS0xLjUsMS4xLTIsMi4xYy0wLjUsMC45LTAuOCwyLTAuOCwzLjNjMCwxLjMsMC4zLDIuNCwwLjgsMy40YzAuNSwxLDEuMywxLjYsMiwyLjENCgljMC45LDAuNSwxLjgsMC44LDIuOCwwLjhjMSwwLDEuOS0wLjMsMi44LTAuOGMwLjktMC41LDEuNS0xLjMsMi0yLjFjMC41LTAuOSwwLjgtMiwwLjgtMy40UzQzLDIwMS44LDQyLjUsMjAwLjl6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjUuNCwyMDQuM3YxMC42aC01di0xMC42YzAtMi0wLjUtMy41LTEuNS00LjVjLTEtMS4xLTIuMS0xLjYtMy41LTEuNnMtMi41LDAuNS0zLjUsMS42DQoJYy0wLjksMS0xLjQsMi42LTEuNCw0LjV2MTAuNkg1LjV2LTEwLjZjMC0yLjEsMC41LTQsMS4zLTUuN2MwLjktMS42LDItMi45LDMuNS0zLjhzMy4xLTEuNCw1LTEuNHMzLjUsMC41LDUsMS40DQoJYzEuNSwwLjksMi42LDIuMSwzLjUsMy44QzI0LjksMjAwLjMsMjUuNCwyMDIuMiwyNS40LDIwNC4zeiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTUxLjMsMjA0LjF2LTEwLjRoNXYxMC40YzAsMiwwLjUsMy41LDEuNSw0LjVjMSwxLjEsMi4xLDEuNiwzLjUsMS42YzEuNCwwLDIuNS0wLjUsMy41LTEuNg0KCWMwLjktMSwxLjQtMi42LDEuNC00LjV2LTEwLjRoNC45djEwLjRjMCwyLjEtMC41LDQtMS4zLDUuN2MtMC45LDEuNi0yLDIuOS0zLjUsMy44Yy0xLjUsMC45LTMuMSwxLjQtNSwxLjRzLTMuNS0wLjUtNS0xLjQNCgljLTEuNS0wLjktMi42LTIuMS0zLjUtMy44QzUxLjcsMjA4LjEsNTEuMywyMDYuMiw1MS4zLDIwNC4xeiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTgwLjcsMTk4djEwLjJjMCwwLjgsMC4xLDEuMywwLjUsMS41YzAuNCwwLjQsMC45LDAuNSwxLjgsMC41aDIuNXY0LjVoLTMuNGMtNC41LDAtNi44LTIuMS02LjgtNi41VjE5OGgtNS4xDQoJdi00LjRoNS4xdi04LjdoNS40djguN2g0LjhsMi42LDQuNEg4MC43eiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTEwNy40LDE5My42bC04LjcsMjAuNmwtNSwxMS44aC01LjdsNS4xLTExLjhsLTguNC0yMC42aDZsNS40LDE0LjdsNS41LTE0LjdIMTA3LjR6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTY2LjksMTg5LjJjLTEuOSwwLTQuNy0yLjEtNC43LTQuOHYtMy42YzAtMi43LDAuOC00LjgsNC43LTQuOGMzLjksMCw0LjcsMi4xLDQuNyw0Ljh2My42DQoJQy02Mi4yLDE4Ny4xLTY1LDE4OS4yLTY2LjksMTg5LjJ6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTM3LjcsMjIzaC0yMS41bDMuOC0xMS40bDAuNy0xLjhjNC4yLDEuNywxMy4xLDcuMiwxNy43LDExLjZDLTM2LjQsMjIyLjEtMzYuOCwyMjMtMzcuNywyMjN6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTU3LjMsMTkyLjlsLTE1LjksMTAuNGMtNC4yLTIuNS05LjItNS45LTEyLjItOC44Yy0wLjYtMC42LTAuMi0xLjUsMC43LTEuNUgtNTcuM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0tNDguNiwxOTQuM2wtNiwxNS42bC0wLjcsMS44bC0zLjgsMTEuNEgtOTZjLTAuOCwwLTEuMy0wLjktMC44LTEuNWMwLjktMS4yLDEuOC0yLjMsMi43LTMuMw0KCWMyLjEtMi4yLDQuNC00LjEsNi45LTUuOGwwLjEtMC4xYzAuOC0wLjYsMS42LTEuMSwyLjQtMS42bDExLjQtNy40bDE1LjktMTAuNGg3LjdDLTQ4LjgsMTkyLjktNDguNCwxOTMuNi00OC42LDE5NC4zeiIvPg0KPC9zdmc+DQo= description: "# Introduction\n\nZenduty is a cutting edge platform for incident management. With high level automation, Zenduty enables faster and better incident resolution keeping developers first.\n\n\n Javascript Libraries: https://github.com/Zenduty/zenduty-js\n\n Ruby Libraries: https://github.com/Zenduty/zenduty-ruby\n\n Python Libraries: https://github.com/Zenduty/zenduty-python-sdk\n\n Postman Collection for Zenduty API: https://github.com/Zenduty/zenduty-api-postman.git\n\n Account-level roles and permissions: https://docs.zenduty.com/docs/users#account-level-roles-and-permissions\n\n Team-level roles and permissions: https://docs.zenduty.com/docs/users#team-level-roles-and-permissions\n" servers: - url: https://www.zenduty.com security: - bearerAuth: [] tags: - name: Analytics description: These endpoints provide incident analytics for your account. All analytics endpoints accept POST requests with optional filter parameters and return metrics such as incident counts, MTTA, and MTTR. paths: /api/v2/account/analytics/incident_stats/: post: tags: - Analytics summary: Get Incident Stats description: Returns incident counts for the account and the requesting user. requestBody: description: Optional filter parameters required: false content: application/json: schema: $ref: '#/components/schemas/AnalyticsRequestBody' example: from_date: '2025-09-24' to_date: '2025-12-23' team_ids: [] service_ids: [] user_ids: [] priority_ids: [] sla_ids: [] escalation_policy_ids: [] tag_ids: [] urgency: '' child_incident: include responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/IncidentStatsResponse' example: total_incidents: 150 total_triggered_incidents: 20 total_acknowledged_incidents: 30 total_resolved_incidents: 100 user_total_incidents: 40 user_triggered_incidents: 5 user_acknowledged_incidents: 10 user_resolved_incidents: 25 '403': description: Forbidden content: application/json: example: detail: You do not have permission to perform this action. /api/v2/account/analytics/team_analytics/: post: tags: - Analytics summary: Get Team Analytics description: Returns incident metrics for each team. requestBody: description: Optional filter parameters required: false content: application/json: schema: $ref: '#/components/schemas/AnalyticsRequestBody' example: from_date: '2025-09-24' to_date: '2025-12-23' team_ids: [] service_ids: [] user_ids: [] priority_ids: [] sla_ids: [] escalation_policy_ids: [] tag_ids: [] urgency: '' child_incident: include responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TeamAnalyticsResponse' example: all_teams: total_incidents: 500 total_acknowledged: 400 total_resolved: 300 mtta_seconds: 120.5 mttr_seconds: 3600 team_records: - team: name: Platform Team unique_id: abc-def-123 total_incidents: 100 total_acknowledged: 80 total_resolved: 60 mtta_seconds: 90.2 mttr_seconds: 2400 '403': description: Forbidden content: application/json: example: detail: You do not have permission to perform this action. /api/v2/account/analytics/service_analytics/: post: tags: - Analytics summary: Get Service Analytics description: Returns incident metrics for each service. requestBody: description: Optional filter parameters required: false content: application/json: schema: $ref: '#/components/schemas/AnalyticsRequestBody' example: from_date: '2025-09-24' to_date: '2025-12-23' team_ids: [] service_ids: [] user_ids: [] priority_ids: [] sla_ids: [] escalation_policy_ids: [] tag_ids: [] urgency: '' child_incident: include responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ServiceAnalyticsResponse' example: all_services: total_incidents: 500 total_acknowledged: 400 total_resolved: 300 mtta_seconds: 120.5 mttr_seconds: 3600 service_records: - team: name: Platform Team unique_id: abc-def-123 service: name: API Gateway unique_id: xyz-789 total_incidents: 100 total_acknowledged: 80 total_resolved: 60 mtta_seconds: 90.2 mttr_seconds: 2400 '403': description: Forbidden content: application/json: example: detail: You do not have permission to perform this action. /api/v2/account/analytics/user_analytics/: post: tags: - Analytics summary: Get User Analytics description: Returns incident metrics for each user. requestBody: description: Optional filter parameters required: false content: application/json: schema: $ref: '#/components/schemas/AnalyticsRequestBody' example: from_date: '2025-09-24' to_date: '2025-12-23' team_ids: [] service_ids: [] user_ids: [] priority_ids: [] sla_ids: [] escalation_policy_ids: [] tag_ids: [] urgency: '' child_incident: include responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UserAnalyticsResponse' example: all_users: total_incidents: 500 total_acknowledged: 400 total_resolved: 300 mtta_seconds: 120.5 mttr_seconds: 3600 user_records: - user: full_name: Jane Doe username: jane.doe total_incidents: 100 total_acknowledged: 80 total_resolved: 60 mtta_seconds: 90.2 mttr_seconds: 2400 '403': description: Forbidden content: application/json: example: detail: You do not have permission to perform this action. components: schemas: AnalyticsServiceInfo: type: object properties: name: type: string description: Service name. unique_id: type: string format: uuid description: Service unique identifier. AnalyticsMetrics: type: object description: Common analytics metrics. properties: total_incidents: type: integer description: Total incidents. total_acknowledged: type: integer description: Incidents with status > 1 (acknowledged or resolved). total_resolved: type: integer description: Incidents with status = 3. mtta_seconds: type: number format: float description: Weighted average Mean Time to Acknowledge in seconds. mttr_seconds: type: number format: float description: Weighted average Mean Time to Resolve in seconds. UserAnalyticsResponse: type: object properties: all_users: $ref: '#/components/schemas/AnalyticsMetrics' user_records: type: array items: $ref: '#/components/schemas/UserAnalyticsRecord' TeamAnalyticsRecord: type: object properties: team: $ref: '#/components/schemas/AnalyticsTeamInfo' total_incidents: type: integer total_acknowledged: type: integer total_resolved: type: integer mtta_seconds: type: number format: float mttr_seconds: type: number format: float AnalyticsUserInfo: type: object properties: full_name: type: string description: User's full name (first + last name). username: type: string description: Username. ServiceAnalyticsRecord: type: object properties: team: $ref: '#/components/schemas/AnalyticsTeamInfo' service: $ref: '#/components/schemas/AnalyticsServiceInfo' total_incidents: type: integer total_acknowledged: type: integer total_resolved: type: integer mtta_seconds: type: number format: float mttr_seconds: type: number format: float TeamAnalyticsResponse: type: object properties: all_teams: $ref: '#/components/schemas/AnalyticsMetrics' team_records: type: array items: $ref: '#/components/schemas/TeamAnalyticsRecord' IncidentStatsResponse: type: object description: Aggregate incident counts for the account and for the requesting user. properties: total_incidents: type: integer description: Total incidents matching filters. total_triggered_incidents: type: integer description: Incidents with status = triggered (1). total_acknowledged_incidents: type: integer description: Incidents with status = acknowledged (2). total_resolved_incidents: type: integer description: Incidents with status = resolved (3). user_total_incidents: type: integer description: Incidents assigned to the requesting user. user_triggered_incidents: type: integer description: User's incidents with status = triggered. user_acknowledged_incidents: type: integer description: User's incidents with status = acknowledged. user_resolved_incidents: type: integer description: User's incidents with status = resolved. UserAnalyticsRecord: type: object properties: user: $ref: '#/components/schemas/AnalyticsUserInfo' total_incidents: type: integer total_acknowledged: type: integer total_resolved: type: integer mtta_seconds: type: number format: float mttr_seconds: type: number format: float ServiceAnalyticsResponse: type: object properties: all_services: $ref: '#/components/schemas/AnalyticsMetrics' service_records: type: array items: $ref: '#/components/schemas/ServiceAnalyticsRecord' AnalyticsTeamInfo: type: object properties: name: type: string description: Team name. unique_id: type: string format: uuid description: Team unique identifier. AnalyticsRequestBody: type: object description: Common request body for all analytics endpoints. All fields are optional. properties: from_date: type: string format: date description: Start date in YYYY-MM-DD format example: '2025-09-24' to_date: type: string format: date description: End date in YYYY-MM-DD format example: '2025-12-23' team_ids: type: array items: type: string format: uuid description: List of team unique_id UUIDs. Empty array means all accessible teams. service_ids: type: array items: type: string format: uuid description: List of service unique_id UUIDs. user_ids: type: array items: type: string description: List of usernames. Use "Unassigned" to filter unassigned incidents. priority_ids: type: array items: type: string format: uuid description: List of team priority unique_id UUIDs. sla_ids: type: array items: type: string format: uuid description: List of SLA unique_id UUIDs. escalation_policy_ids: type: array items: type: string format: uuid description: List of escalation policy unique_id UUIDs. tag_ids: type: array items: type: string format: uuid description: List of team tag unique_id UUIDs. urgency: description: 0 for low, 1 for high. example: '1' child_incident: type: string description: Set to "exclude" to exclude merged child incidents. Any other value has no effect. example: include tta: type: number description: Time-to-acknowledge threshold in seconds. Requires tta_comparator. tta_comparator: type: string enum: - gt - lt description: Required if tta is set. ttr: type: number description: Time-to-resolve threshold in seconds. Requires ttr_comparator. Must be >= tta if both are set. ttr_comparator: type: string enum: - gt - lt description: Required if ttr is set. securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: Token