{"record":{"id":"d6423cffe29b3ae2","repo":"BerriAI/litellm","slug":"api-key-is-required-for-topaz-image-variations","errorCode":null,"errorMessage":"API key is required for Topaz image variations","messagePattern":"API key is required for Topaz image variations","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/images/main.py","lineNumber":678,"sourceCode":"            raise ValueError(\"API key is required for OpenAI image variations\")\n        if api_base is None:\n            raise ValueError(\"API base is required for OpenAI image variations\")\n\n        response = openai_image_variations.image_variations(\n            model_response=model_response,\n            api_key=api_key,\n            api_base=api_base,\n            model=model,\n            image=image,\n            timeout=litellm_params.get(\"timeout\", None),\n            custom_llm_provider=custom_llm_provider,\n            logging_obj=litellm_logging_obj,\n            optional_params={},\n            litellm_params=litellm_params,\n        )\n    elif image_variation_provider == LITELLM_IMAGE_VARIATION_PROVIDERS.TOPAZ:\n        if api_key is None:\n            raise ValueError(\"API key is required for Topaz image variations\")\n        if api_base is None:\n            raise ValueError(\"API base is required for Topaz image variations\")\n\n        response = base_llm_aiohttp_handler.image_variations(\n            model_response=model_response,\n            api_key=api_key,\n            api_base=api_base,\n            model=model,\n            image=image,\n            timeout=litellm_params.get(\"timeout\", None) or DEFAULT_REQUEST_TIMEOUT,\n            custom_llm_provider=custom_llm_provider,\n            logging_obj=litellm_logging_obj,\n            optional_params={},\n            litellm_params=litellm_params,\n            client=client,\n        )\n\n    # return the response","sourceCodeStart":660,"sourceCodeEnd":696,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/images/main.py#L660-L696","documentation":"Topaz Labs image variations authenticate with an API key; if provider_config.get_api_key() returns None at litellm/images/main.py:678, litellm raises ValueError because the Topaz API rejects anonymous requests.","triggerScenarios":"Calling litellm.image_variations(model='topaz/...', image=...) without TOPAZ_API_KEY in the environment, without an api_key argument, and without litellm.api_key.","commonSituations":"New Topaz integration where the developer only configured OpenAI env vars; CI missing the TOPAZ_API_KEY secret.","solutions":["Export TOPAZ_API_KEY in the process environment","Or pass api_key explicitly to litellm.image_variations(...)","Verify the key at topazlabs.com and that it has image API access"],"exampleFix":"# before\nlitellm.image_variations(model=\"topaz/topaz-image-alter-v1\", image=img)\n\n# after\nlitellm.image_variations(model=\"topaz/topaz-image-alter-v1\", image=img, api_key=os.environ[\"TOPAZ_API_KEY\"])","handlingStrategy":"validation","validationCode":"import os\n\ndef has_topaz_key(explicit: str | None = None) -> bool:\n    return bool(explicit or os.getenv(\"TOPAZ_API_KEY\"))","typeGuard":null,"tryCatchPattern":"try:\n    r = litellm.image_variations(model=\"topaz/topaz-image-alter-v1\", image=img)\nexcept ValueError as e:\n    if \"API key is required for Topaz\" in str(e):\n        raise RuntimeError(\"set TOPAZ_API_KEY\") from e\n    raise","preventionTips":["Add TOPAZ_API_KEY to your secret manager alongside OPENAI_API_KEY","Validate provider-specific credentials at startup when that provider is enabled"],"tags":["image-variations","topaz","authentication","api-key"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}