BerriAI/litellm · error · Exception
Team={team_object.team_id} is blocked. Update via `/team/unb
Error message
Team={team_object.team_id} is blocked. Update via `/team/unblock` if you're an admin. What it means
Raised in the first step of common_checks when the authenticated key resolves to a team whose row has blocked=True. Blocking a team is an admin action (spend freeze, policy); the message directs admins to /team/unblock. The exception aborts the request before model-access or budget checks run.
Source
Thrown at litellm/proxy/auth/auth_checks.py:739
from litellm.proxy.proxy_server import prisma_client, user_api_key_cache
_model: Final[str | list[str] | None] = get_model_from_request(
request_data=request_body,
route=route,
request_headers=_safe_get_request_headers(request=request),
request_query_params=_safe_get_request_query_params(request=request),
llm_router=llm_router,
request=request,
)
skip_all_budget_checks: Final = skip_budget_checks or (
route not in BUDGET_ENFORCED_SIDE_EFFECT_ROUTES
and (route in MODEL_DISCOVERY_ROUTES or not RouteChecks.is_llm_api_route(route=route))
)
# 1. If team is blocked
if team_object is not None and team_object.blocked is True:
raise Exception(f"Team={team_object.team_id} is blocked. Update via `/team/unblock` if you're an admin.")
# 2. If team can call model (or key's access_group_ids grant it)
if _model and team_object:
with tracer.trace("litellm.proxy.auth.common_checks.can_team_access_model"):
try:
await can_team_access_model(
model=_model,
team_object=team_object,
llm_router=llm_router,
team_model_aliases=(valid_token.team_model_aliases if valid_token else None),
)
except ProxyException as team_denial:
if team_denial.type != ProxyErrorTypes.team_model_access_denied:
raise
if not await _key_access_group_grants_model(
model=_model,
valid_token=valid_token,
team_object=team_object,View on GitHub (pinned to 77b7c6c40c)
Solutions
- Ask a proxy admin to unblock: POST /team/unblock with the team_id
- Rotate the client to a key on an active team
- Verify which team the key belongs to via /key/info before escalating
Example fix
# admin unblocks the team
curl -X POST http://localhost:4000/team/unblock \
-H "Authorization: Bearer sk-admin" \
-d '{"team_id": "my-team"}' Defensive patterns
Strategy: try-catch
Try / catch
try:
resp = client.chat.completions.create(model="gpt-4o", messages=messages)
except Exception as e:
if "is blocked" in str(e) and "Team=" in str(e):
raise RuntimeError("team blocked by admin - rotate to an active team key") from e
raise Prevention
- When blocking a team, disable its keys in the same operation
- Automate key rotation so pipelines can move to another team quickly
- Alert on repeated blocked-team errors to catch disabled workspaces
When it happens
Trigger: Any LLM call made with a key whose team_id points at a team row with blocked=true. Note budget checks may be skipped for discovery routes, but the blocked-team check still runs for every request.
Common situations: A team exceeded budget and an admin blocked it while automated pipelines keep using team keys; a team was disabled during reorganization but its keys were never rotated.
Related errors
- Project={project_object.project_id} is blocked. Update via `
- Invalid proxy server token passed. valid_token=None.
- No DB Connected. See - https://docs.litellm.ai/docs/proxy/vi
- LLM Router not initialized. Ensure models added to proxy.
- DB not connected. This endpoint needs a database; set DATABA
AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18).
Data as JSON: /api/errors/428053f0bde62768.
Report an issue: GitHub.