This is a self-hosting and enterprise feature. If the deployment has no encryption key configured, the endpoints return 501 — every workspace simply keeps answering on the deployment’s keys, exactly as before. It isn’t broken; the feature is unavailable.
Set a provider
Reading the settings back returns
has_api_key — a boolean — never the key itself.
Test before you save
api_key to test the credential already stored, rather than re-sending it. It does not check embeddings.
Clear it
Which model answers a question
Resolution runs in this order:- The knowledge base’s own
llm_provider/llm_model, if set - The workspace’s
llm_settings - The deployment’s configuration
A question spanning several knowledge bases ignores the per-knowledge-base override, because there’s no principled way to pick between two configured models. It uses the workspace setting.
What routes through your account
Answering a question is four paid calls, not one, and your key pays for all of them it can.
Two stages can stay with BeforeQuery, and the Model settings page names which ones apply to your workspace rather than leaving you to infer it.
Passage scoring moves to your model only when the deployment has no reranking vendor configured. A hosted cross-encoder is a different vendor with a key of ours; your chat credential does not reach it.
Embeddings move only for an OpenAI key against the OpenAI API. Every chunk in your index was embedded by one model, and a question’s vector is comparable only with vectors from that same model — so the key may change and the model may not. An Anthropic, Gemini or Bedrock credential has nothing that can embed here, and a proxy or self-hosted endpoint serves your chat models rather than this one.
Other providers
provider names the API format the server speaks, not the company billing you — and almost every hosted vendor speaks OpenAI’s. So provider: openai plus that vendor’s base_url reaches all of these, and the dashboard lists them by name rather than making you remember the endpoint:
Anything else that serves
POST /chat/completions works the same way, listed or not.
Amazon Bedrock
Bedrock is its ownprovider, not an OpenAI-compatible endpoint: requests are signed with AWS SigV4 and streaming replies arrive in AWS’s binary event-stream framing rather than as server-sent events.
That makes its credential a bundle rather than a key, so api_key carries JSON:
ACCESS:SECRET[:REGION[:SESSION_TOKEN]] is accepted too, for anything set by hand; a bare string is taken as a Bedrock API key and sent as a bearer token instead of being signed.
base_url carries the region, as https://bedrock-runtime.<region>.amazonaws.com. It lives there rather than in the credential because base_url is the one field read back to the browser — packed into the encrypted bundle instead, changing region would mean re-entering the secret.
model is an inference profile id, and the us. / eu. / apac. prefix is part of it: us.anthropic.claude-sonnet-4-5-20250929-v1:0. A bare anthropic.claude-… only resolves in regions that serve it on-demand. The prefix must match the region, and the model must be enabled first under Model access in the Bedrock console.bedrock:InvokeModel and bedrock:InvokeModelWithResponseStream, and nothing else.
Self-hosting on AWS? Set bedrock.allowAmbientCredentials and the deployment signs with its EC2 instance role or EKS service account, with no key stored anywhere. That path is for the deployment’s own configuration only — a workspace that selects Bedrock without supplying a credential is refused rather than billed to the host’s AWS account.
Private and self-hosted endpoints
base_url accepts any OpenAI-compatible endpoint, which covers OpenRouter, vLLM, Ollama, LM Studio and LocalAI.
Models offered in the dashboard
The dashboard lists these per provider.base_url lets you name any other model your endpoint serves.