openapi: 3.1.1 info: title: Groups Management description: API for managing user groups (Team Views) within an account version: 1.0.0 contact: name: Avaya API Team email: api-team@avaya.com url: https://developers.avayacloud.com/avaya-infinity/ license: name: Avaya Software Development Kit (SDK) Software License Terms url: https://support.avaya.com/css/P8/documents/101038288 servers: - url: https://core.{customerId}.ec.avayacloud.com/api/config/v1 description: Production variables: customerId: description: Your organization identifier default: your-org-id security: - BearerAuth: [] tags: - name: Groups description: Group management operations - name: Group Users description: Group membership operations paths: /groups: get: summary: List all active groups description: Returns all active groups for the account. tags: - Groups parameters: - $ref: '#/components/parameters/pageNumber' - $ref: '#/components/parameters/pageSize' - name: updatedSince in: query description: 'Filter groups updated on or after this UTC timestamp. Must be in ISO 8601 format (e.g., 2026-01-22T00:00:00Z or 2026-01-22T00:00:00). Timezone is optional. When used with updatedUntil, updatedUntil must be greater than updatedSince. Note: Groups are considered updated when their properties change OR when members are added, removed, or modified. Newly created groups have lastUpdated set to their creation time. ' required: false schema: type: string format: date-time - name: updatedUntil in: query description: 'Filter groups updated on or before this UTC timestamp. Must be in ISO 8601 format (e.g., 2026-01-22T23:59:59Z or 2026-01-22T23:59:59). Timezone is optional. When used with updatedSince, must be greater than updatedSince. Note: Groups are considered updated when their properties change OR when members are added, removed, or modified. ' required: false schema: type: string format: date-time responses: '200': description: Groups retrieved successfully content: application/json: schema: $ref: '#/components/schemas/GroupListPage' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '422': $ref: '#/components/responses/ConstraintViolation' '500': $ref: '#/components/responses/InternalServerError' post: summary: Create a new group description: 'Creates a new group (Team View) with optional members. **Note:** If no `members` are specified, the authenticated user is automatically added as the first member of the group. ' tags: - Groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupRequest' responses: '201': description: Group created successfully content: application/json: schema: $ref: '#/components/schemas/GroupData' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '409': $ref: '#/components/responses/Conflict' '422': $ref: '#/components/responses/ConstraintViolation' '500': $ref: '#/components/responses/InternalServerError' /groups/{groupId}: get: summary: Get a group by ID description: Returns a specific group with its users tags: - Groups parameters: - $ref: '#/components/parameters/groupId' - name: includeInDashboard in: query description: 'Filter users by includeInDashboard flag. If included, only group users with a matching includeInDashboard value will be included. If omitted, all group users will be included. ' schema: type: boolean responses: '200': description: Group retrieved successfully content: application/json: schema: $ref: '#/components/schemas/GroupData' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/ConstraintViolation' '500': $ref: '#/components/responses/InternalServerError' patch: summary: Update a group description: Updates group properties and/or membership tags: - Groups parameters: - $ref: '#/components/parameters/groupId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateGroupRequest' responses: '200': description: Group updated successfully content: application/json: schema: $ref: '#/components/schemas/GroupData' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/ConstraintViolation' '500': $ref: '#/components/responses/InternalServerError' /groups/{groupId}/users: patch: summary: Bulk add users to group description: Adds multiple users to a group tags: - Group Users parameters: - $ref: '#/components/parameters/groupId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddUsersToGroupRequest' responses: '200': description: Users added successfully content: application/json: schema: $ref: '#/components/schemas/AddUsersToGroupResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/ConstraintViolation' '500': $ref: '#/components/responses/InternalServerError' components: securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT description: 'OAuth 2.0 Bearer Token with scoped permissions. Required scopes documented per endpoint. ' parameters: groupId: name: groupId description: ID of the group in question in: path required: true schema: $ref: '#/components/schemas/GroupId' pageNumber: name: pageNumber in: query description: The page number of the records to retrieve. required: false schema: type: integer format: int32 default: 1 minimum: 1 pageSize: name: pageSize in: query description: The max number of records to retrieve per page. required: false schema: type: integer format: int32 default: 10 minimum: 1 maximum: 50 schemas: GroupName: description: The name of a group. type: string minLength: 1 maxLength: 50 pattern: ^[a-zA-Z0-9][a-zA-Z0-9 _-]*$ example: Sales Team GroupType: description: Group type type: string enum: - team Member: description: Group user object with userId and includeInDashboard flag. Used in members property. type: object required: - userId properties: userId: description: ID of the user to include as a member of the group. $ref: '#/components/schemas/UserId' includeInDashboard: description: Include in team dashboard (for team type groups) type: boolean default: true example: userId: 002507f1e1c8e3e9a8b7c5d4e3f2 includeInDashboard: true ChatChannelId: description: Associated chat channel ID (for team type) type: - 'null' - string CreateGroupRequest: description: Request payload for creating a new group. type: object required: - name properties: name: description: Name for the new group. $ref: '#/components/schemas/GroupName' members: description: Specifies the users to be included as members of the new group. type: array items: $ref: '#/components/schemas/Member' type: $ref: '#/components/schemas/GroupType' folderId: description: Optional ID of folder to organize the new group under. $ref: '#/components/schemas/FolderId' accountIdOverride: description: Master account override (requires special permissions) $ref: '#/components/schemas/AccountId' accountId: description: Target account ID (requires accountIdOverride) $ref: '#/components/schemas/AccountId' UpdateGroupRequest: description: 'Request payload for updating an existing group. All of the properties are optional, however at least one must be provided. ' type: object properties: name: description: 'New name of the group. Note that group names must be unique. ' $ref: '#/components/schemas/GroupName' isActive: description: Group active status type: boolean members: description: 'Specifies the users to be set as members of the new group. Notes this replaces all existing members. ' type: array items: $ref: '#/components/schemas/Member' folderId: description: 'ID of the folder to put the group in. To remove a group from being in a folder, set this to null. ' oneOf: - $ref: '#/components/schemas/FolderId' - type: 'null' AddUsersToGroupRequest: description: Payload object for adding multiple users to a group in a single operation. type: object required: - users properties: users: description: Array of users to add to the group. type: array items: $ref: '#/components/schemas/Member' addUsersToChannel: description: Whether to add users to associated channels (default true) type: boolean default: true accountIdOverride: description: Master account override $ref: '#/components/schemas/AccountId' accountId: description: Target account ID $ref: '#/components/schemas/AccountId' AddUsersToGroupResponse: description: Brief list of the group's members after the update. type: array items: type: object required: - userId properties: userId: description: ID of the user to include as a member of the group. $ref: '#/components/schemas/UserId' readOnly: true includeInDashboard: description: Is this user to be included in team dashboard (for team type groups) type: boolean readOnly: true GroupListPage: description: A page of results from querying groups. type: object properties: pagination: $ref: '#/components/schemas/Pagination' readOnly: true groups: type: array items: $ref: '#/components/schemas/GroupData' readOnly: true links: $ref: '#/components/schemas/Links' readOnly: true required: - pagination - groups - links GroupData: description: Returned data about a group. type: object required: - groupId - name - accountId - isActive - createdAt - createdBy - users properties: groupId: description: Unique identifier of the group. $ref: '#/components/schemas/GroupId' readOnly: true name: description: Name of the group. $ref: '#/components/schemas/GroupName' readOnly: true type: $ref: '#/components/schemas/GroupType' description: Group type readOnly: true accountId: description: ID of the account that owns the group. $ref: '#/components/schemas/AccountId' readOnly: true folderId: description: ID of the folder that the group was filed in, if any. $ref: '#/components/schemas/FolderId' readOnly: true parentGroupId: description: ID of the parent group. Only present for nested groups. $ref: '#/components/schemas/GroupId' readOnly: true isActive: type: boolean description: Whether the group is active readOnly: true createdAt: $ref: '#/components/schemas/CreatedAt' readOnly: true createdBy: $ref: '#/components/schemas/CreatedBy' readOnly: true updatedAt: $ref: '#/components/schemas/UpdatedAt' readOnly: true updatedBy: $ref: '#/components/schemas/UpdatedBy' description: Only present if the group has been updated by a different user than the creator. readOnly: true chatChannelId: $ref: '#/components/schemas/ChatChannelId' description: Only present for groups with an associated chat channel. readOnly: true users: description: List of users that are members of the group. type: array items: $ref: '#/components/schemas/GroupUser' readOnly: true GroupUser: description: Data about an individual user in a group. type: object required: - userId - details - email properties: userId: $ref: '#/components/schemas/UserId' readOnly: true details: $ref: '#/components/schemas/GroupUserDetails' readOnly: true fullName: $ref: '#/components/schemas/FullName' readOnly: true firstName: $ref: '#/components/schemas/FirstName' readOnly: true lastName: $ref: '#/components/schemas/LastName' readOnly: true namePrefix: $ref: '#/components/schemas/NamePrefix' readOnly: true nameSuffix: $ref: '#/components/schemas/NameSuffix' readOnly: true extension: $ref: '#/components/schemas/Extension' readOnly: true email: $ref: '#/components/schemas/Email' readOnly: true title: $ref: '#/components/schemas/UserTitle' readOnly: true statusType: $ref: '#/components/schemas/UserStatusType' readOnly: true status: $ref: '#/components/schemas/UserStatus' readOnly: true statusLastUpdated: description: Last status update time type: string format: date-time readOnly: true isAID: $ref: '#/components/schemas/IsAID' readOnly: true voipStatus: description: VoIP status type: string readOnly: true queues: $ref: '#/components/schemas/UserQueues' readOnly: true cxLogoutReason: description: Reason for agent logout type: string readOnly: true GroupUserDetails: type: object properties: teamView: $ref: '#/components/schemas/GroupUserTeamView' readOnly: true GroupUserTeamView: type: object properties: includeInDashboard: description: Whether to include user in team dashboard type: boolean readOnly: true Pagination: description: Pagination metadata type: object required: - pageNumber - pageSize - total properties: pageNumber: description: The current page number type: integer minimum: 1 readOnly: true example: 1 pageSize: description: The maximum number of items per page type: integer minimum: 1 readOnly: true example: 10 total: description: The total number of items type: integer minimum: 0 readOnly: true example: 2 GroupId: description: Unique identifier for a group. type: string pattern: ^007[0-9a-f]{23}$ example: 007a1b2c3d4e5f67890abcdef12 AccountId: description: Unique identifier for an account. type: string pattern: ^001[0-9a-f]{23}$ example: 001f8e7d6c5b4a39281706f5e4d FolderId: description: Unique identifier for a folder. type: string pattern: ^073[0-9a-f]{23}$ example: 073d010813b941cf7da111d147 CreatedAt: description: Timestamp of when the resource was created. type: string format: date-time example: '2025-09-08T06:19:21.561Z' UserId: description: Unique identifier for a user. type: string pattern: ^002[0-9a-f]{23}$ example: 002507f1e1c8e3e9a8b7c5d4e3f2 CreatedBy: description: ID of the user who created the resource. allOf: - $ref: '#/components/schemas/UserId' example: 002d010826307dd6630992437b UpdatedAt: description: 'Timestamp of when the resource was last updated. This may not be included if the resource has not been updated since it was created. ' type: string format: date-time example: '2025-09-08T06:19:21.561Z' UpdatedBy: description: 'ID of the user who last updated the resource. This may not be included if the resource has not been updated since it was created. ' allOf: - $ref: '#/components/schemas/UserId' example: 002d010826307dd6630992437b FullName: description: The full name of the user (firstName + lastName). type: string example: John Smith FirstName: description: The first name of a user. type: string minLength: 2 maxLength: 255 pattern: ^[^<>\^@#]*$ example: John LastName: description: The last name of a user. type: string minLength: 2 maxLength: 255 pattern: ^[^<>\^@#]*$ example: Smith NamePrefix: description: The name prefix of a user. type: string NameSuffix: description: The name suffix of a user. type: string enum: - Jr - Sr - I - II - III - IV - V - CLU - CO - CPA - DDS - ESQ - MD - PhD - RN Extension: description: The extension of an agent user. type: string example: '1001' Email: description: A user's email address type: string format: email UserTitle: description: The user's job title. type: string minLength: 1 maxLength: 510 example: Supervisor UserStatusType: description: User status type type: string example: offline UserStatus: description: Current user status type: string example: Offline IsAID: description: Whether user is using AID type: boolean example: false QueueId: description: Unique identifier for a queue. type: string minLength: 23 maxLength: 26 pattern: ^003[0-9a-f]{20,23}$ example: 00301090301ad8db0f0d4c370 UserQueues: description: Queues configuration for a user or profile. type: object properties: access: type: array items: $ref: '#/components/schemas/QueueId' performance: type: array items: $ref: '#/components/schemas/QueueId' autoLogin: type: array items: $ref: '#/components/schemas/QueueId' proficiency: type: array items: $ref: '#/components/schemas/QueueId' logins: type: array items: $ref: '#/components/schemas/QueueId' defaultOutboundQueue: anyOf: - $ref: '#/components/schemas/QueueId' - type: 'null' outboundQueueId: anyOf: - $ref: '#/components/schemas/QueueId' - type: 'null' Links: description: Pagination navigation links type: object required: - prev - next properties: prev: description: URL of the previous page. Blank if currently on the first page. type: string readOnly: true example: '' next: description: URL of the next page. Blank if currently on the last page. type: string readOnly: true example: '' Violation: type: object properties: field: description: 'The name of the field in the request that caused the violation. This can be the name of a path parameter, query parameter, or a field within the request body. ' type: string readOnly: true example: jobName message: description: 'A human-readable explanation specific to this occurrence of the violation. ' type: string readOnly: true example: must match "^[a-zA-Z]{6}$" code: description: 'The violation code generated by the server for this occurrence of the violation. Use this code when implementing any error handling logic instead of the message, as the message can change. ' type: integer format: int32 readOnly: true example: 20006 required: - field - message - code example: - field: emailAddress message: must not be null code: 20002 Problem: type: object description: 'Problem Detail is a way to carry machine-readable details of errors in an HTTP response to avoid the need to define new error response formats for HTTP APIs RFC 7807 ' properties: type: description: 'An absolute URI that identifies the problem type. When dereferenced, it SHOULD provide human-readable documentation for the problem type (e.g., using HTML). ' type: string format: uri readOnly: true example: https://developers.avayacloud.com/avaya-infinity/docs/group-management#error-reference title: description: 'A short, summary of the problem type. Written in English and readable for engineers (usually not suited for non technical stakeholders and not localized). ' type: string readOnly: true example: Service Unavailable status: description: 'The HTTP status code generated by the origin server for this occurrence of the problem. ' type: integer format: int32 minimum: 300 exclusiveMaximum: 600 readOnly: true example: 503 detail: description: 'A human-readable explanation specific to this occurrence of the problem. ' type: string readOnly: true example: Connection to database timed out instance: description: 'An absolute URI that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. ' type: string format: uri readOnly: true violations: description: 'A list of violations that occurred as a result of invalid data provided as part of a request. ' type: array items: $ref: '#/components/schemas/Violation' readOnly: true responses: BadRequest: description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/Problem' example: type: https://developers.avayacloud.com/errors/constraint-violation title: Constraint Violation status: 400 detail: Request contains invalid or missing fields violations: - field: accountId message: must match "^[a-zA-Z]{6}$" code: 20006 Unauthorized: description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/Problem' example: type: https://developers.avayacloud.com/errors/unauthorized title: Unauthorized status: 401 detail: Bearer token expired at 2025-12-08T10:15:00Z. Request a new token. requestId: req_xyz789 timestamp: '2025-12-08T10:30:05Z' Forbidden: description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/Problem' example: type: https://developers.avayacloud.com/errors/forbidden title: Forbidden status: 403 detail: 'Missing required scope: ''workflows:execute''. Your token has: ''workflows:read''' requestId: req_xyz789 timestamp: '2025-12-08T10:30:05Z' ConstraintViolation: description: Constraint Violation content: application/problem+json: schema: $ref: '#/components/schemas/Problem' InternalServerError: description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/Problem' example: type: https://developers.avayacloud.com/errors/internal-error title: Internal Server Error status: 500 detail: An unexpected error occurred while processing your request requestId: req_xyz789 timestamp: '2025-12-08T10:30:05Z' Conflict: description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' example: type: https://developers.avayacloud.com/errors/conflict title: Conflict status: 409 detail: A resource with the same unique constraint values already exists violations: - field: name message: A category with this name already exists NotFound: description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/Problem' example: type: https://developers.avayacloud.com/errors/resource-not-found title: Resource Not Found status: 404 detail: workflowId 'wf_123abc' does not exist requestId: req_xyz789 timestamp: '2025-12-08T10:30:05Z'