BerriAI/litellm · error · HTTPException

Invalid value for {base}: expected a list of objects with a

Error message

Invalid value for {base}: expected a list of objects with a 'value' sub-attribute

What it means

The 'value' member is present but does not normalize into the expected list of objects with a 'value' sub-attribute (adapter validation fails). The PATCH op is rejected with 400; at-fault input is a malformed multi-valued attribute value.

Source

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

            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
    metadata[metadata_key] = dumped


def _handle_generic_metadata(path: str, op_type: str, value: object, metadata: dict[str, object]) -> None:
    """Handle generic metadata operations for unknown paths."""
    if op_type == "remove":
        metadata.pop(path, None)
    else:
        metadata[path] = value

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Send a list of objects each containing a 'value' sub-attribute for this attribute.
Defensive patterns

Strategy: validation

When it happens

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