{"record":{"id":"db9f90e5b81fb4ba","repo":"BerriAI/litellm","slug":"key-is-not-in-a-team-search-tools-cannot-be-assig","errorCode":null,"errorMessage":"Key is not in a team. search_tools cannot be assigned to personal keys by non-admin callers. Disallowed search tools: {sorted(requested)}.","messagePattern":"Key is not in a team\\. search_tools cannot be assigned to personal keys by non-admin callers\\. Disallowed search tools: (.+?)\\.","errorType":"http","errorClass":"HTTPException","httpStatus":403,"severity":"error","filePath":"litellm/proxy/management_helpers/object_permission_utils.py","lineNumber":764,"sourceCode":"\n\nasync def validate_key_search_tools_against_team(\n    object_permission: ObjectPermissionDict | None,\n    team_obj: Optional[\"LiteLLM_TeamTableCachedObj\"],\n    is_proxy_admin: bool = False,\n) -> None:\n    \"\"\"\n    Validate key object_permission.search_tools is a subset of the team's allowlist.\n\n    Empty team allowlist means no restriction at team layer (skip).\n    Non-admin callers cannot assign search_tools to a personal (no team) key.\n    \"\"\"\n    requested: Final = _extract_requested_search_tools(object_permission)\n    if not requested:\n        return\n\n    if team_obj is None and not is_proxy_admin:\n        raise HTTPException(\n            status_code=status.HTTP_403_FORBIDDEN,\n            detail={\n                \"error\": (\n                    \"Key is not in a team. search_tools cannot be assigned to \"\n                    \"personal keys by non-admin callers. Disallowed search tools: \"\n                    f\"{sorted(requested)}.\"\n                )\n            },\n        )\n\n    team_tools: list[str] = []\n    if team_obj is not None and team_obj.object_permission is not None:\n        st: Final = team_obj.object_permission.search_tools\n        if st:\n            team_tools = list(st)\n\n    if not team_tools:\n        return","sourceCodeStart":746,"sourceCodeEnd":782,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_helpers/object_permission_utils.py#L746-L782","documentation":"HTTPException(403) from validate_key_search_tools_against_team: a non-admin caller tried to assign search_tools to a personal (teamless) key. Search-tool access on personal keys cannot be granted by non-admin callers; the message lists the disallowed search tools.","triggerScenarios":"Thrown at litellm/proxy/management_helpers/object_permission_utils.py:764 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Assign the key to a team first, remove the requested search tools, or call as a proxy admin."],"exampleFix":null,"handlingStrategy":"validation","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-14T00:17:10.932Z"}