# Open WebUI

<img
  src="/brand/banner-a-01.webp"
  alt=""
  loading="lazy"
  width="1280"
  height="549"
  className="brand-band"
/>

[Open WebUI](https://openwebui.com) is a self-hosted chat interface, usually run
in Docker. It treats any OpenAI-compatible URL as a connection.

*Setup guide: this config comes from Open WebUI's official documentation and
has not been run end to end against the gateway. Corrections to [support@hyphen-solution.com](mailto:support@hyphen-solution.com).*

## 1. Get a key

[app.hyphen-solution.com](https://app.hyphen-solution.com) → sign in → pick a
plan or credit pack → **Dashboard → API Keys**. Copy the `sk-...` key.

## 2a. First install: environment variables

```bash
docker run -d -p 3000:8080 \
  -e ENABLE_OPENAI_API=True \
  -e OPENAI_API_BASE_URL="https://api.hyphen-solution.com/v1" \
  -e OPENAI_API_KEY="sk-YOUR_KEY" \
  -v open-webui:/app/backend/data \
  --name open-webui \
  ghcr.io/open-webui/open-webui:main
```

Or in `docker-compose.yml`:

```yaml
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      ENABLE_OPENAI_API: "True"
      OPENAI_API_BASE_URL: "https://api.hyphen-solution.com/v1"
      OPENAI_API_KEY: "sk-YOUR_KEY"
    volumes:
      - open-webui:/app/backend/data
volumes:
  open-webui:
```

:::warning[These variables only apply on first boot]
`OPENAI_API_BASE_URL` and `OPENAI_API_KEY` are persisted into Open WebUI's
database the first time the container starts. Changing them later in the
compose file does nothing. After the first boot, edit the connection in the
UI instead.
:::

## 2b. Existing install: the Admin Settings form

**Admin Settings → Connections → OpenAI → ➕ Add Connection**

- **URL:** `https://api.hyphen-solution.com/v1`
- **API Key:** `sk-...`

Click **Save**. If the model dropdown stays empty, add the IDs you want to the
**Model IDs (Filter)** allowlist on that connection:

```
minimax-m3
minimax-m2.7
minimax-m2.5
minimax-text-01
```

## Running Hyphen alongside another provider

Use the plural variables. They are semicolon-separated and paired positionally,
so the first URL uses the first key:

```bash
OPENAI_API_BASE_URLS="https://api.hyphen-solution.com/v1;http://litellm:4000/v1"
OPENAI_API_KEYS="sk-YOUR_HYPHEN_KEY;sk-other-key"
```

## 3. Verify

Open `http://localhost:3000`, start a new chat, pick `minimax-m3` from the model
selector, and send:

```
Reply with the single word: connected
```

## Troubleshooting

- **No models in the dropdown**. The connection is unreachable, or the filter
  list is blocking them. Check **Admin Settings → Connections** and hit the
  refresh icon on the connection.
- **Config changes ignored**. You edited environment variables on a container
  that has already booted once. Change it in Admin Settings, or delete the
  `open-webui` volume and start over.
- **`401`**. Wrong key, or the key is still the placeholder.
- **Empty replies**. Reasoning models need output headroom. See
  [Choosing a model](/choosing-a-model#the-max_tokens-gotcha).
- **`429`**. Monthly budget spent. See [Rate limits & caps](/rate-limits).
- **Variable names changed?** Check
  [Open WebUI's environment reference](https://docs.openwebui.com/reference/env-configuration/).

## Related

- [Models](/models): the full catalog.
- [Choosing a model](/choosing-a-model): which model for which job.
