Zurück zum Blog
Entwickler-GuideNovember 12, 20268 Min. Lesezeit

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.

Basis-URL: https://unbottled.ai/api/de-DE/v1

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.

Schlüssel prüfen
terminal
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"

curl https://unbottled.ai/api/de-DE/v1/models \
  -H "Authorization: Bearer $UNBOTTLED_API_KEY"
Erste Anfrage
terminal
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.

Der schnellste Weg: Direkt nach dem Erstellen zeigt die Seite API-Keys jeden Block unten, mit deinem Key schon eingesetzt. Tool wählen, kopieren, starten.

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.

Einstellungen
settings
# 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.3
Responses API

Codex 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.

Ein Befehl
terminal
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
Dauerhaft einrichten
~/.codex/config.toml
[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"
Dann starten
terminal
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
codex --profile unbottled

Modell wechseln per -m oder über die model-Zeile im Profil. wire_api bleibt "responses": aktuelle Codex-Versionen akzeptieren nichts anderes.

Messages API

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.

Ein Befehl
terminal
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
Dauerhaft einrichten
~/.claude/settings.json
{
  "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"
  }
}
Dann starten
terminal
claude

Lieber 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.

Chat Completions

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.

Ein Befehl
terminal
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
Dauerhaft einrichten
opencode.json
{
  "$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"
}
Dann starten
terminal
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
opencode
Erst OpenCode aktualisieren. Alte 1.0.x-Builds ziehen das neueste @ai-sdk/openai-compatible-Paket und stürzen nach dem ersten Tool-Call mit DecimalError: Invalid argument ab. 1.19.5 fährt dieselbe Config fehlerfrei.
Chat Completions

Continue

Coding-Assistent für VS Code und JetBrains, dazu die CLI cn. Getestet mit Continue 1.5.47.

Dauerhaft einrichten
config.yaml
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]
Dann starten
terminal
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
cn --config ./config.yaml

secrets.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.

Chat Completions

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.

Ein Befehl
terminal
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-warnings
Chat Completions

Cline

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.

Ein Befehl
terminal
cline auth -p openai -k "sk-unb-YOUR_KEY" -b "https://unbottled.ai/api/de-DE/v1" -m glm-5.3
Dann starten
terminal
cline

Welches 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
IDs ändern sich, wenn Modelle ersetzt werden. Maßgeblich ist GET /v1/models: steht eine ID für deinen Key nicht drin, antwortet die API mit 404 model_not_found. Einzige Zuordnung gibt es für Claude Code: seine eingebauten Claude-IDs landen beim neuesten Claude derselben Familie.

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.

Zurück zum Blog