{"record":{"id":"d917ed61b65b671c","repo":"BerriAI/litellm","slug":"openrouter-api-key-is-not-set","errorCode":null,"errorMessage":"OPENROUTER_API_KEY is not set","messagePattern":"OPENROUTER_API_KEY is not set","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/openrouter/image_edit/transformation.py","lineNumber":122,"sourceCode":"                        if \"image_config\" not in mapped_params:\n                            mapped_params[\"image_config\"] = {}\n                        mapped_params[\"image_config\"][\"image_size\"] = image_size\n                else:\n                    mapped_params[key] = value\n\n        return mapped_params\n\n    def validate_environment(\n        self,\n        headers: dict,\n        model: str,\n        api_key: str | None = None,\n        litellm_params: dict | None = None,\n        api_base: str | None = None,\n    ) -> dict:\n        api_key = api_key or litellm.api_key or get_secret_str(\"OPENROUTER_API_KEY\")\n        if not api_key:\n            raise ValueError(\"OPENROUTER_API_KEY is not set\")\n        headers.update(\n            {\n                \"Authorization\": f\"Bearer {api_key}\",\n            }\n        )\n        return headers\n\n    def use_multipart_form_data(self) -> bool:\n        \"\"\"OpenRouter uses JSON requests, not multipart/form-data.\"\"\"\n        return False\n\n    def get_complete_url(\n        self,\n        model: str,\n        api_base: str | None,\n        litellm_params: dict,\n    ) -> str:\n        base_url = api_base or get_secret_str(\"OPENROUTER_API_BASE\") or \"https://openrouter.ai/api/v1\"","sourceCodeStart":104,"sourceCodeEnd":140,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/llms/openrouter/image_edit/transformation.py#L104-L140","documentation":"Credential guard in the OpenRouter image-edit config: the api_key fallback chain (argument, litellm.api_key, OPENROUTER_API_KEY secret) produced nothing, so the image-edit request would be unauthorized and is rejected before dispatch.","triggerScenarios":"Thrown at litellm/llms/openrouter/image_edit/transformation.py:122 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Export OPENROUTER_API_KEY, or pass api_key='...' to the image edit call."],"exampleFix":null,"handlingStrategy":"validation","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-14T00:17:10.932Z"}