When to use this workflow
The seven endpoints
The split between Group endpoints (
/groups/{id}) and member endpoints (/groups/{id}/members) lets you manage metadata and membership independently — useful when these change at different cadences or come from different sources.
Lifecycle: create → update → manage members → delete
The four operational phases for a typical Group’s lifetime: In practice, Groups spend most of their lifetime in the “manage members” phase — adding new volunteers, removing departed ones, periodically syncing rosters. Create and delete happen rarely; member sync is the most common operation.Phase 1: Create a Group
cURL
Creating with initial members
Themembers array in the request body lets you populate the Group at creation time:
JavaScript
Creating a child Group
To create a Group as a child of an existing one, provide the parent’s ID:JavaScript
Phase 2: Update Group metadata
PUT /groups/{id} is full-record replacement. Use the GET-then-PUT pattern to avoid clearing fields by omission:
JavaScript
Updating metadata only (without re-PUT-ing members)
If you want to update metadata but the Group’s member list is large or unstable, two options: Option A: separate the metadata update from the members update. Themembers field is required on PUT /groups/{id} — you can’t omit it. But you can re-PUT the current members (effectively a no-op for membership) while changing metadata:
JavaScript
JavaScript
Phase 3: Manage members
For dedicated membership changes — separate from metadata — usePUT /groups/{id}/members. This endpoint takes only a members array (no metadata fields).
cURL
Replacement semantics — what this PUT really does
The PUT replaces the entire member list with what you submit. Implications:
This is not an “add these members” PUT — it’s a “the Group’s members are now these IDs” PUT.
Add a single member (GET-then-PUT union)
JavaScript
Remove a single member (GET-then-PUT subset)
JavaScript
Batch multiple changes
For workflows that need to add and remove multiple members in one operation:JavaScript
Phase 4: Sync rosters from an external system
The most common operational pattern: a partner integration mirrors a team roster from an external HR/CRM system into a VOMO Group.JavaScript
The PUT is atomic from the API’s perspective — partial failure is unlikely, and the resulting state matches the external roster exactly.
Scheduled roster sync
For ongoing maintenance (run nightly or hourly):JavaScript
Phase 5: Managing hierarchies
For organizations with structured team hierarchies, build parent-child Groups that mirror the external structure:JavaScript
Moving a Group to a different parent
JavaScript
parent_id moves the Group in the hierarchy. This affects:
- The Group’s location in tree displays
- Any reporting that aggregates by Group hierarchy
- Potentially the Group’s accessibility (if access is hierarchical)
Phase 6: Deletion
DELETE /groups/{id} removes the Group:
JavaScript
Deletion considerations
For production workflows, prefer archival to deletion when possible:
JavaScript
A reference Groups workflow client
JavaScript
Common bugs to avoid
A few patterns that cause subtle issues:Don’t omit members from PUT /groups/{id} thinking it preserves membership
The members field is part of the request body for PUT /groups/{id}. Omitting it means submitting an undefined value — which may be interpreted as “clear all members” or rejected as a validation error. Always include the current member IDs (or use the dedicated /members endpoint).
Don’t use member emails instead of IDs
Themembers array in PUT bodies expects integer User IDs, not emails. If your external data is keyed by email, convert to IDs before submitting:
JavaScript
Don’t add members one at a time in a loop without throttling
Sequential single-add operations against a Group create N requests, each requiring a GET + PUT. For batches of changes, useapplyMemberChanges or replaceMembers to consolidate into one PUT.
JavaScript
Where to go next
Build a Group from a Query
The end-to-end recipe that combines user-querying with Group population.
Read a Project's Schedule
The companion read workflow for Projects.
Groups
The reference page for Group resource fields and relationships.
Understand Write Limitations
What can and can’t be done with Groups (and other resources).