BerriAI/litellm · error · ValueError

Singulr: api_base {self.singulr_api_base} uses plain HTTP fo

Error message

Singulr: api_base {self.singulr_api_base} uses plain HTTP for a non-local endpoint. Guardrail payloads contain the API token, full conversation content, and the guardrail decision, so this endpoint must use HTTPS.

What it means

Error "Singulr: api_base {self.singulr_api_base} uses plain HTTP for a non-local endpoint. Guardrail payloads contain the API token, full conversation content, and the guardrail decision, so this endpoint must use HTTPS." thrown in BerriAI/litellm.

Source

Thrown at litellm/proxy/guardrails/guardrail_hooks/singulr/singulr.py:57

        self,
        singulr_api_key: str | None = None,
        singulr_api_base: str | None = None,
        singulr_application_id: str | None = None,
        singulr_guardrail_id: str | None = None,
        block_on_error: bool | None = None,
        timeout: float | None = None,
        **kwargs: Any,
    ) -> None:
        self.singulr_api_key = singulr_api_key or os.environ.get("SINGULR_API_KEY")
        self.singulr_api_base = (singulr_api_base or os.environ.get("SINGULR_API_BASE") or _DEFAULT_API_BASE).rstrip(
            "/"
        )
        parsed: Final = urlparse(self.singulr_api_base)
        if parsed.scheme == "http" and parsed.hostname not in (
            "localhost",
            "127.0.0.1",
        ):
            raise ValueError(
                f"Singulr: api_base {self.singulr_api_base} uses plain HTTP for a "
                "non-local endpoint. Guardrail payloads contain the API token, full "
                "conversation content, and the guardrail decision, so this endpoint "
                "must use HTTPS."
            )

        self.singulr_application_id = singulr_application_id or os.environ.get("SINGULR_ENFORCEMENT_ENTITY_ID")
        self.singulr_guardrail_id = singulr_guardrail_id or os.environ.get("SINGULR_GUARDRAIL_ID")

        if block_on_error is None:
            env: Final = os.environ.get("SINGULR_BLOCK_ON_ERROR", "true")
            self.block_on_error = env.lower() in ("true", "1", "yes")
        else:
            self.block_on_error = block_on_error

        self.timeout = _DEFAULT_TIMEOUT if timeout is None else timeout

        self.async_handler = get_async_httpx_client(

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Change api_base to an https:// URL for the Singulr endpoint.
  2. Only use plain HTTP for localhost endpoints.

When it happens

Trigger: Thrown at litellm/proxy/guardrails/guardrail_hooks/singulr/singulr.py:57 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/f6d740a8b86d90f6. Report an issue: GitHub.