Claude, GPT and OpenRouter side by side in one Open WebUI

Connect Anthropic, OpenAI and OpenRouter keys to Open WebUI, keep the model list short, and compare several models on the same prompt in one chat.

· ranx.cloud

Illustration of three different teacups set out in a row on a wooden tray, each with a tea bag tag hanging over the rim

This is for anyone who pays for more than one model provider and is tired of switching tabs between them. You end up with one Open WebUI that talks to Anthropic, OpenAI and OpenRouter with your own keys, a model picker that shows only the dozen models you actually use, and a way to send one prompt to three models at once and merge their answers. Everything is done in the web interface.

Settings below were checked against Open WebUI v0.13.0. Prices are list prices as of November 2026.

Where the settings are

In this version the admin settings open in the same window as your personal settings. Click your avatar at the bottom of the sidebar, choose Settings, and scroll the left column to the Admin section. The pages this guide uses are Connections and Models, both grouped under AI.

Open WebUI does not run models itself. It sends each chat to a provider over the OpenAI Chat Completions protocol, and you pay that provider directly.

Step 1: Get the keys

Provider Where to create the key What you get
Anthropic Claude Console, platform.claude.com/settings/keys Claude models, billed by Anthropic
OpenAI platform.openai.com/api-keys GPT models, and later speech and image APIs
OpenRouter openrouter.ai/keys One prepaid key for hundreds of models from many vendors

You don't need all three. A common split is Anthropic and OpenAI direct for the models you use daily, and OpenRouter for trying everything else (DeepSeek, Qwen, Gemini) without opening more accounts. OpenRouter passes provider prices through without markup and charges a fee when you buy credits instead; the Credits page shows the current fee.

Step 2: Add the connections

On Connections, find Manage OpenAI API Connections and click Add Connection for each provider. If an OpenAI entry is already listed with no key, edit that one instead of adding a second.

URL Prefix ID Model IDs
Anthropic https://api.anthropic.com/v1 leave empty leave empty (auto-detected)
OpenAI https://api.openai.com/v1 leave empty gpt-6.1-sol, gpt-6-luna
OpenRouter https://openrouter.ai/api/v1 or deepseek/deepseek-v4.1-flash, google/gemini-3.6-flash, qwen/qwen3.8-flash

Paste the key into API Key, press Verify Connection (it should report Server connection verified), then Save. Saving alone does not test anything.

Three of those fields are worth understanding:

  • Model IDs is an allowlist. Type an ID, click +, repeat. Leave it empty and you get everything the provider's /models endpoint returns. For Anthropic that's a short list. For OpenAI it includes embedding, audio and image models you can't chat with. For OpenRouter it's thousands of entries, and Open WebUI's docs warn that page loads can take 10 to 15 seconds without filtering. Fill it in for OpenAI and OpenRouter.
  • Prefix ID is added in front of every model ID from that connection, separated by a dot. With or, OpenRouter's DeepSeek shows up as or.deepseek/deepseek-v4.1-flash. Use it so two routes to similar models never collide, and so you can tell at a glance which bill a chat lands on. Open WebUI strips the prefix again before sending the request.
  • The toggle beside each connection turns it off without deleting it. Useful when a key runs out of credit and you want its models out of the picker.

Anthropic needs nothing special. Open WebUI recognizes api.anthropic.com, lists Claude models through Anthropic's own models endpoint and sends chats to Anthropic's OpenAI-compatible endpoint. The trade-offs of that endpoint are covered further down.

Finally, turn on Cache Base Model List on the same page. Open WebUI then fetches the model lists at startup and when you save Connections, instead of on every page load. Use the refresh button next to the toggle after you add a model ID.

You may also see a Manage Ollama API Connections section. Ollama is a separate server that runs open models on your own hardware, ideally with a GPU. An instance with 0.5 to 4 shared CPUs has nothing to run them on, so if an Ollama entry is listed and you don't run an Ollama server elsewhere, switch its toggle off.

Step 3: Tidy the picker

Open Models in the Admin section. Every model from every connection is listed with an Enabled switch. Switching one off removes it from the picker for every chat without touching the connection, and switching it back on brings it straight back. Turn off the ones you'll never chat with directly.

Then open a chat, pick the model you'll use most, and click Set as default in the model selector. New chats start there.

Step 4: Compare models on one prompt

Open the model picker in a new chat and click Compare, beside the search field. Select two or three models, close the picker and send your prompt. Each model answers in its own column with the same conversation history.

