Set Collaborator Group Members
Full-replaces the member set of a collaborator group, reconciling it against the payload.
Last updated: June 7, 2026
PUT /siren/v1/collaborator-groups/{id}/members
Full-replaces the member set of an existing collaborator group. The group must exist (enforced by RecordExistsMiddleware). Requires authentication and the update capability on the CollaboratorGroup resource.
The endpoint reconciles the group’s full member set against the payload. Collaborators present in the body but not in the group are added, collaborators in the group but missing from the body are removed, and an existing member’s metadata is rewritten only when the submitted value differs from the stored one. Each entry’s metadata is structure-specific and follows the same rules as the CollaboratorGroupMember resource. An entry that omits metadata is treated as empty metadata, so submitting an existing member without a metadata object clears whatever metadata that member had, subject to the same only-on-change rule: clearing an already-empty member writes nothing and fires no event. Entries with a missing or zero collaboratorId are skipped, and when the same collaboratorId appears more than once the last entry wins.
Because this is a full replace, the members array is the complete desired roster rather than a delta. Sending an empty members array, omitting it, or sending a body whose entries all get skipped removes every member from the group. That makes the destructive path the default path, so treat a missing or malformed members field as a roster wipe rather than a no-op. To add or remove a single member without restating the whole roster, use Add members or Remove member instead. Retrying the same complete payload is safe and converges on the same roster.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
members | object[] | No | The full desired member set. Each entry is { "collaboratorId": int, "metadata": object? }. Defaults to an empty array, which removes all members. |
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | The collaborator group’s id. Taken from the path. Must reference an existing group. |
Example Request:
{
"members": [
{ "collaboratorId": 41, "metadata": { "position": 1 } },
{ "collaboratorId": 42, "metadata": { "position": 2 } }
]
}
Example Response:
[
{
"id": 87,
"groupId": 12,
"collaboratorId": 41,
"metadata": { "position": 1 }
},
{
"id": 88,
"groupId": 12,
"collaboratorId": 42,
"metadata": { "position": 2 }
}
]
Returns the reconciled member array with a 200 status. Each returned row uses the same adapter shape as Add members: id, groupId, collaboratorId, metadata, dateCreated, and dateModified. The example above shows the first four for brevity.
Error Responses:
404. No collaborator group found with that ID.500. Database error while updating members.
Events: Reconciliation broadcasts CollaboratorAddedToCollaboratorGroup for each newly added row, CollaboratorGroupMemberMetadataChanged for each existing row whose metadata changed, and CollaboratorRemovedFromCollaboratorGroup for each row dropped from the group.