{"record":{"id":"fbf19285b59b8530","repo":"invoke-ai/InvokeAI","slug":"provider-request-model-provider-id-is-missing","errorCode":null,"errorMessage":"Provider '{request.model.provider_id}' is missing credentials","messagePattern":"Provider '(.+?)' is missing credentials","errorType":"exception","errorClass":"ExternalProviderNotConfiguredError","httpStatus":null,"severity":"error","filePath":"invokeai/app/services/external_generation/external_generation_default.py","lineNumber":51,"sourceCode":"\nclass ExternalGenerationService(ExternalGenerationServiceBase):\n    def __init__(\n        self,\n        providers: dict[str, ExternalProvider],\n        logger: Logger,\n        record_store: ModelRecordServiceBase | None = None,\n    ) -> None:\n        self._providers = providers\n        self._logger = logger\n        self._record_store = record_store\n\n    def generate(self, request: ExternalGenerationRequest) -> ExternalGenerationResult:\n        provider = self._providers.get(request.model.provider_id)\n        if provider is None:\n            raise ExternalProviderNotFoundError(f\"No external provider registered for '{request.model.provider_id}'\")\n\n        if not provider.is_configured():\n            raise ExternalProviderNotConfiguredError(f\"Provider '{request.model.provider_id}' is missing credentials\")\n\n        request = self._refresh_model_capabilities(request)\n        resize_to_original_inpaint_size = _get_resize_target_for_inpaint(request)\n        request = self._bucket_request(request)\n        request = self._drop_unsupported_capabilities(request)\n\n        self._validate_request(request)\n        result = self._generate_with_retry(provider, request)\n\n        if resize_to_original_inpaint_size is None:\n            return result\n\n        width, height = resize_to_original_inpaint_size\n        return _resize_result_images(result, width, height)\n\n    _MAX_RETRIES = 3\n    _DEFAULT_RETRY_DELAY = 10.0\n    _MAX_RETRY_DELAY = 60.0","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/external_generation/external_generation_default.py#L33-L69","documentation":"ExternalProviderNotConfiguredError raised in generate() when a provider IS registered but its is_configured() check fails, meaning required credentials (API keys, etc.) are missing. The provider exists but cannot authenticate to its external API.","triggerScenarios":"generate() called for a registered provider whose is_configured() returns False — typically because the API key environment variable or config value for that provider was never set.","commonSituations":"Fresh install without setting provider API keys; env var renamed between versions; running in an environment (Docker/CI) that doesn't receive the secret; key stored in a config file the service doesn't read.","solutions":["Set the provider's required credential (API key) in the environment or InvokeAI config and restart","Verify the exact env var name the provider's is_configured() checks","Re-run the provider setup/login flow (e.g. OAuth-based providers)","If credentials are intentionally absent, route the request to a configured provider"],"exampleFix":"// before: provider is registered but no key\n# $ export OPENAI_API_KEY=\n\n// after\nexport OPENAI_API_KEY=sk-...\n# or in invokeai config: provider credentials section filled in, then restart the app","handlingStrategy":"validation","validationCode":"statuses = service.get_provider_statuses()\nst = statuses.get(request.model.provider_id)\nif st is None or not getattr(st, \"configured\", True):\n    raise RuntimeError(f\"Provider '{request.model.provider_id}' credentials missing; configure before generating\")","typeGuard":"def provider_is_configured(service, provider_id: str) -> bool:\n    st = service.get_provider_statuses().get(provider_id)\n    return bool(st and getattr(st, \"configured\", False))","tryCatchPattern":"try:\n    result = service.generate(request)\nexcept ExternalProviderNotConfiguredError:\n    logger.error(\"Set the API key env var for provider %s\", request.model.provider_id)\n    raise","preventionTips":["Check provider status at startup and surface a setup prompt instead of failing at request time","Document required env vars per provider; validate them in a preflight script","Ensure secrets are mounted into Docker/CI environments","Watch for env var renames when upgrading InvokeAI"],"tags":["configuration","credentials","missing-env-var","external-generation"],"backgroundTag":"missing-env-var","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}