Good uses:

  • A question where you don't trust one model's answer: a tax rule, a regex, an obscure API.
  • Picking a model for a recurring job. Run the same five prompts through three candidates once, then pin the winner.
  • Writing tasks where you want two different drafts to choose from.

When every column has finished, a branch-shaped icon with the tooltip Merge Responses appears below the last answers. It sends your prompt and all the drafts to one of the compared models, the one whose column you're viewing, with a built-in prompt asking it to combine them. Run it from your strongest model's column; the result is only as good as that model. The merged answer is saved with the chat, so you can merge days later.

Two things change in a comparison. Tools and skills of all selected models are combined. Web search, image generation and the code interpreter start switched on only if every selected model has them on by default.

What a comparison costs

Every column is a full request. Assume a prompt of 2,000 input tokens (your question plus a little history) and an 800-token answer from each model, at November 2026 list prices (Anthropic, OpenAI, OpenRouter):

Model Input / output per 1M tokens This prompt
Claude Sonnet 5.5 (claude-sonnet-5-5) $2 / $10 2,000 × $2/M + 800 × $10/M = $0.012
GPT-6.1 Sol (gpt-6.1-sol) $2 / $10 $0.012
DeepSeek V4.1 Flash via OpenRouter $0.0486 / $0.54 2,000 × $0.0486/M + 800 × $0.54/M = $0.0005
three-way comparison:   0.012 + 0.012 + 0.0005  ≈ $0.025
merge on Sonnet 5.5:    (2,000 + 3 × 800 + 300) input × $2/M + 800 × $10/M
                        = 4,700 × $2/M + $0.008 ≈ $0.017
total                   ≈ $0.042 per compared and merged question

Twenty compared questions a month is under a dollar. The real cost is in the history: a comparison chat that runs to 40 turns sends the whole conversation to all three models on every turn. Compare on the first one or two messages, then continue in a new chat with the model that won.

Two hidden extras. Claude 5 models think by default through Anthropic's OpenAI-compatible endpoint, the thinking is billed as output tokens, and Anthropic says the endpoint doesn't return it, so Claude's real output count is higher than the visible answer. And Open WebUI makes its own background calls (titles, tags, follow-up suggestions) on the chat model unless you configure a cheaper one; the cost guide in this series covers that.

Anthropic through the compatible endpoint: the trade-offs

Anthropic's own documentation calls its OpenAI SDK compatibility layer a way to test and compare models, "not considered a long-term or production-ready solution for most use cases" (OpenAI SDK compatibility). For chatting in Open WebUI it works, including tool calls, but know what you give up:

  • No prompt caching. On the native API a cache hit on Sonnet 5.5 costs 5% of the input price. Through this endpoint every turn of a long chat pays the full input price for the whole history.
  • reasoning_effort is ignored, and the thinking text isn't returned.
  • temperature below 1 is rejected with a 400 error on Claude 4.7 and later. If you set a temperature on a Claude model in Open WebUI, remove it.
  • No file or audio inputs. Images work.

If those matter, Open WebUI's docs point to a pipe function that calls Anthropic's native Messages API. That's custom Python code installed under Admin Panel → Functions, and you take on maintaining it.

What goes wrong

Verify Connection fails but the provider is fine. Some providers have no /models endpoint or authenticate it differently (Perplexity, GitHub Models, MiniMax). Chat still works: add the model IDs by hand in Model IDs and save.

The model picker takes seconds to open. An OpenRouter connection without an allowlist. Fill in Model IDs and turn on Cache Base Model List.

A new model doesn't appear. The cached list predates it. Click the refresh button next to Cache Base Model List, or save the Connections page.

Gemini through Google's OpenAI-compatible URL returns empty replies. Google's endpoint deviates from the OpenAI streaming format when a model calls a tool, and Open WebUI discards the call (#28492). Use Gemini through OpenRouter instead, or set Function Calling to Legacy in that model's Advanced Params.

Claude answers with a 400 error after you edited the model. A temperature or top_p value was saved on it. Open the model on the Models page, clear the parameter under Advanced Params, and save.

Two entries with the same name. The same model ID came from two connections. Give one of them a Prefix ID.

A reply stops mid-sentence. The provider dropped the stream, or the instance restarted. An instance on ranx.cloud can be restarted briefly now and then for maintenance or updates. Regenerate the reply once the page reconnects; recent versions no longer leave the cut-off message spinning (#33277).