team.user.update
Updates a team member’s status and/or role. The target is identified by either email or team_user_id — when both are provided, team_user_id wins. At least one of status / role should be provided. When status becomes INACTIVE or REMOVED and the user has profiles delegated to them, those profiles are reclaimed and listed in cascade_affected[]. status=REMOVED cannot be combined with a role update. Promoting a TEAM_MEMBER_ROLE_GUEST member into a paid role triggers a Stripe seat-quantity bump; a downstream Stripe failure surfaces as internal.
Authorizations
Body
Email of the team member to update. Either email or team_user_id must be provided. Must be a valid RFC 5321 address when present.
254"user@example.com"
Team member ID (stable identifier). Either email or team_user_id must be provided; when both are supplied, team_user_id wins. Recommended for delegated profiles, whose email is rewritten to a synthetic delegate-<id>@... address.
64"123456"
New status. Accepts USER_STATUS_ACTIVE, USER_STATUS_INACTIVE, or USER_STATUS_REMOVED. REMOVED is irreversible and triggers the same cascade as team.user.remove.
USER_STATUS_ACTIVE, USER_STATUS_INACTIVE, USER_STATUS_REMOVED New role. Accepts TEAM_MEMBER_ROLE_SUPER_ADMIN, TEAM_MEMBER_ROLE_ADMIN, TEAM_MEMBER_ROLE_MEMBER, or TEAM_MEMBER_ROLE_GUEST. Delegated (or formerly-delegated) profiles can be promoted freely — TEAM_MEMBER_ROLE_OWNER is the only role the API cannot set (transfer ownership in the UI). Promoting GUEST → MEMBER/ADMIN/SUPER_ADMIN calls Stripe to bump the team's seat quantity; the reverse direction requires no Stripe call.
TEAM_MEMBER_ROLE_OWNER, TEAM_MEMBER_ROLE_ADMIN, TEAM_MEMBER_ROLE_MEMBER, TEAM_MEMBER_ROLE_SUPER_ADMIN, TEAM_MEMBER_ROLE_GUEST