{"record":{"id":"706bd216d8a7222d","repo":"BerriAI/litellm","slug":"filtered-or-sub-attribute-paths-are-not-supported","errorCode":null,"errorMessage":"Filtered or sub-attribute paths are not supported for {base}; PATCH the full attribute","messagePattern":"Filtered or sub-attribute paths are not supported for (.+?); PATCH the full attribute","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"litellm/proxy/management_endpoints/scim/scim_v2.py","lineNumber":1744,"sourceCode":"    elif op_type == \"add\":\n        teams_set.update(group_values)\n    elif op_type == \"remove\":\n        for gid in group_values:\n            teams_set.discard(gid)\n    return None\n\n\ndef _multi_valued_attribute_base(path: str) -> str:\n    \"\"\"The attribute name a SCIM path targets, stripped of any value filter or sub-attribute.\"\"\"\n    return path.split(\"[\", 1)[0].split(\".\", 1)[0]\n\n\ndef _handle_multi_valued_attribute_update(path: str, op_type: str, value: object, metadata: dict[str, object]) -> None:\n    \"\"\"Handle add/replace/remove for the entitlements and roles multi-valued attributes.\"\"\"\n    base: Final = _multi_valued_attribute_base(path)\n    metadata_key: Final = SCIM_MULTI_VALUED_ATTRIBUTE_METADATA_KEYS[base]\n    if path != base:\n        raise HTTPException(\n            status_code=400,\n            detail={\"error\": f\"Filtered or sub-attribute paths are not supported for {base}; PATCH the full attribute\"},\n        )\n\n    if op_type == \"remove\":\n        metadata.pop(metadata_key, None)\n        return\n\n    if value is None:\n        raise HTTPException(\n            status_code=400,\n            detail={\"error\": f\"The {op_type} operation on {base} requires a 'value' member (RFC 7644 Section 3.5.2)\"},\n        )\n\n    normalized: Final = value if isinstance(value, list) else [value]\n    try:\n        attrs: Final = SCIM_MULTI_VALUED_LIST_ADAPTER.validate_python(normalized)\n    except ValidationError:","sourceCodeStart":1726,"sourceCodeEnd":1762,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/scim/scim_v2.py#L1726-L1762","documentation":"SCIM PATCH handling for multi-valued attributes (entitlements/roles): a path containing a value filter or sub-attribute (e.g. roles[0].value) is more granular than LiteLLM supports, so the whole PATCH is rejected with 400 and the client told to patch the full attribute.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/scim/scim_v2.py:1744 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["PATCH the full attribute instead of using filtered or sub-attribute paths."],"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-14T05:17:10.506Z"}