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_path

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Use an id present in EXTERNAL_PROVIDER_FIELDS in invokeai/app/api/routers/app_info.py (e.g. 'openai', 'anthropic')
  2. Fix casing/typos — matching is exact membership, not case-insensitive
  3. Check your InvokeAI version for the supported provider list
  4. 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

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


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/d5254dc4c4cae9d5. Report an issue: GitHub.