Ein API-Key. 124 Modelle. Drei Wire-Formate.
unbottled.ai spricht OpenAI Chat Completions, die OpenAI Responses API und die Anthropic Messages API an einem Endpoint. Dein SDK bleibt. Deine Tools bleiben. Nur die Basis-URL ändert sich.
GPT bei OpenAI, Claude bei Anthropic, Gemini bei Google. Drei SDKs, drei Keys, drei Rechnungen, drei Dashboards. Oder schlimmer: Dein Lieblingstool spricht nur ein Format und bekommt damit nur die Modelle eines Anbieters.
unbottled.ai bündelt 124 Chat-Modelle von 17 Labs hinter einem Key und einem Credit-Guthaben. Du rufst sie im OpenAI-Format, im Responses-Format oder im Anthropic-Format auf. Dieselben Modelle an jedem Endpoint. Hier steht genau, wie es funktioniert, was es kostet und wann der direkte Weg oder ein Router die bessere Wahl ist.
Fünf Endpoints, ein Key
Jeder Endpoint nimmt denselben Key, belastet dasselbe Guthaben und bedient dieselben Modelle.
- POST /v1/chat/completions: OpenAI Chat Completions. Streaming per SSE mit data: [DONE] am Ende, stream_options.include_usage, Tool Calling. Das Format, das fast jeder OpenAI-kompatible Client spricht.
- POST /v1/responses: die OpenAI Responses API, das Format von Codex CLI. Streaming und Tools. Zustandslos: store ist false, previous_response_id wird mit 400 abgelehnt. Schick also in jedem Turn den vollständigen Input.
- POST /v1/messages: die Anthropic Messages API. Streaming und Tool Use. Damit reden Claude Code und die Anthropic-SDKs.
- POST /v1/messages/count_tokens: kostenlos. Eine lokale Schätzung ohne Modellaufruf, die nicht auf dein Rate-Limit pro Minute zählt. Claude Code ruft das ständig auf, um seinen Kontext zu bemessen.
- GET /v1/models: jedes Modell, das dein Key gerade aufrufen darf, mit Kontextlänge, Tool-Support und Preisen. Ein Response-Body, den die OpenAI- und die Anthropic-SDKs gleichermaßen parsen.
Authentifizierung geht auf zwei Arten, an jedem Endpoint. Authorization: Bearer sk-unb-... für OpenAI-Clients und für Claude Code mit ANTHROPIC_AUTH_TOKEN. x-api-key: sk-unb-... für die Anthropic-SDKs. Keys beginnen mit sk-unb-, werden genau einmal angezeigt und nur als Hash gespeichert. Du erstellst sie unter Einstellungen > API-Keys, bis zu 20 aktive Keys pro Konto.
Für OpenAI-SDKs und Tools im OpenAI-Stil. Das Locale gehört zum Pfad. Es legt nur die Sprache der Fehlermeldungen fest, jedes unterstützte Locale funktioniert, aber fehlen darf es nicht.
Anthropic-Basis-URL: https://unbottled.ai/api/de-GLOBAL
Für die Anthropic-SDKs und Claude Code. Dieselbe URL ohne /v1: /v1/messages hängen sie selbst an.
Code: dein SDK, unsere Basis-URL
Keine neue Client-Bibliothek. Die offiziellen SDKs von OpenAI und Anthropic funktionieren unverändert. Ersetze sk-unb-YOUR_KEY durch deinen Key.
curl
Der schnellste Beweis, dass dein Key funktioniert. Eine schlichte Chat Completion, nichts zu installieren.
curl https://unbottled.ai/api/de-GLOBAL/v1/chat/completions \
-H "Authorization: Bearer sk-unb-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k3.1-pro",
"messages": [
{ "role": "system", "content": "You answer in one sentence." },
{ "role": "user", "content": "Why is the sky blue?" }
]
}'OpenAI Python SDK
Setz base_url und api_key am Client und ruf wie gewohnt chat.completions.create auf. Jedes Modell aus GET /v1/models passt ins model-Feld, Claude und Gemini eingeschlossen.
from openai import OpenAI
client = OpenAI(
base_url="https://unbottled.ai/api/de-GLOBAL/v1",
api_key="sk-unb-YOUR_KEY",
)
reply = client.chat.completions.create(
model="kimi-k3.1-pro",
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
print(reply.choices[0].message.content)Derselbe Client spricht auch die Responses API: client.responses.create. Denk daran, dass sie hier zustandslos ist. Übergib in jedem Turn die gesamte Unterhaltung als input.
reply = client.responses.create(
model="kimi-k3.1-pro",
input="Why is the sky blue?",
)
print(reply.output_text)Anthropic Python SDK
Setz base_url ohne /v1 und deinen Key als api_key, dann messages.create. Reasoning-Modelle stellen einen thinking-Block an den Anfang. Das Beispiel gibt deshalb den text-Block aus, nicht den ersten Block.
import anthropic
client = anthropic.Anthropic(
base_url="https://unbottled.ai/api/de-GLOBAL",
api_key="sk-unb-YOUR_KEY",
)
reply = client.messages.create(
model="kimi-k3.1-pro",
max_tokens=1024,
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
# Reasoning models put a thinking block first: print the text block.
print(next(block.text for block in reply.content if block.type == "text"))Größe vor dem Senden prüfen? count_tokens liefert kostenlos eine Schätzung, ganz ohne Modellaufruf.
curl https://unbottled.ai/api/de-GLOBAL/v1/messages/count_tokens \
-H "x-api-key: sk-unb-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"messages": [{ "role": "user", "content": "Why is the sky blue?" }]
}'Modelle auflisten
GET /v1/models ist die maßgebliche Quelle. Hier siehst du genau, welche IDs dein Key aufrufen darf, mit Kontextlänge, Tool-Support und Preis pro Token.
curl https://unbottled.ai/api/de-GLOBAL/v1/models \
-H "Authorization: Bearer sk-unb-YOUR_KEY"Modell-IDs: unsere oder die des Anbieters
Configs, die schon ein Modell nennen, musst du nicht umschreiben. Wir akzeptieren die gängigen Schreibweisen.
- Unsere IDs, so wie GET /v1/models sie listet: claude-sonnet-5.5, gpt-6.1-sol, glm-5.3. Nimm diese, wenn du neu anfängst.
- Anbieter-Schreibweisen gehen auch. Anthropic-IDs mit Datumsstempel (claude-sonnet-4-5-20250929 wird zu claude-sonnet-4.5), Versionsnummern mit Bindestrich, das Suffix -latest, das Kontext-Suffix [1m] und IDs mit Punkt wie gpt-5.5.
- Provider-Präfixe wie anthropic/... oder openai/..., damit IDs im OpenRouter-Stil aus einer bestehenden Config weiterlaufen.
- Nur auf /v1/messages: Eine Claude-ID, die dein Konto nicht aufrufen kann, etwa die eingebauten IDs, die Claude Code für seine Hintergrundaufrufe schickt, fällt auf das neueste Claude derselben Familie (Opus, Sonnet oder Haiku) zurück, das du aufrufen darfst. Claude Code läuft damit ohne zusätzliche Umgebungsvariablen. Jede andere unbekannte ID liefert 404 model_not_found.
Claude Code und Codex CLI mit anderen Modellen nutzen
Beide verbinden sich direkt. Kein Proxy, keine Übersetzungsschicht, nichts zu installieren.
Jedes Snippet nutzt standardmäßig glm-5.3. Es hat echte Läufe mit Claude Code und Codex CLI bestanden, ruft Tools zuverlässig auf und kostet pro Output-Token wenig. Läuft alles, tauschst du es gegen jede beliebige ID.
Claude Code
ANTHROPIC_BASE_URL="https://unbottled.ai/api/de-GLOBAL" \
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" \
claudeDas ist die ganze Antwort auf die Frage, wie Claude Code mit anderen Modellen läuft. ANTHROPIC_BASE_URL zeigt auf uns, ANTHROPIC_AUTH_TOKEN trägt deinen Key, die Modellvariablen entscheiden, was läuft. Ersetze die Modell-ID durch eine beliebige ID aus GET /v1/models: GPT, Gemini, Kimi, DeepSeek oder ein unzensiertes Modell. CLAUDE_CODE_MAX_CONTEXT_TOKENS steht auf dem echten Kontextfenster des Modells, damit Claude Code an der richtigen Stelle kompaktiert.
Codex CLI
UNBOTTLED_API_KEY="sk-unb-YOUR_KEY" codex \
-c 'model_providers.unbottled={name="unbottled.ai",base_url="https://unbottled.ai/api/de-GLOBAL/v1",env_key="UNBOTTLED_API_KEY",wire_api="responses"}' \
-c model_provider=unbottled \
-m glm-5.3Codex CLI bekommt einen eigenen Model-Provider mit wire_api auf responses. Es spricht mit uns die Responses API, genau wie mit OpenAI. Das Modell wechselst du per -m.
OpenCode, Continue, Aider und Cline funktionieren ebenfalls, alle getestet. Ihre Setups, die dauerhaften Config-Dateien und die Stolperfallen, die wir gefunden haben, stehen im Coding-Tools-Guide.
Alle Coding-Tools einrichtenWelches Modell für welchen Job
Jedes Modell unten unterstützt Tool Calling. Ein Klick auf den Namen zeigt Preis und Eckdaten, die ID kopierst du in deinen Code.
Frontier: härtester Code, tiefstes Reasoning
Große Refactorings, fremde Codebasen, lange Denkketten. Höherer Preis pro Token, weniger Irrwege.
- Claude Sonnet 5.5claude-sonnet-5.5
- GPT-6.1 Solgpt-6.1-sol
- Gemini 4 Argongemini-4-argon
- Kimi K3.1 Prokimi-k3.1-pro
- DeepSeek V4 Prodeepseek-v4-pro
Günstig und schnell: Agent-Loops, Massenjobs, Hintergrundaufrufe
Agent-Loops mit großen Prompts, Batch-Jobs, Klassifizierung, die Hintergrundaufrufe, die Coding-Tools den ganzen Tag abfeuern. Ein Bruchteil der Frontier-Preise.
- 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: kein Verweigerungsreflex
GLM 5.3 Uncensored und Qwen 3.6 Plus Uncensored sind Mainstream-Modelle ohne Verweigerungen. UncensoredLM v1.2 ist anders: eigenes Weltbild, nicht bloß ein entsperrtes Modell. Gleiche API, gleiche Tools.
- GLM 5.3 Uncensoredglm-5.3-uncensored
- Qwen 3.6 Plus Uncensoredqwen-3.6-plus-uncensored
- UncensoredLM v1.2uncensored-lm-v1.2
Zwischen zwei Modellen hin- und hergerissen? Die Vergleichsseiten stellen sie direkt gegenüber.
Was es kostet
Credits, abgerechnet pro Token. Keine Lizenzgebühr pro Nutzer.
- Die meisten Modelle rechnen zum gelisteten Token-Preis plus unserem Aufschlag ab. Gecachte Input-Tokens laufen zum Cache-Preis des Modells. Modelle über OpenRouter rechnen die echten Kosten ab, die OpenRouter für den Aufruf berechnet hat, plus denselben Aufschlag.
- Jede Antwort meldet usage.credits_charged. Was ein Aufruf gekostet hat, musst du nie raten.
- Bevor ein Aufruf startet, wird dein Guthaben gegen eine Worst-Case-Schätzung geprüft. Reicht es nicht, kommt HTTP 402 insufficient_credits: Nichts läuft, nichts wird berechnet.
- Beim Streaming gilt: Verbindung schließen stoppt die Generierung. Du zahlst nur, was gelaufen ist. Dasselbe gilt, wenn der Provider mitten im Stream ausfällt.
- Chat und API rechnen identisch ab. OpenRouter verteilt ein Modell auf mehrere Hoster, und manche sind teurer als der günstigste, den wir listen. Bei diesen Modellen ist der gelistete Preis deshalb eine Schätzung, usage.credits_charged der echte Betrag. Meldet OpenRouter für einen Aufruf keine Kosten, gilt der gelistete Preis.
- Dasselbe Credit-Guthaben wie in der Chat-App, das dort auch Bild, Video, Musik, Sprache und Websuche abdeckt. Die API selbst braucht ein bezahltes Konto: ein aktives Abo oder mindestens ein gekauftes Credit-Paket. Gratis-Credits schalten sie nicht frei.
- Abo: 800 Credits im Monat für $8.00.
- Credit-Paket: 500 Credits für $5.00. Pakete verfallen nie. Bezahlung per Karte oder Krypto.
Direkt, per Router oder bei uns?
Drei ehrliche Optionen. Jede ist für irgendwen die richtige.
Direkt bei OpenAI, Anthropic oder Google
Neue First-Party-Features landen dort zuerst. Kein Aufschlag durch einen Zwischenhändler. Nur die Bedingungen eines Anbieters. Nutzt du ausschließlich die Modelle eines Anbieters, geh direkt.
Ein Aggregator wie OpenRouter
Viele Modelle, Bezahlung nach Verbrauch. Offen gesagt: Viele unserer Modelle laufen über OpenRouter. Brauchst du nur reines Routing, bist du dort richtig.
unbottled.ai
Ein Key für drei Wire-Formate: Chat Completions, Responses und Anthropic Messages samt count_tokens. Claude Code und Codex CLI verbinden sich ohne Proxy. Unzensierte Modelle stehen neben den Mainstream-Modellen, hinter einer einmaligen Bestätigung ab 18. Dasselbe Guthaben zahlt Chat-App und API, aus Abo-Credits oder Paketen. Und unbottled.ai ist Open Source und selbst hostbar.
Grenzen, die du kennen solltest
Keine Überraschungen in Produktion. Das sind die harten Kanten.
- Zustandslos. Die Responses API läuft mit store auf false und lehnt previous_response_id ab. Schick in jedem Turn den vollständigen Verlauf. Das gilt für jeden Endpoint.
- Der Output ist auf 32768 Tokens pro Request begrenzt.
- Standardmäßig 60 Requests pro Minute und Key. Darüber kommt 429 mit Retry-After-Header. Agents, die viele Aufrufe abfeuern, bekommen ihren eigenen Key.
- count_tokens ist eine Schätzung, nicht der exakte Tokenizer des Providers. Gut, um Kontext zu bemessen, nicht für Abrechnungsmathematik.
- Tool Calls funktionieren nur bei Modellen, die sie unterstützen. Sonst kommt 400 tools_not_supported. GET /v1/models zeigt supports_tools für jedes Modell.
- Unzensierte Modelle brauchen eine einmalige Bestätigung ab 18 auf der Seite API-Keys. Ohne sie kommt 403 uncensored_consent_required, und nichts wird berechnet.
Was mit deinen Prompts passiert
Kurz gesagt: Wir behalten die Rechnung, nicht die Unterhaltung.
- Die API speichert keine Unterhaltung und legt keine Threads an. Bei uns bleibt nur der Abrechnungsdatensatz: welches Modell, wie viele Credits.
- Dein Prompt geht an den Provider, der das Modell betreibt. Für das, was er empfängt, gelten seine Bedingungen.
- In der Chat-App liegen Inkognito-Chats nur im lokalen Speicher deines Browsers, nicht auf unseren Servern.
FAQ
Ist unbottled.ai eine OpenRouter-Alternative?
Für viele Zwecke ja: ein Key, viele Modelle, Abrechnung pro Token. Die Unterschiede: unbottled.ai spricht die Anthropic Messages API und die OpenAI Responses API nativ, nicht nur Chat Completions. Es gibt unzensierte Modelle. Und die Chat-App läuft auf demselben Guthaben. Viele unserer Modelle laufen im Hintergrund über OpenRouter.
Kann ich Claude Code mit Nicht-Claude-Modellen nutzen?
Ja. Setz ANTHROPIC_BASE_URL auf die Anthropic-Basis-URL von unbottled.ai, leg deinen Key in ANTHROPIC_AUTH_TOKEN und wähl eine beliebige Modell-ID aus GET /v1/models. GPT, Gemini, GLM, Kimi, DeepSeek und die unzensierten Modelle laufen so alle in Claude Code.
Brauche ich ein neues SDK?
Nein. Nutz die offiziellen SDKs von OpenAI und Anthropic. Basis-URL und Key ändern, sonst nichts.
Gibt es einen kostenlosen API-Tarif?
Nein. Die Chat-App hat Gratis-Credits, die API nicht. Sie braucht ein Abo (800 Credits im Monat für $8.00) oder ein Credit-Paket (500 Credits für $5.00). Ein einmal gekauftes Paket hält die API aktiv, bis das Guthaben aufgebraucht ist.
Zahle ich den gelisteten Preis?
Bei den meisten Modellen ja: gelisteter Token-Preis plus unser Aufschlag. Modelle über OpenRouter rechnen die echten Kosten ab, die OpenRouter für den Aufruf berechnet hat, plus denselben Aufschlag, in der Chat-App wie über die API. Ihr gelisteter Preis ist eine Schätzung. Den exakten Betrag meldet jede Antwort in usage.credits_charged.
Welche Modelle kann ich aufrufen?
Aktuell 124 Chat-Modelle: Claude, GPT, Gemini, DeepSeek, Kimi, GLM, Qwen und unzensierte Modelle. GET /v1/models listet genau, was dein Key aufrufen darf, mit Preisen.
Speichert unbottled.ai meine Prompts?
Über die API nicht. Keine Unterhaltung wird gespeichert, nur der Abrechnungsdatensatz: Modell und berechnete Credits. Der Provider, der das Modell betreibt, sieht den Prompt, nach seinen eigenen Bedingungen.
Ein Key. Jedes Modell. Leg los.
Key erstellen, eine Basis-URL ändern, dein SDK behalten. Die API-Doku deckt jeden Endpoint, jedes Feld und jeden Fehlercode ab.