invoke-ai/InvokeAI · error · HTTPException
Unknown external provider '{provider_id}'
Error message
Unknown external provider '{provider_id}' What it means
_get_external_provider_fields is a lookup against the fixed EXTERNAL_PROVIDER_FIELDS table (known providers like openai, anthropic, etc.). Any external-provider endpoint (set/reset config, build config) with a provider_id outside that table raises 404 with this detail.
Source
Thrown at invokeai/app/api/routers/app_info.py:366
provider_id: str = Path(description="The external provider identifier"),
) -> ExternalProviderConfigModel:
api_key_field, base_url_field = _get_external_provider_fields(provider_id)
_apply_external_provider_update({api_key_field: None, base_url_field: None})
_remove_external_models_for_provider(provider_id)
return _build_external_provider_config(provider_id, get_config())
def status_to_model(status: ExternalProviderStatus) -> ExternalProviderStatusModel:
return ExternalProviderStatusModel(
provider_id=status.provider_id,
configured=status.configured,
message=status.message,
)
def _get_external_provider_fields(provider_id: str) -> tuple[str, str]:
if provider_id not in EXTERNAL_PROVIDER_FIELDS:
raise HTTPException(status_code=404, detail=f"Unknown external provider '{provider_id}'")
return EXTERNAL_PROVIDER_FIELDS[provider_id]
def _write_external_api_keys_file(api_keys_file_path: FilePath, api_keys: dict[str, str]) -> None:
if not api_keys:
if api_keys_file_path.exists():
api_keys_file_path.unlink()
return
api_keys_file_path.parent.mkdir(parents=True, exist_ok=True)
with open(api_keys_file_path, "w", encoding=locale.getpreferredencoding()) as api_keys_file:
yaml.safe_dump(api_keys, api_keys_file, sort_keys=False)
def _apply_external_provider_update(updates: dict[str, str | None]) -> None:
with _EXTERNAL_PROVIDER_CONFIG_LOCK:
runtime_config = get_config()
config_path = runtime_config.config_file_pathView on GitHub (pinned to 0b6a024f2f)
Solutions
- Use an id present in EXTERNAL_PROVIDER_FIELDS in invokeai/app/api/routers/app_info.py (e.g. 'openai', 'anthropic')
- Fix casing/typos — matching is exact membership, not case-insensitive
- Check your InvokeAI version for the supported provider list
- Handle 404 in the client and surface the list of supported providers
Example fix
// before
await setProviderConfig('OpenAI', { api_key: 'sk-...' });
// after
await setProviderConfig('openai', { api_key: 'sk-...' }); Defensive patterns
Strategy: validation
Validate before calling
KNOWN_PROVIDERS = {'openai', 'anthropic'} # mirror EXTERNAL_PROVIDER_FIELDS keys
def validate_provider_id(provider_id: str) -> None:
if provider_id not in KNOWN_PROVIDERS:
raise ValueError(f'Unknown provider {provider_id!r}; expected one of {sorted(KNOWN_PROVIDERS)}') Type guard
def is_known_provider(provider_id: str) -> bool:
return isinstance(provider_id, str) and provider_id in KNOWN_PROVIDERS Try / catch
try:
resp = requests.post(f'{base}/providers/{provider_id}/config', json=body)
resp.raise_for_status()
except requests.HTTPError as e:
if e.response.status_code == 404:
raise ValueError(f'{provider_id} is not a supported provider') from e Prevention
- Keep provider ids in a shared constant matching the server's EXTERNAL_PROVIDER_FIELDS
- Use lowercase exact ids — matching is case-sensitive membership
- Pin/verify the InvokeAI version whose provider list your client assumes
- Fetch/refresh the supported provider list instead of hardcoding stale ids
When it happens
Trigger: Calling set_external_provider_config, reset_external_provider_config, or _build_external_provider_config with a provider_id string not in EXTERNAL_PROVIDER_FIELDS (typo, custom provider name, old/renamed id).
Common situations: Typos like 'open-ai' or 'OpenAI' (ids are exact, lowercase); using a provider removed/renamed in a newer InvokeAI version; hardcoding provider ids from docs of a different version.
Related errors
- Image not found
- Board not found
- No external provider config fields provided
- User not found
- Board not found
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/d5254dc4c4cae9d5.
Report an issue: GitHub.