---
title: "Set Camera Group Members"
method: PUT
path: "/camera-groups/{group_id}/members"
tags: ["camera-groups"]
---

# Set Camera Group Members

`PUT /camera-groups/{group_id}/members`

## Request

- Base URL: `https://api.verdun.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.verdun.ai/camera-groups/{group_id}/members`
- Auth: HTTP bearer

## Path parameters

- `group_id` string, required

## Request body

- SetCameraGroupMembersRequest: Replace the camera group's membership with this exact set. Replace-set, not per-camera add/remove: the picker submits a set, and rewriting the whole set in one transaction is what makes the change atomic — two concurrent PUTs would otherwise interleave into the UNION of both sets, leaving a camera someone just removed still silenced by this group's schedule while the UI shows it removed. An empty list empties the camera group. If the group has a schedule, that schedule then governs nobody; the group itself survives.
  - `camera_ids` string[]: The complete desired member set. Every camera must be a live camera at this camera group's own site (409 otherwise); a camera may belong to several camera groups at once.

## Response `200`

Successful Response

- CameraGroupMembersResponse: The camera group's membership as it stands after the request. The PUT is a REPLACE-SET: this payload is the authoritative new state, not a delta. A camera absent from it is no longer a member, and this group's schedule no longer contributes to that camera's monitoring state.
  - `group_id` string, uuid, required: The camera group.
  - `members` CameraGroupMemberResponse[], required: Live member cameras, by label.
    - `camera_id` string, uuid, required: Member camera.
    - `camera_label` string, required: The camera's display name.
    - `other_group_names` string[]: The OTHER live camera groups this camera also belongs to. Present so the picker can warn before a shared camera - a business park's common entrance is the motivating case - is quieted by a schedule its other tenants did not ask for.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verdun/apis/verdun-api.md) - [All operations](https://skmtc.dev/verdun/apis/verdun-api/llms.txt) - [OpenAPI document](https://skmtc.dev/verdun/apis/verdun-api/revisions/35a2a6ebedda?raw)
