Skip to main content
xpander runs any model, commercial or your own, through the AI gateway. The provider sets which harness a new agent starts on, and whether calls cost credits or run on your own key.

Providers

Where keys live

Every agent model call, including Bedrock and per-agent endpoints, goes through the LLM Gateway. The key comes from the first of: To set an install key:
  • --reset-then-reuse-values needs Helm 3.14 or later. It keeps your values and applies the chart’s defaults for the rest.
  • The LLM Gateway is always on self-hosted, so every provider your agents use needs a key in place 2 or 3. Otherwise the call is refused with a message naming the missing key.
  • A key named by an environment variable on agent-controller (custom provider, agent or organization default model) never reads the install’s own credentials. A name on the reserved list reads as no key (reserved key names).
  • Pods restart on their own when a secret changes. The xpander-static secret has a Helm keep policy: if a key is not picked up after an upgrade, patch the secret and restart xpander-agent-worker. Full mapping: Hybrid: managing LLM API keys.
Add Anthropic key panel with API key, Name and Description fields and an Add Anthropic key button

Use your own key on a built-in provider: the API key, its name and an optional description. Shown with sample data.

Credits against your own keys

Calls on keys xpander provides are charged in credits. Calls on a key you brought, agent or organization level, never are. Hybrid agents never use xpander’s keys: every provider needs a key in the organization or on the install (secrets.static), and Claude Code on Bedrock needs your own Bedrock auth. See Licenses and who pays.

Provider setup on a self-hosted install

Claude Code speaks to Anthropic, Codex to OpenAI, and OpenCode to any <provider>/<model> slot the proxy routes. Credentials live only on the Agent Controller.

Anthropic direct

Put an Anthropic API key on the controller. It egresses to api.anthropic.com. To use your own gateway, set LLM_PROXY_ANTHROPIC_BASE_URL.

Anthropic on Amazon Bedrock

Claude Code runs Anthropic models on Bedrock through the proxy’s amazon_bedrock leg. The controller resolves AWS auth in this order, and no executor sees it:
Fable- and Mythos-class Anthropic models on Bedrock need the account’s data-retention opt-in, per region.
  • With the default mode, every call fails with 400 data retention mode 'default' is not available for this model. Accepted modes: provider_data_share, or aws_review where offered.
  • There is no console switch. Per region, call PUT https://bedrock.<region>.amazonaws.com/data-retention with {"mode": "provider_data_share"} (SigV4-signed, IAM action bedrock:PutAccountDataRetention), for every region a global. inference profile can route to.
  • The first call after the change can still fail while it propagates. Retry first.
  • It applies to whichever AWS account signs the call. An organization’s own stored Bedrock key wins over the install’s credential, so that account needs the opt-in too.
  • Older Anthropic models need no opt-in, which is why the error looks model-specific.
Bedrock in a Hybrid deployment needs your own credentials: a Bedrock key or role under Platform > AI governance > Models, or the cluster’s own AWS identity. The account also needs the opt-in above. To use an IAM role instead of a key, see Amazon Bedrock with an IAM role.
The keyless methods apply to the proxy on the Agent Controller. The agent-worker service has its own constraint on keyless Bedrock: see Amazon Bedrock: key vs IAM.

Add a custom provider

Register any OpenAI-compatible endpoint (vLLM, Ollama, NVIDIA NIM) once under Platform > AI governance > Models > Add provider. Same steps: Custom endpoints.
1

Name it

Enter a Name. The ID (used in API calls) is derived from it and fixed once added.
2

Set the protocol and address

Protocol: OpenAI-compatible. Base URL: the address as the pods reach it, for example http://vllm.<namespace>.svc.cluster.local:8000/v1.
3

Choose the API key

No key (local or unauthenticated server), Use an existing key, or Create a new key.
4

Test and add models

Test connection reports Reachable and lists the endpoint’s models. A model that accepts function calls carries a tools badge. Add the models agents may use, then Add provider.
5

Choose the organization's models

In the provider’s Keys and models…, tick the models the organization may use. Prices are optional (Edit model > Price per 1M tokens (USD, optional)). They track spend only and are never charged. A model with no price reads as zero spend.
Add provider panel with Name, ID (used in API calls), Protocol OpenAI-compatible, Base URL, API key options No key, Use an existing key and Create a new key, and a Models section with Test connection and Add model

Add provider: name and ID, protocol, base URL, the API key choice, and Test connection under Models. Shown with sample data.

Use a custom provider

  • POST /v1/agents accepts only built-in providers in model_provider. A custom ID gets 422.
  • Pick a custom provider per conversation in the composer’s Harness and model popover (Claude Code, Codex, OpenCode).
  • Agent readiness in Keys and models… shows whether a harness works with the model, from the last Test model run.
  • A local model needs a context window well above the prompt xpander composes. Worked example: Air-Gapped: a worked vLLM setup.
  • With no /responses route on the endpoint, the gateway sends Codex calls as chat completions.

Which harness and model a new agent gets

A create that names a runtime, provider, model or harness settings is honored as written. Otherwise it is defaulted, the same way on cloud, Hybrid and Air-Gapped:
  1. The organization’s default LLM picks the CLI: No default, or a provider no CLI runs, falls through.
  2. The install’s default knobs (env on the agents and agent-controller services, the chart values below on Air-Gapped).
  3. The baked defaults: Claude Code on Anthropic direct with Fable 5.1 (claude-fable-5-1), Codex on gpt-6-astra, OpenCode on anthropic/claude-opus-5.
So a fresh Air-Gapped install with no default LLM creates Claude Code agents on Fable 5.1 over Anthropic direct, and needs an Anthropic key on the controller or Bedrock set as the default (with the opt-in above). Changing defaults later does not touch existing agents. Claude Code on Bedrock on Air-Gapped needs both harness defaults: global.harness.defaultProviders.claudeCode: amazon_bedrock and global.harness.defaultModels.claudeCode: <Bedrock model id>. Without them, the first turn fails with 503 no anthropic credential configured for harness agents, even when the organization’s default model is on Bedrock.

Model access per group

Who may use it… under Platform > AI governance > Models sets each group’s models. A model outside the group’s list is hidden from the picker, and a run that names it is refused.
Access: Amazon Bedrock panel with Organization and the Default, Design, Engineering and Sales groups, each set to All models

Who may use it on a provider: the organization, then each group, with the models each may use. Shown with sample data.

Next steps

Connect Bedrock with an IAM role

No long-lived keys.

Add a custom endpoint

An OpenAI-compatible runtime.

See who pays for a call

Credits and your own keys.