---
title: "Update group"
method: PATCH
path: "/groups/{groupId}"
tags: ["Groups"]
---

# Update group

`PATCH /groups/{groupId}`

## Request

- Base URL: `https://demodesk.com/api/v2`
- URL: `https://demodesk.com/api/v2/groups/{groupId}`
- Auth: HTTP bearer

Changes the settings of a group. Only the fields in the body are changed, and an empty body changes
nothing. `null` is never a valid value: omit a field instead of sending `null`. The rules are checked
against the group as it will look after the change, so a shared group can become restricted with its
recording access in a single request.

Changing a group requires the permission to edit it in the web app: a company admin, or a manager who
is a member of the group. Managers can change `name` only. A manager sending `visibility`,
`recordingAccess` or `recordingAccessGroupIds` gets `403`, because these can expose the recordings
of a group to other users. A group that is unknown, personal, or not readable returns `404` with the code
`group_not_found`. The default General group cannot be changed and returns `400` with the code
`group_is_default`.

Changing a group from `restricted` to `shared` adds every user of the company to it, and its recording
access no longer applies. Changing it from `shared` to `restricted` keeps the members. Changing the
recording access takes effect immediately for all members, with no further updates to meetings
or recordings.

Renaming to a name that another group of the company already has, ignoring case, returns `409` with
the code `group_name_taken`. Error codes for `400` are the ones of `POST /groups`, plus
`group_is_default`.

Rate limits:
- Global: 120 requests per minute per API key.
- Endpoint-specific: 30 requests per minute per API key, shared with `POST /groups` and
  `DELETE /groups/{groupId}`.

## Path parameters

- `groupId` string, required

## Request body

- GroupUpdateRequest: All fields are optional; omitted fields stay unchanged. `null` is never a valid value.
  - `name` string: New name of the group, without surrounding whitespace. Must be unique within the company, ignoring case.
  - `visibility` 'restricted' | 'shared': Changing a group from `restricted` to `shared` adds every user of the company to it. Changing it from `shared` to `restricted` keeps the members.
  - `recordingAccess` 'own_group' | 'selected_groups' | 'all_groups': Whose recordings the members can see in addition to the group's own. Only for restricted groups. Company admins only.
  - `recordingAccessGroupIds` string[]: Replaces the selected groups. Required and non-empty when the resulting `recordingAccess` is `selected_groups`, not allowed otherwise. Company admins only.

## Response `200`

Group updated, or unchanged for an empty body.

- GroupResponse
  - `data` Group, required
    - `id` string, required: Internal group id.
    - `name` string, required: Name of the group.
    - `visibility` 'restricted' | 'shared', required: Visibility of the group. Shared groups contain every user of the company and their membership cannot be changed.
    - `default` boolean, required: Whether this is the default General group of the company. The default group cannot be changed through the API.
    - `recordingAccess` 'own_group' | 'selected_groups' | 'all_groups', nullable, required: Whose recordings the members of the group can see in addition to the recordings of the group itself. `own_group` adds nothing, `selected_groups` adds the groups listed in `recordingAccessGroupIds`, `all_groups` adds every restricted group of the company. `null` for shared groups, where the setting does not apply.
    - `recordingAccessGroupIds` string[], required: Ids of the groups whose recordings the members can see in addition to the group's own. Only filled when `recordingAccess` is `selected_groups`. The group itself is implicit and never listed.
    - `createdAt` string, date-time, required: When the group was created.
    - `updatedAt` string, date-time, required: When the group was last changed.

## Other responses

- `400`: Request validation failed.
- `401`: API key is missing or invalid.
- `403`: The authenticated user is not allowed to access this resource, e.g. it is not assigned to a company.
- `404`: Resource was not found.
- `409`: The request conflicts with the current state of a resource, e.g. the group name is already taken.
- `429`: Rate limit exceeded.

## Changes

- **2026-10-18** `14d6c8e2e11a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/demodesk/apis/demodesk-public-api/changes/groups/:groupId/patch.md)

---

[API](https://skmtc.dev/demodesk/apis/demodesk-public-api.md) - [All operations](https://skmtc.dev/demodesk/apis/demodesk-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/demodesk/apis/demodesk-public-api/revisions/8729e4025dc9?raw)
