From f6a05da3b198f61410735e09ac92a3f09d57c1cd Mon Sep 17 00:00:00 2001 From: Andrii Butko Date: Wed, 24 Jun 2026 14:41:08 +0200 Subject: [PATCH] feat(proxy): accept spend on /team/member_update request/response models --- litellm/proxy/_types.py | 5 +++++ .../test_litellm/proxy/test_team_member_update.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index be5d7a2db78..cd2e2c9382e 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -3684,6 +3684,10 @@ class TeamMemberUpdateRequest(TeamMemberDeleteRequest): default=None, description="List of models this team member can access. Pass an empty list to remove per-member model restrictions.", ) + spend: Optional[float] = Field( + default=None, + description="Reset this team member's accrued spend to the given value (admin only). Typically 0 to clear usage.", + ) class TeamMemberUpdateResponse(MemberUpdateResponse): @@ -3693,6 +3697,7 @@ class TeamMemberUpdateResponse(MemberUpdateResponse): rpm_limit: Optional[int] = None budget_duration: Optional[str] = None allowed_models: Optional[List[str]] = None + spend: Optional[float] = None class TeamModelAddRequest(BaseModel): diff --git a/tests/test_litellm/proxy/test_team_member_update.py b/tests/test_litellm/proxy/test_team_member_update.py index 352c68d491c..1a11deb6403 100644 --- a/tests/test_litellm/proxy/test_team_member_update.py +++ b/tests/test_litellm/proxy/test_team_member_update.py @@ -17,6 +17,20 @@ from litellm.proxy._types import ( from litellm.proxy.management_endpoints.team_endpoints import team_member_update +def test_team_member_update_models_accept_spend(): + """The request/response models must carry an optional `spend` so an admin + can reset a team member's accrued spend via /team/member_update.""" + from litellm.proxy._types import TeamMemberUpdateResponse + + req = TeamMemberUpdateRequest(team_id="t", user_id="u", spend=0.0) + assert req.spend == 0.0 + + resp = TeamMemberUpdateResponse( + team_id="t", user_id="u", user_email=None, spend=0.0 + ) + assert resp.spend == 0.0 + + @pytest.mark.asyncio async def test_ateam_member_update_admin_requires_premium(monkeypatch): # Arrange: patch prisma_client and premium_user