BerriAI/litellm · error · HTTPException

Guardrail is not pending review (status={row.status})

Error message

Guardrail is not pending review (status={row.status})

What it means

State check in the guardrail approval flow: the submission's status is not pending_review (its actual status is embedded), so it cannot be approved — it was already approved, rejected, or deactivated.

Source

Thrown at litellm/proxy/guardrails/guardrail_endpoints.py:1014

    guardrail_id: str,
    user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth),
):
    """Approve a pending guardrail submission: set status to active and initialize in memory (admin only)."""
    from litellm.proxy.guardrails.guardrail_registry import IN_MEMORY_GUARDRAIL_HANDLER
    from litellm.proxy.proxy_server import prisma_client

    if user_api_key_dict.user_role != LitellmUserRoles.PROXY_ADMIN:
        raise HTTPException(status_code=403, detail="Admin access required")

    if prisma_client is None:
        raise HTTPException(status_code=500, detail="Prisma client not initialized")

    try:
        row: Final = await _guardrails_table(prisma_client).find_unique(where={"guardrail_id": guardrail_id})
        if row is None:
            raise HTTPException(status_code=404, detail="Guardrail submission not found")
        if row.status != "pending_review":
            raise HTTPException(
                status_code=400,
                detail=f"Guardrail is not pending review (status={row.status})",
            )

        now: Final = datetime.now(timezone.utc)
        await _guardrails_table(prisma_client).update(
            where={"guardrail_id": guardrail_id},
            data={"status": "active", "reviewed_at": now, "updated_at": now},
        )

        litellm_params: Final = _parse_json_field(row.litellm_params)
        guardrail_info: Final = _parse_json_field(row.guardrail_info)
        if not litellm_params:
            raise HTTPException(
                status_code=500,
                detail="Guardrail litellm_params is missing or invalid",
            )
        guardrail_dict: Final = {

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Only review submissions whose status is pending; check the current status first.

Example fix

Fetch the submission to confirm status=pending before approving/rejecting.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/proxy/guardrails/guardrail_endpoints.py:1014 when the library encounters an invalid state.

Common situations: The guardrail submission was already reviewed (approved/rejected).


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