Schick dieselbe Claude-Anfrage an OpenRouter und an ein zweites Gateway, und beide antworten mit 200. Beide bieten einen Anthropic-Messages-Endpunkt, beide akzeptieren x-api-key und einen Bearer-Token, und beide rechnen zum Listenpreis des Herstellers ab. An der Oberfläche ist das ein Gleichstand.
Was dann noch zu vergleichen bleibt, ist Engineering: was auf den Token-Preis aufgeschlagen wird und was passiert, nachdem die Anfrage den eigenen Code verlassen hat. Vier Dinge unterscheiden sich tatsächlich – und nur eines davon betrifft die Anzahl der Modelle.
Was identisch ist
Beide Gateways liefern einen Schlüssel und ein Guthaben für Modelle von OpenAI, Anthropic, Google und den Open-Weight-Laboren, Prepaid-Guthaben, Bild-, Video- und Sprachmodelle unter demselben Schlüssel, Ausgabenlimits pro Schlüssel sowie Aufladen per Karte oder Alipay. Beide bedienen OpenAI Chat Completions und Anthropic Messages, Claude Code läuft also auf beiden ohne Änderung am Client.
Das ist wichtig zu betonen, weil viele Vergleichstabellen es noch immer anders implizieren: „Anthropic-kompatibel“ ist hier kein Unterscheidungsmerkmal, sondern Grundvoraussetzung.
Wo sie auseinandergehen
Die Zahlen stammen aus den öffentlichen APIs und der Dokumentation beider Anbieter; der Hauptsatz wurde am 12. Oktober 2026 geprüft, abweichende Daten sind im Text markiert.
| OpenRouter | Das andere Gateway | |
|---|---|---|
| Modelleinträge (normalisiert, eindeutige IDs) | 458 / 372 | 177 / 177 |
| Protokolle | Chat, Responses, Messages | Chat, Messages (beide Auth-Header) |
| Open-Weight-Modelle | Preis je Hosting-Anbieter | Ein Preis pro Modell-ID |
| Wo Limits und Fallback liegen | Request oder @preset
|
API-Schlüssel (Allowlist + Budget) |
| Eigene Provider-Schlüssel | Keine Plattformgebühr bis 25.000 $/Monat, danach 5 % | Kein dokumentiertes Äquivalent |
| Batch- und Flex-Preise | Etwa halber Preis | Kein Batch-Endpunkt dokumentiert |
| Grund für Cache-Miss | Keiner; nur cached_tokens fällt auf 0 |
diagnostics.cache_miss_reason |
| Thinking-Token-Zählung | In usage normalisiert |
output_tokens_details.thinking_tokens |
| Zero Data Retention | In jedem Tarif verfügbar | Keine ZDR-Option dokumentiert; Bilder 48 h |
| Routing innerhalb einer Region | EU oder US bei Business | Keines |
Der Antwortkörper ist die eigentliche Trennlinie
Eine Seite normalisiert die Nutzungsdaten über alle Hersteller hinweg, die andere reicht die Anthropic-Antwort unverändert durch. Normalisierung erkauft Portabilität: von Claude zu Gemini zu DeepSeek wechseln, ohne den Parser für usage anzufassen.
Der Preis dafür zeigt sich, wenn etwas schiefläuft. Auf der nativen Seite gibt es vier Felder, die OpenAI-kompatible Formen nicht ausdrücken können:
-
cache_creation.ephemeral_5m_input_tokensundcache_creation.ephemeral_1h_input_tokens– Cache-Schreibvorgänge in zwei Stufen gezählt -
output_tokens_details.thinking_tokens– Reasoning-Token getrennt von der Ausgabe -
diagnostics.cache_miss_reason– warum der Cache nicht getroffen hat (im Test:previous_message_not_found) -
safeguard_results– Ergebnisse der Sicherheitsprüfung
# Zwei Assertions, die aus einem stillen Fehler einen lauten machen
diag = resp.get("diagnostics") or {}
assert resp["usage"]["output_tokens_details"]["thinking_tokens"] > 0, "kein Thinking-Block: budget_tokens prüfen"
if reason := diag.get("cache_miss_reason"):
print(f"Cache-Miss: {reason}")
Die erste Assertion ist wichtiger, als sie aussieht. Ein zu kleines budget_tokens löst keinen Fehler aus; die API antwortet mit 200 und thinking_tokens bleibt 0. Über vier Claude-Modelle hinweg erzeugte 128 keinen Thinking-Block, 1024 schon.
Wo die Regeln liegen
OpenRouter wiederholt eine Anfrage mit einem anderen Modell über eine models-Liste im Request oder über ein gespeichertes Preset, das als @preset/<name> referenziert wird; dazu kommt der Router openrouter/auto. Der Client muss in beiden Fällen etwas OpenRouter-Spezifisches senden.
Das andere Gateway legt die Regeln an den API-Schlüssel: Modell-Allowlist, Token-Budget. Der Client sendet weiterhin seinen gewohnten Modellnamen; ein nicht gelistetes Modell liefert model not allowed (403), ein überzogenes Budget 429.
Auch der Geltungsbereich der Rate-Limits unterscheidet sich. OpenRouter schreibt ausdrücklich, dass zusätzliche Schlüssel das Limit nicht erhöhen – die Kapazität wird global verwaltet. Die Troubleshooting-Doku des anderen Gateways nennt als Maßnahme gegen 429, den Traffic auf mehrere Token zu verteilen; Limits werden dort also pro Token gezählt.
Die Rechnung: Der Aufschlag ist nicht die Geschichte
OpenRouter schlägt beim Aufladen auf: 5,5 % bei Kartenzahlung im Standard-Tarif (8 % bei Business), nicht erstattungsfähig – pro Token also Listenpreis × 1,055.
| Modell | Listenpreis | OpenRouter (mit Gebühr) | Das andere Gateway (Rabatt) |
|---|---|---|---|
| Claude Opus 5.5 | $4 / $20 | $4.22 / $21.10 | Gruppenrabatt |
| Claude Sonnet 5.5 | $2 / $10 | $2.11 / $10.55 | Gruppenrabatt |
| GPT-6.1 Sol | $2 / $10 | $2.11 / $10.55 | Gruppenrabatt |
| GPT-6 Astra | $10 / $50 | $10.55 / $52.75 | 35 % unter Liste |
| Gemini 3.8 Flash | $0.75 / $3.75 | $0.79 / $3.96 | Gruppenrabatt |
| GLM-5.3 | $1.40 / $4.40 | $1.48 / $4.64 | Gruppenrabatt |
Die Rabattspalte nennt nur den Rabatt, keinen umgerechneten Preis: Gruppenrabatte unterscheiden sich je Modell. Die 35 % sind ein Schnappschuss der Preisseite vom 13. Oktober 2026 für ein Modell ($6,50 / $32,50 gegenüber $10 / $50 Liste).
Bei 1.000 $ monatlicher Astra-Nutzung zum Listenpreis kommt OpenRouter auf 12.660 $ pro Jahr; die rabattierte Seite hochgerechnet auf 7.800 $. Eine Differenz von 4.860 $.
Doch die größere Zahl steckt im Cache. Anthropics Regeln – 1,25× beim Schreiben, 0,1× beim Lesen, 2× bei 1 Stunde TTL – gelten auf beiden Seiten. Ein Kontext von 60.000 Token, 40 Turns pro Tag:
- Kein Treffer: 0,06M × $2 = 0,12 $ pro Turn, 4,80 $ pro Tag
- Voller Treffer: 0,15 $ fürs Schreiben, dann 39 Turns à 0,012 $, also 0,62 $ pro Tag
Das sind 4,18 $ pro Tag, rund 125 $ im Monat – ein Faktor 10 bei identischen Token. Und nur eine Seite sagt, warum ein Treffer ausblieb.
Welche Seite zu welcher Anforderung passt
| Anforderung | Seite | Warum |
|---|---|---|
| Multi-Modell-Vergleich, Long Tail bei Open Weights | OpenRouter | 372 zu 177; Qwen3 37 zu 12 |
| Code, der oft zwischen Herstellern wechselt | OpenRouter | Normalisierte Felder, kein Parser-Umbau |
| Redundanz über Provider hinweg | OpenRouter | Mehrere Hosts mit Sticky Routing |
| Datenhaltung, ZDR, Sovereign Cloud | OpenRouter | Dokumentiertes ZDR und In-Region-Routing |
| Rate-Limit-Politik nach Doku umsetzen | OpenRouter | 402/403/429 getrennt plus In-Flight-Budget |
| Modell auf Claude-Toolchain festgelegt | Das andere Gateway | Native Felder, thinking und tool_use intakt |
| Debuggen, warum der Cache nicht traf | Das andere Gateway |
cache_miss_reason in der Antwort |
| Budgets und Umgebungstrennung pro Token | Das andere Gateway | Eingebaut, kein Wrapper nötig |
| Ein Schlüssel für Chat, Bilder und Sprache | Das andere Gateway | Getrennte Endpunkte |
Claude Code wechselt mit drei Umgebungsvariablen:
export ANTHROPIC_BASE_URL="https://api.crazyrouter.com"
export ANTHROPIC_AUTH_TOKEN="dein-schluessel"
export ANTHROPIC_MODEL="claude-sonnet-5-5"
Was dieser Vergleich nicht abdeckt
Latenz und Fehlerraten sind nicht gemessen – keine der beiden Seiten bietet eine belastbare Grundlage für einen Vergleich von einem einzelnen Rechner aus. Die 429-Schwelle ist aus einer Troubleshooting-Doku abgeleitet, nicht aus einem Lasttest. Die OpenRouter-Seite ist dokumentiert, nicht kostenpflichtig getestet; tatsächliches Abrechnungsverhalten prüft man besser an der eigenen Rechnung. Und die 35 % sind ein Tages-Schnappschuss für ein Modell – nicht extrapolierbar.
Zieh die Zahlen selbst, bevor du dich festlegst:
curl -s https://openrouter.ai/api/v1/models | jq '.data | length'
curl -s https://crazyrouter.com/api/pricing | jq '.data | length'
Quellen
Crazyrouter
OpenRouter (Vergleichsquellen)
Top comments (0)