BerriAI/litellm · error · HTTPException

max_budget ({data.max_budget}) must be strictly greater than

Error message

max_budget ({data.max_budget}) must be strictly greater than soft_budget ({soft_budget_to_check})

What it means

Error "max_budget ({data.max_budget}) must be strictly greater than soft_budget ({soft_budget_to_check})" thrown in BerriAI/litellm.

Source

Thrown at litellm/proxy/management_endpoints/team_endpoints.py:2026

        _check_passthrough_routes_caller_permission(data, user_api_key_dict, entity="team")

        if data.soft_budget is not None:
            max_budget_to_check = data.max_budget if data.max_budget is not None else existing_team_row.max_budget
            if max_budget_to_check is not None:
                if data.soft_budget >= max_budget_to_check:
                    raise HTTPException(
                        status_code=400,
                        detail={
                            "error": f"soft_budget ({data.soft_budget}) must be strictly lower than max_budget ({max_budget_to_check})"
                        },
                    )

        if data.max_budget is not None:
            existing_soft_budget: Final[object] = _as_object(getattr(existing_team_row, "soft_budget", None))
            soft_budget_to_check: Final = data.soft_budget if data.soft_budget is not None else existing_soft_budget
            if soft_budget_to_check is not None and isinstance(soft_budget_to_check, (int, float)):
                if data.max_budget <= soft_budget_to_check:
                    raise HTTPException(
                        status_code=400,
                        detail={
                            "error": f"max_budget ({data.max_budget}) must be strictly greater than soft_budget ({soft_budget_to_check})"
                        },
                    )

        if data.organization_id is not None and len(data.organization_id) > 0:  # allow unsetting the organization_id
            # If the caller is relocating the team to a different org, they
            # must also be PROXY_ADMIN or an org-admin of the DESTINATION org.
            # _verify_team_access above only checked the team's CURRENT org,
            # so without this gate an org-admin could hand their team to any
            # other org (or capture a team from another org they once
            # administered into a new destination).
            current_org_id: Final = getattr(existing_team_row, "organization_id", None)
            if (
                data.organization_id != current_org_id
                and user_api_key_dict.user_role != LitellmUserRoles.PROXY_ADMIN.value
            ):

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Set max_budget to a value strictly greater than soft_budget, or lower soft_budget.

When it happens

Trigger: Thrown at litellm/proxy/management_endpoints/team_endpoints.py:2026 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/cb77362737124380. Report an issue: GitHub.