BerriAI/litellm · error · HTTPException

Only proxy admins can delete organizations

Error message

Only proxy admins can delete organizations

What it means

Role guard on organization delete: deletion cascades — it removes the org's teams, memberships, and keys — so it is restricted to PROXY_ADMIN. Any other role is rejected with 401 before the cascade begins.

Source

Thrown at litellm/proxy/management_endpoints/organization_endpoints.py:926

    user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth),
):
    """
    Delete an organization

    # Parameters:

    - organization_ids: List[str] - The organization ids to delete.
    """
    from litellm.proxy.proxy_server import prisma_client

    if prisma_client is None:
        raise HTTPException(
            status_code=500,
            detail={"error": CommonProxyErrors.db_not_connected_error.value},
        )

    if user_api_key_dict.user_role != LitellmUserRoles.PROXY_ADMIN:
        raise HTTPException(
            status_code=401,
            detail={"error": "Only proxy admins can delete organizations"},
        )

    deleted_orgs: Final = []
    for organization_id in data.organization_ids:
        # delete all teams in the organization
        await _table(TeamRepository(prisma_client)).delete_many(where={"organization_id": organization_id})
        # delete all members in the organization
        await _table(OrganizationMembershipRepository(prisma_client)).delete_many(
            where={"organization_id": organization_id}
        )
        # delete all keys in the organization
        await _table(VerificationTokenRepository(prisma_client)).delete_many(where={"organization_id": organization_id})
        # delete the organization
        deleted_org = await _table(OrganizationRepository(prisma_client)).delete(
            where={"organization_id": organization_id},
            include={"members": True, "teams": True, "litellm_budget_table": True},

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Use a PROXY_ADMIN API key to delete organizations.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/proxy/management_endpoints/organization_endpoints.py:926 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/54de3d404a4bc50f. Report an issue: GitHub.