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

FieldTypeRequiredDescription
idstringautoPrefixed ID: grp-{ulid}
namestringyesDisplay name — unique per tenant
typeenumyesteam | department | security | distribution | custom
descriptionstringnoFree-text description
ownerIdstringnoid of an owning Person
parentIdstringnoid of a parent Group (for nested groups)
memberCountnumberautoComputed count of direct members
tagsstring[]noFree-form tags
createdAtstringautoISO 8601 UTC
updatedAtstringautoISO 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')