skills/cli/umbraco-member/SKILL.md
Front-office member operations (login, profile, groups)
npx skillsauth add albanist/umbraco_cli umbraco-memberInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
PREREQUISITE: Read
../umbraco-shared/SKILL.mdfor auth, global flags, and security rules.
umbraco member <command> [flags]
| Command | Description |
|---------|-------------|
| member get <id> | Get a member by ID |
| member list | List members (paginated; use --filter for substring search) |
| member search <query> | Search members by username/email substring (shorthand for 'member list --filter') |
umbraco member get <id>
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| --fields | string | — | Limit response fields |
umbraco member list
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| --fields | string | — | Limit response fields (defaults to all; pass id,username,email,... for agent-friendly summaries) |
| --filter | string | — | Substring filter against member username/email |
| --first-n | int | 0 | Return only the first N items from item collections |
| --ids-only | bool | false | Return only item IDs for item collections |
| --skip | int | 0 | Skip count |
| --summarize | bool | false | Return only id/name/alias fields for item collections |
| --take | int | 0 | Take count (0 = server default) |
umbraco member search <query>
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| --fields | string | id,username,email,isApproved,isLockedOut,isTwoFactorEnabled,failedPasswordAttempts,groups | Limit response fields (default surfaces login-diagnosis fields; pass empty string for full payload) |
| --first-n | int | 0 | Return only the first N items from item collections |
| --ids-only | bool | false | Return only item IDs for item collections |
| --summarize | bool | false | Return only id/name/alias fields for item collections |
| --take | int | 0 | Maximum results |
Safety: Always use
--dry-runfirst. Remove the flag only after verifying the dry-run output.
| Command | Description |
|---------|-------------|
| member create | Create a member |
| member delete <id> | Permanently delete a member |
| member set-groups <id> | Replace or modify a member's group memberships |
| member update <id> | Update a member |
| member update-properties <id> | Update member custom property values (merges into values[] by alias) |
umbraco member create
POST /member. Use --print-template to see the accepted payload shape. The 'id' field is generated by the CLI if omitted.
Known API limitation (Umbraco 17.x): these fields appear on the GET response but are NOT accepted by POST /member — including them returns 2xx but the server value does not change:
These are managed by the auth subsystem (login flow / backoffice action), not by the create endpoint. They are omitted from --print-template for that reason.
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| --dry-run | bool | false | Print the planned request without executing |
| --json | string | — | Create payload as JSON |
| --print-template | bool | false | Print an annotated JSON skeleton; substitute placeholders before passing to --json |
Safe pattern:
# 1. Dry run first
umbraco member create --dry-run
# 2. Execute
umbraco member create
umbraco member delete <id>
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| --dry-run | bool | false | Print the planned request without executing |
| --force | bool | false | Confirm permanent deletion |
Safe pattern:
# 1. Dry run first
umbraco member delete <id> --dry-run
# 2. Execute
umbraco member delete <id>
umbraco member set-groups <id>
Mutates the member's groups[] array. Pick one mode:
--groups <guid,guid,…> Replace the member's groups with this exact set --add-groups <guid,guid,…> Append (idempotent — no PUT if all groups already present) --remove-groups <guid,guid,…> Remove (idempotent — no PUT if none of the groups are present)
Group GUIDs come from 'member-group list'. The PUT preserves every other field on the member.
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| --add-groups | string | — | Comma-separated group GUIDs to add (idempotent) |
| --dry-run | bool | false | Print the planned request without executing |
| --groups | string | — | Comma-separated group GUIDs; replaces the member's groups[] with this exact set |
| --remove-groups | string | — | Comma-separated group GUIDs to remove (idempotent) |
Safe pattern:
# 1. Dry run first
umbraco member set-groups <id> --dry-run
# 2. Execute
umbraco member set-groups <id>
umbraco member update <id>
Updates a member with the uniform CLI update contract:
--json full replacement; the server resets any field not mentioned --merge-json fetches the current member, deep-merges the patch, and PUTs the result; fields not mentioned are preserved
Before v0.4.0 --json silently behaved like --merge-json on this resource. Pass --merge-json for partial edits.
Known API limitation (Umbraco 17.x): the Management API's UpdateMemberRequestModel does NOT accept the following fields, even though they appear on the read model. The CLI rejects input that includes them up front — letting the request through would silently return 204 with the server value unchanged, producing a false-positive {"updated": true}:
These are managed by the auth subsystem (login flow / backoffice action), not by PUT /member/{id}.
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| --dry-run | bool | false | Print the planned request without executing |
| --json | string | — | Full replacement payload as JSON (fields not mentioned are reset by the server) |
| --merge-json | string | — | Partial JSON deep-merged into the current member before update (fields not mentioned are preserved) |
Safe pattern:
# 1. Dry run first
umbraco member update <id> --dry-run
# 2. Execute
umbraco member update <id>
umbraco member update-properties <id>
Accepts the same three input shapes as 'document update-properties': object {alias: value, ...}, array [{alias, value, culture?, segment?}, ...], or envelope {"values": [...]}. Merges into the member's existing values[] so untouched properties survive.
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| --dry-run | bool | false | Print the planned request without executing |
| --json | string | — | Properties payload as JSON (object / array / envelope) |
Safe pattern:
# 1. Dry run first
umbraco member update-properties <id> --dry-run
# 2. Execute
umbraco member update-properties <id>
# Browse subcommands
umbraco member --help
# Inspect a specific endpoint schema
umbraco schema member.<method>
tools
Umbraco Automate operations (event-driven workflow automation)
development
Webhook management (the Management API's outbound event notifications)
development
Backoffice user management (accounts, state, groups, API credentials)
tools
Backoffice user group management (permission sets)