{"record":{"id":"ec7b6afb8585098f","repo":"langflow-ai/langflow","slug":"provider-provider-is-not-configured-available","errorCode":null,"errorMessage":"Provider '{provider}' is not configured. Available providers: {enabled_providers}","messagePattern":"Provider '(.+?)' is not configured\\. Available providers: (.+?)","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"src/backend/base/langflow/agentic/api/router.py","lineNumber":85,"sourceCode":"    enabled_providers, _ = await get_enabled_providers_for_user(user_id, session)\n\n    if not enabled_providers:\n        raise HTTPException(\n            status_code=400,\n            detail=\"No model provider is configured. Please configure at least one model provider in Settings.\",\n        )\n\n    provider = request.provider\n    if not provider:\n        for preferred in PREFERRED_PROVIDERS:\n            if preferred in enabled_providers:\n                provider = preferred\n                break\n        if not provider:\n            provider = enabled_providers[0]\n\n    if provider not in enabled_providers:\n        raise HTTPException(\n            status_code=400,\n            detail=f\"Provider '{provider}' is not configured. Available providers: {enabled_providers}\",\n        )\n\n    api_key_name = provider_variable_map.get(provider)\n    if not api_key_name:\n        raise HTTPException(status_code=400, detail=f\"Unknown provider: {provider}\")\n\n    model_name = request.model_name or get_default_model(provider, user_id=user_id) or \"\"\n\n    # Get all configured variables for the provider\n    provider_vars = get_all_variables_for_provider(user_id, provider)\n\n    # Validate all required variables are present\n    required_keys = get_provider_required_variable_keys(provider)\n    missing_keys = [key for key in required_keys if not provider_vars.get(key)]\n\n    if missing_keys:","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/langflow-ai/langflow/blob/976ec789d2886a86de109c044d089d68e96c9a35/src/backend/base/langflow/agentic/api/router.py#L67-L103","documentation":"When a request explicitly names a provider (request.provider) that is not in the user's enabled-provider list, the assistant router raises HTTP 400 listing the offending provider and the providers that ARE available. Enabled means the user has the provider's API-key variable configured. The message doubles as a discovery aid: it returns the valid set.","triggerScenarios":"POST /api/v1/agentic/... with body {\"provider\": \"openai\"} when only 'anthropic' is enabled for the user; provider name typo or casing mismatch.","commonSituations":"Frontend defaults to a provider the user never configured; switching providers per-request in scripts; provider renamed between versions.","solutions":["Omit provider from the request to let the server auto-pick (PREFERRED_PROVIDERS order, else first enabled).","Or set provider to one of the names listed in the error's 'Available providers' array.","Configure the wanted provider's API key for the user, then retry with the original provider name."],"exampleFix":"# before\nPOST /api/v1/agentic/chat {\"provider\": \"openai\"}  # 400 Provider 'openai' is not configured. Available providers: ['anthropic']\n# after\nPOST /api/v1/agentic/chat {\"provider\": \"anthropic\"}","handlingStrategy":"validation","validationCode":"import requests\nprobe = requests.get(\"http://host/api/v1/agentic/check-config\", headers=headers).json()\nenabled = set(probe.get(\"providers\") or [])\nif request_provider and request_provider not in enabled:\n    request_provider = next(iter(enabled)) or None  # or omit to let the server choose","typeGuard":"def is_enabled_provider(name: str, enabled: list[str]) -> bool:\n    return name in enabled","tryCatchPattern":"if resp.status_code == 400 and \"Available providers\" in resp.text:\n    available = parse_providers_from_detail(resp.json()[\"detail\"])\n    retry_with(available[0])  # or re-prompt the user to pick","preventionTips":["Populate provider pickers from the check-config response, not a hardcoded list.","Omit provider when you have no preference — the server auto-picks sensibly.","Normalize provider names/casing against the enabled list before sending."],"tags":["agentic","http-400","model-provider","validation"],"backgroundTag":null,"analyzedSha":"976ec789d2886a86de109c044d089d68e96c9a35","analyzedAt":"2026-08-14T18:23:12.227Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}