User Group
A named collection of people you can grant Droplet access to in one shot. The roster is the membership; visibility controls who sees the row.
A User Group is a named bag of people. Grant a Droplet to @engineering and you grant it to all 24 current members; add a 25th member later and they gain access without anyone re-saving. Distinct from Spaces — Spaces group content; Groups group people. Two system role groups (@drop-people-admins, @drop-library-admins) ship today; they carry systemRole: true, live pinned at the top of the Groups directory, and replace the older per-user admin flags.
The User Group object
Every User Group carries these attributes.
Attributes
/directory/groups/{slug} and as the @{slug} token when sharing Droplets. Globally unique, max 40 chars, lowercase alphanumeric + hyphens. Renames record a 30-day soft redirect so existing links keep resolving.href).PUBLIC — listed in the directory, roster visible to everyone. MEMBER_ONLY — listed in the directory, roster hidden from non-members (count still shown). ADMIN_ONLY — invisible to non-admins; only People Admins can navigate to it. System role groups are pinned to ADMIN_ONLY.true, this Group is a curated system role (@drop-people-admins or @drop-library-admins). System role groups cannot be deleted, cannot have their slug renamed, cannot leave ADMIN_ONLY, and the last-remaining member can only be removed by a site admin (User.isAdmin).MANUAL — created in Drop by a People Admin. SLACK_SYNCED — reserved for V2 (mirrored from a Slack usergroup); no synced groups exist today.@engineering Group links to the engineering Space). Pure cross-reference — no membership sync.null for MANUAL groups.More attributes+ Show 5− Hide
slug in API paths.S0123456). Unique-when-set. Today: always null.{
"id": "clxgrp2...",
"slug": "engineering",
"name": "Engineering",
"description": "The team building Drop and adjacent tools.",
"tags": [
"team"
],
"source": "MANUAL",
"visibility": "PUBLIC",
"systemRole": false,
"linkedSpaceId": null,
"slackHandle": null,
"slackId": null,
"createdById": "usr_alex",
"createdAt": "2026-05-20T10:00:00.000Z",
"updatedAt": "2026-05-28T09:00:00.000Z"
}Methods
Endpoints to operate on a User Group. The example switches between curl, drop CLI, and MCP via the dropdown — your choice persists across the page.
List User Groups
Return User Groups visible to the caller. Non-admins never see ADMIN_ONLY rows (the visibility filter strips them server-side). Each row carries systemRole so clients can render the pinned "System Roles" section. Supports ?q= (substring across name/slug/description + exact tag) and ?tag= (exact tag, case-folded).
Parameters
drop groups list --q engineering[
{
"id": "clxgrp2...",
"slug": "engineering",
"name": "Engineering",
"descriptionPreview": "The team building Drop and adjacent tools.",
"memberCount": 24,
"tags": [
"team"
],
"source": "MANUAL",
"visibility": "PUBLIC",
"systemRole": false
}
]Create a User Group
People Admin only. Create a new Group. Slug must be unique across all Groups. If the slug collides with an existing Space slug, the response includes a non-blocking collisionWarning so the UI can offer to link the two as a cross-reference.
Parameters
drop groups create --name Engineering --slug engineering --description "The team building Drop and adjacent tools." --visibility PUBLIC{
"group": {
"id": "clxgrp2...",
"slug": "engineering",
"name": "Engineering",
"descriptionPreview": "The team building Drop and adjacent tools.",
"memberCount": 0,
"tags": [],
"source": "MANUAL",
"visibility": "PUBLIC",
"systemRole": false,
"description": "The team building Drop and adjacent tools.",
"descriptionHtml": "<p>The team building Drop and adjacent tools.</p>",
"linkedSpace": null,
"slackHandle": null,
"slackId": null,
"createdAt": "2026-06-03T10:00:00.000Z",
"updatedAt": "2026-06-03T10:00:00.000Z",
"createdBy": {
"id": "usr_alex",
"email": "alex@himarley.com",
"name": "Alex Chen"
}
},
"collisionWarning": null
}Retrieve a User Group
Return full Group detail — metadata, member roster, Droplet grants, linked Space, and a systemRole flag. ADMIN_ONLY groups return 404 to non-admins; MEMBER_ONLY groups return an empty roster to non-members. Renamed slugs return 301 with Location pointing at the current slug (30-day window).
Parameters
drop groups get engineering{
"group": {
"id": "clxgrp2...",
"slug": "engineering",
"name": "Engineering",
"descriptionPreview": "The team building Drop and adjacent tools.",
"memberCount": 24,
"tags": [
"team"
],
"source": "MANUAL",
"visibility": "PUBLIC",
"systemRole": false,
"description": "The team building Drop and adjacent tools.",
"descriptionHtml": "<p>The team building Drop and adjacent tools.</p>",
"linkedSpace": null,
"slackHandle": null,
"slackId": null,
"createdAt": "2026-05-20T10:00:00.000Z",
"updatedAt": "2026-05-28T09:00:00.000Z",
"createdBy": {
"id": "usr_alex",
"email": "alex@himarley.com",
"name": "Alex Chen"
}
},
"members": [
{
"userId": "usr_alex",
"email": "alex@himarley.com",
"name": "Alex Chen",
"title": "Engineering",
"addedAt": "2026-05-20T10:00:00.000Z",
"addedBy": "usr_alex"
}
],
"activity": [],
"dropletGrants": [
{
"slug": "team-roadmap",
"name": "Team Roadmap",
"sharedAt": "2026-05-22T12:00:00.000Z"
}
],
"isPeopleAdmin": false
}Update a User Group
People Admin only. Patch name, slug (via newSlug), description, tags, visibility, or linkedSpaceId. Slug renames park the old slug as a 30-day soft redirect. System role groups (systemRole: true) reject visibility changes off ADMIN_ONLY (400 SYSTEM_ROLE_ADMIN_ONLY) and reject slug renames outright (400 SYSTEM_ROLE_SLUG_LOCKED); name / description / tags remain editable.
Parameters
drop groups update engineering --description "The team building Drop." --visibility MEMBER_ONLY{
"id": "clxgrp2...",
"slug": "engineering",
"name": "Engineering",
"descriptionPreview": "The team building Drop.",
"memberCount": 24,
"tags": [
"team"
],
"source": "MANUAL",
"visibility": "MEMBER_ONLY",
"systemRole": false,
"description": "The team building Drop.",
"descriptionHtml": "<p>The team building Drop.</p>",
"linkedSpace": null,
"slackHandle": null,
"slackId": null,
"createdAt": "2026-05-20T10:00:00.000Z",
"updatedAt": "2026-06-03T11:00:00.000Z",
"createdBy": {
"id": "usr_alex",
"email": "alex@himarley.com",
"name": "Alex Chen"
}
}Delete a User Group
People Admin only. Before the Group is dropped, every AppAccess row that grants via this Group is rewritten to individual email grants for the Group's current members — access is never silently revoked. Returns a summary of the expansion. System role groups reject with 403 SYSTEM_ROLE_PROTECTED.
Parameters
drop groups delete engineering{
"grantsExpanded": 2,
"dropletSlugs": [
"team-roadmap",
"engineering-handbook"
]
}List members
Return every member of the Group. For MEMBER_ONLY groups, non-members get an empty roster; admins always see everything.
Parameters
drop groups members list engineering[
{
"userId": "usr_alex",
"email": "alex@himarley.com",
"name": "Alex Chen",
"title": "Engineering",
"addedAt": "2026-05-20T10:00:00.000Z",
"addedBy": "usr_alex"
}
]Add member(s)
People Admin only (or member of a system role group when curating it). Bulk-add members. Idempotent — already-members and unknown ids are silently skipped. New members immediately gain access to every Droplet shared with this Group (CloudFront allowlists re-synced fire-and-forget).
Parameters
drop groups members add engineering --user-ids usr_kai,usr_jane{
"added": 2,
"members": [
{
"userId": "usr_alex",
"email": "alex@himarley.com",
"name": "Alex Chen",
"title": "Engineering",
"addedAt": "2026-05-20T10:00:00.000Z",
"addedBy": "usr_alex"
},
{
"userId": "usr_kai",
"email": "kai@himarley.com",
"name": "Kai Mitchell",
"title": null,
"addedAt": "2026-05-31T09:15:00.000Z",
"addedBy": "usr_alex"
},
{
"userId": "usr_jane",
"email": "jane@himarley.com",
"name": "Jane Doe",
"title": null,
"addedAt": "2026-05-31T09:15:00.000Z",
"addedBy": "usr_alex"
}
]
}Remove member
People Admin only. Remove a single member. For system role groups, a last-admin guard runs inside the same transaction as the delete + audit: removing the only remaining member rejects with 400 LAST_SYSTEM_ROLE_MEMBER. Site admins (User.isAdmin) bypass the guard.
Parameters
drop groups members remove engineering usr_kai{
"ok": true
}Bootstrap a Space
Convenience: create a new Space seeded from this Group's current roster, then set linkedGroupId / linkedSpaceId on both sides so the cross-reference is in place. People Admin only. No ongoing membership sync — the seed is one-shot.
Parameters
drop groups bootstrap-space engineering{
"spaceSlug": "engineering",
"memberCount": 24
}