BerriAI/litellm · error · HTTPException

Group already exists with ID: {team_id}

Error message

Group already exists with ID: {team_id}

What it means

SCIM POST /Groups: the generated or supplied team_id (group.id or externalId) already maps to an existing LiteLLM team, so creating a duplicate group is refused with a conflict HTTPException. At-fault input is a group id colliding with an existing team.

Source

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

):
    """
    Create a group according to SCIM v2 protocol
    """
    verbose_proxy_logger.debug(
        "SCIM CREATE GROUP request: %s",
        group.model_dump(),
    )
    try:
        prisma_client: Final = await _get_prisma_client_or_raise_exception()

        # Generate ID if not provided
        team_id: Final = group.id or group.externalId or str(uuid.uuid4())

        # Check if team already exists
        existing_team: Final = await _table(TeamRepository(prisma_client)).find_unique(where={"team_id": team_id})

        if existing_team:
            raise HTTPException(
                status_code=409,
                detail={"error": f"Group already exists with ID: {team_id}"},
            )

        # Extract and validate group members (all users must exist)
        member_result: Final = await _extract_group_member_ids(group)
        members_with_roles = [Member(user_id=member_id, role="user") for member_id in member_result.all_member_ids]

        # Create team in database
        created_team: Final = await new_team(
            data=NewTeamRequest(
                team_id=team_id,
                team_alias=group.displayName,
                members_with_roles=members_with_roles,
                metadata={SCIM_MANAGED_TEAM_METADATA_KEY: True},
            ),
            http_request=Request(scope={"type": "http", "path": "/scim/v2/Groups"}),
            user_api_key_dict=UserAPIKeyAuth(user_role=LitellmUserRoles.PROXY_ADMIN),

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Use a different group ID, or update the existing group via PATCH /Groups/{id}.
Defensive patterns

Strategy: validation

When it happens

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