{"record":{"id":"278b8e37c2ee48c1","repo":"BerriAI/litellm","slug":"available-team-self-join-can-only-add-the-caller","errorCode":null,"errorMessage":"Available-team self-join can only add the caller (user_id must match the authenticated user's user_id).","messagePattern":"Available-team self-join can only add the caller \\(user_id must match the authenticated user's user_id\\)\\.","errorType":"http","errorClass":"HTTPException","httpStatus":403,"severity":"error","filePath":"litellm/proxy/management_endpoints/team_endpoints.py","lineNumber":2546,"sourceCode":"    # Available-team self-join: caller may add only themselves, only as a\n    # standard user.  Enforce that here so the bypass cannot be used as a\n    # privilege-escalation or cross-user-injection primitive.\n    members: Final = data.member if isinstance(data.member, list) else [data.member]\n    caller_user_id: Final = getattr(user_api_key_dict, \"user_id\", None)\n    for member in members:\n        if getattr(member, \"role\", \"user\") != \"user\":\n            raise HTTPException(\n                status_code=403,\n                detail={\n                    \"error\": (\n                        \"Available-team self-join cannot assign 'admin' role. \"\n                        \"Only proxy/team/org admins can add admins to a team.\"\n                    )\n                },\n            )\n        member_user_id = getattr(member, \"user_id\", None)\n        if not caller_user_id or not member_user_id or member_user_id != caller_user_id:\n            raise HTTPException(\n                status_code=403,\n                detail={\n                    \"error\": (\n                        \"Available-team self-join can only add the caller \"\n                        \"(user_id must match the authenticated user's user_id).\"\n                    )\n                },\n            )\n\n\nasync def _process_team_members(\n    data: TeamMemberAddRequest,\n    complete_team_data: LiteLLM_TeamTable,\n    prisma_client: PrismaClient,\n    user_api_key_dict: UserAPIKeyAuth,\n    litellm_proxy_admin_name: str,\n) -> tuple[list[LiteLLM_UserTable], list[LiteLLM_TeamMembership]]:\n    \"\"\"Process and add new team members.\"\"\"","sourceCodeStart":2528,"sourceCodeEnd":2564,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/team_endpoints.py#L2528-L2564","documentation":"Error \"Available-team self-join can only add the caller (user_id must match the authenticated user's user_id).\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/team_endpoints.py:2546 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set member user_id to your own authenticated user_id when self-joining an available team."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}