{"record":{"id":"f6d740a8b86d90f6","repo":"BerriAI/litellm","slug":"singulr-api-base-self-singulr-api-base-uses-pla","errorCode":null,"errorMessage":"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.","messagePattern":"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\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/proxy/guardrails/guardrail_hooks/singulr/singulr.py","lineNumber":57,"sourceCode":"        self,\n        singulr_api_key: str | None = None,\n        singulr_api_base: str | None = None,\n        singulr_application_id: str | None = None,\n        singulr_guardrail_id: str | None = None,\n        block_on_error: bool | None = None,\n        timeout: float | None = None,\n        **kwargs: Any,\n    ) -> None:\n        self.singulr_api_key = singulr_api_key or os.environ.get(\"SINGULR_API_KEY\")\n        self.singulr_api_base = (singulr_api_base or os.environ.get(\"SINGULR_API_BASE\") or _DEFAULT_API_BASE).rstrip(\n            \"/\"\n        )\n        parsed: Final = urlparse(self.singulr_api_base)\n        if parsed.scheme == \"http\" and parsed.hostname not in (\n            \"localhost\",\n            \"127.0.0.1\",\n        ):\n            raise ValueError(\n                f\"Singulr: api_base {self.singulr_api_base} uses plain HTTP for a \"\n                \"non-local endpoint. Guardrail payloads contain the API token, full \"\n                \"conversation content, and the guardrail decision, so this endpoint \"\n                \"must use HTTPS.\"\n            )\n\n        self.singulr_application_id = singulr_application_id or os.environ.get(\"SINGULR_ENFORCEMENT_ENTITY_ID\")\n        self.singulr_guardrail_id = singulr_guardrail_id or os.environ.get(\"SINGULR_GUARDRAIL_ID\")\n\n        if block_on_error is None:\n            env: Final = os.environ.get(\"SINGULR_BLOCK_ON_ERROR\", \"true\")\n            self.block_on_error = env.lower() in (\"true\", \"1\", \"yes\")\n        else:\n            self.block_on_error = block_on_error\n\n        self.timeout = _DEFAULT_TIMEOUT if timeout is None else timeout\n\n        self.async_handler = get_async_httpx_client(","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/guardrails/guardrail_hooks/singulr/singulr.py#L39-L75","documentation":"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.","triggerScenarios":"Thrown at litellm/proxy/guardrails/guardrail_hooks/singulr/singulr.py:57 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Change api_base to an https:// URL for the Singulr endpoint.","Only use plain HTTP for localhost endpoints."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}