BerriAI/litellm · error · ValueError

Invalid role. Must be one of: {[role.value for role in ROLES

Error message

Invalid role. Must be one of: {[role.value for role in ROLES_WITHIN_ORG]}

What it means

Field validator on OrganizationMemberUpdateRequest.role: the requested role is not one of the org-scoped roles (org_admin, internal_user, internal_user_view_only), preventing escalation to proxy-level roles inside an org membership.

Source

Thrown at litellm/proxy/_types.py:4002

class OrganizationMemberDeleteRequest(MemberDeleteRequest):
    organization_id: str


ROLES_WITHIN_ORG: Final = [
    LitellmUserRoles.ORG_ADMIN,
    LitellmUserRoles.INTERNAL_USER,
    LitellmUserRoles.INTERNAL_USER_VIEW_ONLY,
]


class OrganizationMemberUpdateRequest(OrganizationMemberDeleteRequest):
    max_budget_in_organization: float | None = None
    role: LitellmUserRoles | None = None

    @field_validator("role")
    def validate_role(cls, value: LitellmUserRoles | None) -> LitellmUserRoles | None:
        if value is not None and value not in ROLES_WITHIN_ORG:
            raise ValueError(f"Invalid role. Must be one of: {[role.value for role in ROLES_WITHIN_ORG]}")
        return value


class OrganizationMemberUpdateResponse(MemberUpdateResponse):
    organization_id: str
    max_budget_in_organization: float


##########################################


class TeamAccessGroupModelGrant(LiteLLMPydanticObjectBase):
    access_group_id: str
    access_group_name: str
    models: tuple[str, ...]


class TeamInfoResponseObjectTeamTable(LiteLLM_TeamTable):

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Use one of the listed valid org roles.

Example fix

role='org_admin'
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/proxy/_types.py:4002 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/7abcb21e2a19b464. Report an issue: GitHub.