Groups

Creates a group of the company. Requires a company admin.

visibility defaults to restricted and recordingAccess to own_group. A shared group contains every user of the company from the start and does not take recording access settings. With recordingAccess set to selected_groups, recordingAccessGroupIds lists the other restricted groups whose recordings the members can see. The group itself is always included and does not need to be listed.

Group names are unique within the company, ignoring case and surrounding whitespace. The request is not idempotent: repeating it returns 409 with the code group_name_taken. A script that did not see the response can look the group up with GET /groups?search=<name> and compare the name.

Requests are checked in this order, and the first problem is reported: 403 forbidden for keys that are not company admins, 400 for malformed or inconsistent fields, 409 for a name that is taken. Error codes: unknown_field, invalid_name, invalid_visibility, invalid_recording_access, invalid_recording_access_group_ids, recording_access_not_applicable, recording_access_group_ids_not_applicable, recording_access_group_ids_required, validation_failed.

Rate limits:

  • Global: 120 requests per minute per API key.
  • Endpoint-specific: 30 requests per minute per API key, shared with PATCH /groups/{groupId} and DELETE /groups/{groupId}.
post/groups

Request

  • Base URL
    https://demodesk.com/api/v2
  • Auth
    HTTP bearer

Request body

namestring required

Name of the group, without surrounding whitespace. Must be unique within the company, ignoring case.

visibility'restricted' | 'shared'

restricted groups have explicit members. shared groups contain every user of the company and cannot be combined with recordingAccess or recordingAccessGroupIds.

recordingAccess'own_group' | 'selected_groups' | 'all_groups'

Whose recordings the members can see in addition to the group's own. Only for restricted groups.

recordingAccessGroupIdsstring[]

Required and non-empty when recordingAccess is selected_groups, not allowed otherwise. Each id must belong to a restricted group of the company other than the default group.

Example request

{
  "name": "Sales DACH",
  "recordingAccessGroupIds": [
    "12",
    "34"
  ]
}

Response

Group created.

Example response

{
  "data": {
    "id": "456",
    "name": "Sales DACH",
    "recordingAccessGroupIds": [
      "12",
      "34"
    ],
    "createdAt": "2026-10-14T09:12:33.000Z",
    "updatedAt": "2026-10-14T09:12:33.000Z"
  }
}

Changes