{"record":{"id":"102296da81ed1523","repo":"BerriAI/litellm","slug":"the-op-type-operation-on-base-requires-a-valu","errorCode":null,"errorMessage":"The {op_type} operation on {base} requires a 'value' member (RFC 7644 Section 3.5.2)","messagePattern":"The (.+?) operation on (.+?) requires a 'value' member \\(RFC 7644 Section 3\\.5\\.2\\)","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"litellm/proxy/management_endpoints/scim/scim_v2.py","lineNumber":1754,"sourceCode":"    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:\n        raise HTTPException(\n            status_code=400,\n            detail={\"error\": f\"Invalid value for {base}: expected a list of objects with a 'value' sub-attribute\"},\n        )\n\n    dumped: Final = [attr.model_dump(exclude_none=True) for attr in attrs]\n    existing: Final = metadata.get(metadata_key)\n    if op_type == \"add\" and isinstance(existing, list):\n        metadata[metadata_key] = existing + dumped\n        return","sourceCodeStart":1736,"sourceCodeEnd":1772,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/scim/scim_v2.py#L1736-L1772","documentation":"For add/replace on a multi-valued attribute, RFC 7644 requires a 'value' member in the operation; when the op payload's value is None the update cannot proceed and a 400 naming the op_type and attribute is raised.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/scim/scim_v2.py:1754 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Include a 'value' member in the PATCH operation per RFC 7644 Section 3.5.2."],"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"}