Ein Key. Jedes Modell. Codex und Claude Code inklusive.
Codex CLI und Claude Code verbinden sich jetzt direkt mit unbottled.ai, genau wie OpenCode, Continue, Aider und Cline. Eine Basis-URL, ein Key, ein Befehl pro Tool.
Dein Coding-Agent hängt an den Modellen eines einzigen Anbieters. Zweitmeinung von einem anderen Lab, ein günstiges Modell für Fleißarbeit oder eines, das nicht ablehnt? Heißt: noch ein Konto, noch ein Key, noch eine Rechnung.
unbottled.ai spricht alle drei Formate, die Coding-Agents nutzen: OpenAI Chat Completions, die OpenAI Responses API und die Anthropic Messages API. Kein Zwischenstück, nichts zu installieren. Einmal eingerichtet, wechselst du zwischen Claude, GPT, DeepSeek, GLM, Kimi, Qwen und den unzensierten Modellen über eine einzige Modell-ID.
Warum sich das lohnt
- Ein Key, ein Guthaben. Keine Einzelkonten bei Anthropic, OpenAI, DeepSeek, Moonshot und Z.ai.
- Unzensierte Modelle im Editor. Sicherheitsforschung, Red-Team-Prompts, Fiction-Tooling, Daten, an denen Mainstream-Filter hängen bleiben. Den Filtergrad bestimmst du, nicht der Anbieter.
- Das richtige Modell pro Aufgabe. Ein Spitzenmodell fürs harte Refactoring, ein Flash-Modell für Umbenennungen und Testgerüste. Gleiche Config, andere ID.
- Dieselben Credits wie in der Chat-App, dieselben Preise. Jede Antwort meldet, was sie gekostet hat.
Key und Basis-URL holen
Zwei Werte. Jedes Tool unten braucht genau diese.
Erstelle unter Einstellungen > API-Keys einen Key. Er beginnt mit sk-unb- und wird genau einmal angezeigt. Die API gehört zu jedem bezahlten Tarif: ein aktives Abo oder ein beliebiges Credit-Paket schaltet sie frei.
Für Tools im OpenAI-Stil: Codex, OpenCode, Continue, Aider, Cline. Das Locale im Pfad ändert nur die Sprache der Fehlermeldungen.
Anthropic-Basis-URL: https://unbottled.ai/api/de-DE
Für Claude Code und Anthropic-SDKs. Dieselbe URL ohne /v1: /v1/messages hängen sie selbst an.
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
curl https://unbottled.ai/api/de-DE/v1/models \
-H "Authorization: Bearer $UNBOTTLED_API_KEY"curl https://unbottled.ai/api/de-DE/v1/chat/completions \
-H "Authorization: Bearer $UNBOTTLED_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"glm-5.3","messages":[{"role":"user","content":"Hello"}]}'Leg den Key in eine Umgebungsvariable, niemals in eine Datei, die du committest. Der curl-Aufruf beweist, dass der Key funktioniert, und listet jede Modell-ID, die dein Konto aufrufen darf, mit Kontextgröße, Tool-Support und Credit-Preisen.
Jedes Tool verbindet sich direkt
Coding-Agents sprechen drei verschiedene Wire-Formate. Wir bedienen alle drei, mit demselben Key und denselben Modellen.
- Codex CLI: OpenAI Responses API.
- Claude Code: Anthropic Messages API.
- OpenCode, Continue, Aider, Cline: OpenAI Chat Completions.
Alles andere mit einem Feld für die Basis-URL funktioniert genauso: Basis-URL, Key, Modell-ID.
# OpenAI-compatible tools (chat completions or Responses API)
Base URL: https://unbottled.ai/api/de-DE/v1
API key: sk-unb-YOUR_KEY
Model: glm-5.3
# Anthropic-compatible tools (Messages API)
Base URL: https://unbottled.ai/api/de-DE
API key: sk-unb-YOUR_KEY
Model: glm-5.3Codex CLI
Der Terminal-Agent von OpenAI. Liest dein Repo, führt Befehle aus, bearbeitet Dateien. Getestet mit Codex CLI 0.118.0.
Codex spricht die Responses API, wir auch. Der Einzeiler definiert den Provider direkt im Aufruf: nichts zu bearbeiten, nichts zu installieren. Für den Alltag die Config einmal anhängen und Codex mit dem Profil starten.
UNBOTTLED_API_KEY="sk-unb-YOUR_KEY" codex \
-c 'model_providers.unbottled={name="unbottled.ai",base_url="https://unbottled.ai/api/de-DE/v1",env_key="UNBOTTLED_API_KEY",wire_api="responses"}' \
-c model_provider=unbottled \
-m glm-5.3[model_providers.unbottled]
name = "unbottled.ai"
base_url = "https://unbottled.ai/api/de-DE/v1"
env_key = "UNBOTTLED_API_KEY"
wire_api = "responses"
[profiles.unbottled]
model_provider = "unbottled"
model = "glm-5.3"export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
codex --profile unbottledModell wechseln per -m oder über die model-Zeile im Profil. wire_api bleibt "responses": aktuelle Codex-Versionen akzeptieren nichts anderes.
Claude Code
Der Terminal-Agent von Anthropic. Plant, editiert, startet Tests, schickt Subagents los. Getestet mit Claude Code 2.1.323.
Claude Code liest sein Gateway aus Umgebungsvariablen. ANTHROPIC_BASE_URL ist die Basis-URL ohne /v1. ANTHROPIC_MODEL setzt das Hauptmodell. Die OPUS- und SONNET-Vorgaben decken Modellauswahl und Plan-Modus ab, die HAIKU-Vorgabe schiebt Hintergrundjobs wie Sitzungstitel auf ein günstiges Modell, und CLAUDE_CODE_SUBAGENT_MODEL gilt für Subagents. CLAUDE_CODE_MAX_CONTEXT_TOKENS nennt Claude Code die echte Kontextgröße eines Nicht-Claude-Modells, damit es an der richtigen Stelle kompaktiert.
ANTHROPIC_BASE_URL="https://unbottled.ai/api/de-DE" \
ANTHROPIC_AUTH_TOKEN="sk-unb-YOUR_KEY" \
ANTHROPIC_MODEL="glm-5.3" \
ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5.3" \
ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5.3" \
ANTHROPIC_DEFAULT_HAIKU_MODEL="glm-5.3-flash" \
CLAUDE_CODE_SUBAGENT_MODEL="glm-5.3" \
CLAUDE_CODE_MAX_CONTEXT_TOKENS="1048576" \
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1" \
claude{
"env": {
"ANTHROPIC_BASE_URL": "https://unbottled.ai/api/de-DE",
"ANTHROPIC_AUTH_TOKEN": "sk-unb-YOUR_KEY",
"ANTHROPIC_MODEL": "glm-5.3",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-5.3",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-5.3",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-5.3-flash",
"CLAUDE_CODE_SUBAGENT_MODEL": "glm-5.3",
"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1048576",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
}
}claudeLieber Claude selbst? Lass die Modellzeilen weg. Claude Code fragt seine üblichen Claude-IDs an, und wir leiten sie auf unser passendes Claude-Modell, abgerechnet in Credits.
Claude Code schickt einen großen Systemprompt, über 30k Input-Tokens selbst für eine Trivialaufgabe. Ein günstiges Standardmodell hält das bezahlbar.
OpenCode
Open-Source-Agent fürs Terminal, mit TUI und Headless-Modus. Getestet mit OpenCode 1.19.5.
Speichere die Config als opencode.json im Projekt, oder als ~/.config/opencode/opencode.json für alle Projekte. Der Key bleibt in deiner Umgebung. Jede ID aus GET /v1/models passt in die models-Liste, im TUI wählst du sie mit /models.
UNBOTTLED_API_KEY="sk-unb-YOUR_KEY" \
OPENCODE_CONFIG_CONTENT='{"provider":{"unbottled":{"npm":"@ai-sdk/openai-compatible","options":{"baseURL":"https://unbottled.ai/api/de-DE/v1","apiKey":"{env:UNBOTTLED_API_KEY}"},"models":{"glm-5.3":{}}}},"model":"unbottled/glm-5.3"}' \
opencode{
"$schema": "https://opencode.ai/config.json",
"provider": {
"unbottled": {
"npm": "@ai-sdk/openai-compatible",
"name": "unbottled.ai",
"options": {
"baseURL": "https://unbottled.ai/api/de-DE/v1",
"apiKey": "{env:UNBOTTLED_API_KEY}"
},
"models": {
"glm-5.3": { "name": "GLM-5.3" },
"claude-sonnet-5.5": { "name": "Claude Sonnet 5.5" },
"glm-5.3-uncensored": { "name": "GLM 5.3 Uncensored" }
}
}
},
"model": "unbottled/glm-5.3"
}export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
opencodeContinue
Coding-Assistent für VS Code und JetBrains, dazu die CLI cn. Getestet mit Continue 1.5.47.
name: unbottled
version: 1.0.0
schema: v1
models:
- name: GLM-5.3
provider: openai
model: glm-5.3
apiBase: https://unbottled.ai/api/de-DE/v1
apiKey: ${{ secrets.UNBOTTLED_API_KEY }}
roles: [chat, edit, apply]export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
cn --config ./config.yamlsecrets.UNBOTTLED_API_KEY wird aus deiner Umgebung aufgelöst. Mit -p und einem Prompt läuft es headless. Die IDE-Erweiterung liest ~/.continue/config.yaml: denselben Modelleintrag dort ergänzen.
Aider
Pair-Programming im Terminal, Commits inklusive. Getestet mit Aider 0.86.2.
Ein Befehl, keine Config-Datei. Aider will openai/ vor der Modell-ID und entfernt das Präfix, bevor es uns aufruft. --edit-format diff hält Änderungen klein; ohne die Option schickt Aider bei unbekannten Modell-IDs ganze Dateien neu. Die zu bearbeitenden Dateien nennst du wie gewohnt beim Aufruf.
OPENAI_API_BASE="https://unbottled.ai/api/de-DE/v1" \
OPENAI_API_KEY="sk-unb-YOUR_KEY" \
aider --model openai/glm-5.3 --edit-format diff --no-show-model-warningsCline
Autonomer Coding-Agent, in VS Code und als CLI. Getestet mit Cline 3.0.74.
Zwei Befehle mit der Cline-CLI: Provider einmal speichern, dann cline starten. Basis-URL, Schlüssel und Modell-ID sind dieselben drei Werte wie überall.
cline auth -p openai -k "sk-unb-YOUR_KEY" -b "https://unbottled.ai/api/de-DE/v1" -m glm-5.3clineWelches Modell für welchen Job
Alle hier unterstützen Tool-Calls, ohne die kein Agent arbeitet. Die IDs gehören in deine Config.
Harte Probleme
Große Refactorings, fremde Codebasen, mehrstufiges Debugging. Höhere Credit-Preise, weniger Irrwege.
- claude-sonnet-5.5Claude Sonnet 5.5
- claude-opus-5.5Claude Opus 5.5
- gpt-6.1-solGPT-6.1 Sol
- kimi-k3.1-proKimi K3.1 Pro
- deepseek-v4-proDeepSeek V4 Pro
Günstig und schnell
Umbenennungen, Tests, Boilerplate, Hintergrundjobs. Ein Bruchteil des Preises eines Spitzenmodells. Solide Standardwahl für Agents mit großen Prompts.
- glm-5.3GLM-5.3
- glm-5.3-flashGLM-5.3 Flash
- qwen-3.8-flashQwen 3.8 Flash
- claude-haiku-5.5Claude Haiku 5.5
Unzensiert
Gleicher Agent-Workflow, kein Ablehnungsreflex. Exploit-Analyse, Red-Team-Tooling, Erwachsenen-Fiction-Pipelines, Scraper, bei denen andere Modelle predigen. Die Verantwortung für das, was du baust, bleibt bei dir.
- glm-5.3-uncensoredGLM 5.3 Uncensored
- venice-deepseek-v4.1-flash-uncensoredDeepSeek V4.1 Flash Uncensored
- qwen-3.6-plus-uncensoredQwen 3.6 Plus Uncensored
- venice-uncensoredVenice Uncensored 1.2
Stolperfallen, in die wir getreten sind
Damit du es nicht musst.
- Kopier die Basis-URL exakt, inklusive /api/<locale>/v1. Ohne Locale gibt es eine Weiterleitung, die manche Clients verwerfen. Ohne /api kommt eine HTML-Seite statt JSON.
- Claude Code bekommt die Basis-URL ohne /v1. Mit /v1 ruft es /v1/v1/messages auf und landet bei 404.
- Nutze exakt die ID aus GET /v1/models, etwa glm-5.3. Aider will openai/ davor. Die eingebauten Claude-IDs von Claude Code landen automatisch beim neuesten Claude derselben Familie. Jede andere unbekannte ID liefert 404 model_not_found.
- HTTP 402 mit paid_plan_required heißt: das Konto hat noch keinen bezahlten Tarif. Jedes Credit-Paket behebt das.
- Ein Modell ohne Tool-Support antwortet mit 400 tools_not_supported, sobald der Agent Tools mitschickt. Prüf supports_tools in GET /v1/models.
- Jeder Key erlaubt 60 Anfragen pro Minute. Agents feuern viele kleine Aufrufe. Bei 429 bekommt der Agent einen eigenen Key.
Mit einem Befehl verdrahtet.
Key erstellen, Block für dein Tool kopieren, Modell wählen. Die API-Doku deckt jeden Endpunkt, jedes Feld, jeden Fehlercode und jedes Streaming-Detail ab.