Groups
The Groups domain stores Group entities: teams, departments, distribution lists, security groups, and any logical collection of people. Groups support nested membership — a group can contain both people and other groups.
Group Schema
| Field | Type | Required | Description |
|---|---|---|---|
id | string | auto | Prefixed ID: grp-{ulid} |
name | string | yes | Display name — unique per tenant |
type | enum | yes | team | department | security | distribution | custom |
description | string | no | Free-text description |
ownerId | string | no | id of an owning Person |
parentId | string | no | id of a parent Group (for nested groups) |
memberCount | number | auto | Computed count of direct members |
tags | string[] | no | Free-form tags |
createdAt | string | auto | ISO 8601 UTC |
updatedAt | string | auto | ISO 8601 UTC |
List & Get Groups
import { CpodClient } from '@cpod/sdk'
const sdk = CpodClient.fromEnv()
// List all security groups
const result = await sdk.groups.list({ type: 'security', limit: 50 })
// Get a single group with its members expanded
const group = await sdk.groups.get('grp-abc123', { expand: ['members'] })
// group.members → Array of { id, type, entity: Person | Group }Create & Update a Group
const group = await sdk.groups.create({
name: 'Platform Engineering',
type: 'team',
description: 'Responsible for internal developer tooling and infrastructure.',
ownerId: 'per-abc123',
})
await sdk.groups.update('grp-abc123', { description: 'Platform & SRE team.' })Manage Membership
Add and remove members individually, or replace the entire membership set in one call.
// Add members (people or nested groups)
await sdk.groups.addMembers('grp-abc123', [
{ id: 'per-111', type: 'person' },
{ id: 'per-222', type: 'person' },
{ id: 'grp-child', type: 'group' },
])
// Remove a member
await sdk.groups.removeMembers('grp-abc123', ['per-111'])
// Replace all members atomically
await sdk.groups.setMembers('grp-abc123', [
{ id: 'per-333', type: 'person' },
{ id: 'per-444', type: 'person' },
])
// List current members (paginated)
const members = await sdk.groups.listMembers('grp-abc123', { limit: 100 })
for (const m of members.items) {
console.log(m.id, m.type)
}Delete a Group
⚠️
Deleting a group does not delete its members. Member Person and Group entities are unaffected. Only the group entity itself and its membership edges are removed.
await sdk.groups.delete('grp-abc123')