Memberships
A membership links a member (a user or a team) to a parent (a project, portfolio, goal, custom type, or custom field) at an access level. This is how you answer “who is on this project?”, check an assignment is sane before making it, or add someone during onboarding.
cyber-asana membership list --parent-gid <project-gid>cyber-asana membership list --parent-gid <project-gid> --member-gid <user-gid>cyber-asana membership list --member-gid <team-gid> --resource-subtype project_membershipcyber-asana membership get <gid>cyber-asana membership create --parent-gid <project-gid> --member-gid <user-gid> --access-level editorcyber-asana membership update <gid> --access-level viewercyber-asana membership delete <gid>| Command | Arguments | Options |
|---|---|---|
list |
— | --parent-gid <gid> / --parent <gid>, --member-gid <gid> / --member <gid>, --resource-subtype <subtype>, pagination |
get |
<gid> |
— |
create |
— | --parent-gid <gid>, --member-gid <gid>, --access-level <level> |
update |
<gid> |
--access-level <level> (required) |
delete |
<gid> |
— |
list needs --parent-gid, or --member-gid together with --resource-subtype — Asana
rejects any other combination, so the CLI reports it as a usage error before calling the
API. --member-gid on its own narrows a parent’s memberships to one person or team.
Access levels depend on the parent: projects and goals accept admin, editor,
commenter, and viewer; portfolios accept admin, editor, and viewer. The value is
passed through to Asana, which rejects a level the parent does not support.
update only changes the access level — that is the whole of what Asana’s membership
update does. Broader permission management lives in
Roles, which is not wrapped.
delete is idempotent: deleting a membership that is already gone succeeds and reports
already_absent.
Related
Section titled “Related”- Find the user or team GID to pass as
--member-gid: People & places - Team membership (who is in a team) is a separate Asana resource and is not wrapped — see API coverage