BerriAI/litellm · error · HTTPException

The {op_type} operation on {base} requires a 'value' member

Error message

The {op_type} operation on {base} requires a 'value' member (RFC 7644 Section 3.5.2)

What it means

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.

Source

Thrown at litellm/proxy/management_endpoints/scim/scim_v2.py:1754

    return path.split("[", 1)[0].split(".", 1)[0]


def _handle_multi_valued_attribute_update(path: str, op_type: str, value: object, metadata: dict[str, object]) -> None:
    """Handle add/replace/remove for the entitlements and roles multi-valued attributes."""
    base: Final = _multi_valued_attribute_base(path)
    metadata_key: Final = SCIM_MULTI_VALUED_ATTRIBUTE_METADATA_KEYS[base]
    if path != base:
        raise HTTPException(
            status_code=400,
            detail={"error": f"Filtered or sub-attribute paths are not supported for {base}; PATCH the full attribute"},
        )

    if op_type == "remove":
        metadata.pop(metadata_key, None)
        return

    if value is None:
        raise HTTPException(
            status_code=400,
            detail={"error": f"The {op_type} operation on {base} requires a 'value' member (RFC 7644 Section 3.5.2)"},
        )

    normalized: Final = value if isinstance(value, list) else [value]
    try:
        attrs: Final = SCIM_MULTI_VALUED_LIST_ADAPTER.validate_python(normalized)
    except ValidationError:
        raise HTTPException(
            status_code=400,
            detail={"error": f"Invalid value for {base}: expected a list of objects with a 'value' sub-attribute"},
        )

    dumped: Final = [attr.model_dump(exclude_none=True) for attr in attrs]
    existing: Final = metadata.get(metadata_key)
    if op_type == "add" and isinstance(existing, list):
        metadata[metadata_key] = existing + dumped
        return

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Include a 'value' member in the PATCH operation per RFC 7644 Section 3.5.2.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/proxy/management_endpoints/scim/scim_v2.py:1754 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/102296da81ed1523. Report an issue: GitHub.