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

  1. Ask a proxy admin to unblock: POST /team/unblock with the team_id
  2. Rotate the client to a key on an active team
  3. 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 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


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/428053f0bde62768. Report an issue: GitHub.