Zurück zum Blog

KI-Patterns

LLM-Kostentransparenz: Formeln, Feldnamen und Preisquellen im Praxistest

Wer KI-Kosten pro Kunde, Projekt oder Abteilung ausweisen will, braucht drei Dinge: die richtigen Token-Zahlen, die richtigen Preise und eine Formel, die beides zusammenbringt. Wir haben bei zwölf Anbietern nachgemessen, wie gut das gelingt.

SvK Sven von Känel 12 Min Lesezeit
  • KI
  • LLM-Kosten
  • Controlling

TLDR

Kosten pro Aufruf liefern xAI, Requesty, EU Router und Cortecs direkt in der Antwort – und dort stimmte unsere Formel auf den Cent. OpenAI, Anthropic, Gemini und Mistral liefern nur Token-Zahlen; die Kosten muss man selbst rechnen. Dafür braucht man aktuelle Preise, die OpenAI, Mistral und Gemini nur auf Webseiten veröffentlichen. Und bei Routern gilt: Gelistet ist nicht berechnet. Teil 3 der Serie „Was ein LLM-Aufruf wirklich kostet".

Einleitung

Spätestens wenn die zweite Abteilung eine KI-Anwendung nutzt, kommt die Frage: Wer hat welchen Anteil an der Rechnung? Die Monatsrechnung des Anbieters hilft da wenig – sie kennt keine Kunden, keine Projekte, keine Abteilungen. Kostentransparenz entsteht nur, wenn man jeden Aufruf selbst bepreist oder der Anbieter die Kosten pro Aufruf mitliefert.

Beides ist schwieriger, als es aussieht. Dieser Teil zeigt, woran es hängt.

Reicht nicht die Abrechnung pro API-Key?

Naheliegender Einwand: Der Anbieter rechnet doch pro API-Key ab – warum jeden Aufruf selbst bepreisen? Der Key beantwortet genau eine Frage: welche Anwendung? Alle anderen Kostenfragen brauchen Kosten pro Aufruf.

  • Kunde, Nutzer oder Feature. Ein SaaS-Produkt bedient viele Kunden über denselben Code. Einen Key pro Kunde anzulegen, zu verteilen und zu rotieren skaliert nicht. Ohne Kosten pro Kunde fehlen aber Marge und Ausreißer.
  • Kosten pro Vorgang. Was kostet eine bearbeitete Rechnung, ein beantwortetes Ticket, ein Agentenlauf? Erst die Stückkosten zeigen den Nutzen; die Summe pro Key hat keinen Nenner.
  • Budgets in Echtzeit. Ein Lauf soll stoppen, bevor das Budget erreicht ist, nicht am Monatsende. Dafür sind die Admin-APIs zu grob oder fehlen: OpenAI liefert Kosten nur tageweise. Anthropic verweigert einer Einzelorganisation den Zugriff (HTTP 403). Für die Gemini API gibt es nur Cloud Billing (nicht messbar). Mistral bietet eine Usage-API nur im Enterprise-Tarif (nicht messbar). EU Router hat nur das Dashboard (nicht gemessen).
  • Mehrere Anbieter und Router. Die Kosten liegen in mehreren Dashboards und in verschiedenen Einheiten: Cortecs meldet Mikro-Euro, xAI Dollar-Ticks. Bei Routern bestimmt der tatsächlich gewählte Upstream den Preis (Abschnitt 7 und Teil 4); ein Key pro Router sagt darüber nichts.
  • Interne Umlage oder Weiterberechnung. Wer Kosten auf Kostenstellen umlegt oder mit Aufschlag weiterberechnet, braucht belegbare Einzelposten.
  • Optimierung belegen. Ob Prompt Caching oder ein niedrigerer Thinking-Level wirklich spart, zeigen nur Cache- und Reasoning-Tokens pro Aufruf (Teil 1 und Teil 2).

1. Die Formel

Die Kosten eines Aufrufs ergeben sich aus fünf Token-Arten und ihren Preisen:

Kosten = (Input − Cache-Read − Cache-Write) × Input-Preis
       + Cache-Read  × Read-Preis
       + Cache-Write × Write-Preis (5 min oder 1 h)
       + Output      × Output-Preis      (Reasoning steckt im Output)

Fehlt ein Cache-Preis, setzen wir den Input-Preis an – lieber etwas zu teuer geschätzt als Kosten verschwiegen. Wo der Anbieter selbst Kosten meldete, wich diese Formel um 0,0 % ab: bei xAI, Requesty, EU Router und für Claude über Cortecs.

2. Das Feldnamen-Chaos

Die Formel ist einfach. Das Einsammeln der Zahlen nicht – jeder Anbieter nennt dieselbe Größe anders:

Anbieter Input enthält Cache-Tokens? Cache-Read Cache-Write Reasoning
Anthropic nein cache_read_input_tokens cache_creation_input_tokens (+ 5 min / 1 h) im Output
OpenAI Responses ja input_tokens_details.cached_tokens input_tokens_details.cache_write_tokens output_tokens_details.reasoning_tokens
OpenAI-kompatibel ja prompt_tokens_details.cached_tokens je Router verschieden completion_tokens_details.reasoning_tokens
Gemini ja cachedContentTokenCount – thoughtsTokenCount
Requesty ja cached_tokens caching_tokens (+ 5 min / 1 h) –

Bei Anthropic enthält input_tokens die gecachten Tokens nicht; bei OpenAI-kompatiblen APIs sind sie in prompt_tokens enthalten. Die Feldnamen unterscheiden sich bei jedem Anbieter. Requesty meldet Cache-Writes als caching_tokens. Gemini meldet das Denken als thoughtsTokenCount.

Hinweis: Eine besonders tückische Falle: Bricht OpenAI eine Antwort wegen max_output_tokens ab, meldet die Usage für diesen Aufruf 0 Tokens – Input eingeschlossen. Die gute Nachricht aus der Admin-API (Abschnitt 4): Berechnet wurden diese Aufrufe auch nicht. Die schlechte: Eine Antwort gab es ebenfalls nicht – die Anwendung muss den Fall erkennen und wiederholen.

3. Kosten pro Aufruf: wer liefert sie?

Anbieter / Router Kosten in der Antwort Format Abweichung zu unserer Formel
xAI ja cost_in_usd_ticks (10¹⁰ = 1 USD) 0,0 %
Requesty ja usage.cost in USD 0,0 %
EU Router ja cost (USD) und cost_eur 0,0 % (Claude)
Cortecs ja cost als Ganzzahl in Mikro-Euro 0,0 % (Claude)
OpenRouter ja usage.cost in USD 0,0 % (Claude)
OpenAI, Anthropic, Gemini, Mistral, IONOS nein nur Token-Zahlen –

xAI liefert die Kosten in Ticks; 10 Milliarden Ticks sind ein Dollar. Requesty und OpenRouter liefern USD, EU Router zusätzlich Euro zum EZB-Tageskurs. Cortecs liefert entgegen der eigenen API-Referenz ebenfalls Kosten in jeder Antwort – als Ganzzahl in Mikro-Euro, was nirgends dokumentiert ist. Ein Kosten-Header in der HTTP-Antwort existiert bei keinem Anbieter.

4. Kosten über Admin-APIs

Wer keine Kosten pro Aufruf bekommt, kann bei einigen Anbietern aggregierte Kosten abfragen – meist nur mit einem Admin-Schlüssel:

Anbieter Endpunkt Auflösung Status
OpenAI /v1/organization/costs, /usage/completions Kosten täglich je Projekt, Usage minütlich je Schlüssel stimmte exakt
xAI management-api.x.ai/v1/billing/teams/{team}/usage bis sekundengenau stimmte exakt
Anthropic /v1/organizations/cost_report, /usage_report/messages Kosten täglich je Workspace für Einzelorganisationen gesperrt
Cortecs /v1/manage/logs, /manage/usage pro Anfrage, inkl. Fallbacks nicht gemessen
Gemini nur Cloud Billing Stunden bis Tage Verzug nicht messbar
Mistral Admin-API nur im Enterprise-Tarif täglich nicht messbar

Bei OpenAI meldete die Admin-API für unseren Schlüssel exakt dieselben Token-Zahlen wie unsere Rohdaten; die drei abgebrochenen Antworten mit 0 Usage zählte sie gar nicht als Anfrage – berechnet wurden sie also auch nicht. Die Tageskosten stimmten für alle drei Modelle auf den Cent mit unserer Formel überein und waren schon am selben Tag abrufbar. Kosten gibt es nur tageweise, und der Usage-API fehlt ein Reasoning-Feld. Nebenbei zeigt die Abrechnung eine eigene Position für 12-Stunden-Cache-Writes. Die Management-API von xAI meldete exakt die Summe der Kostenfelder aller Einzelantworten. Anthropic liefert Kosten laut Doku tageweise je Workspace (nicht gemessen) – für unsere Einzelorganisation verweigerte die API selbst mit organisationsweitem Schlüssel den Zugriff (HTTP 403). Für die Gemini API gibt es nur Cloud Billing (nicht messbar). Mistral bietet eine Usage-API nur im Enterprise-Tarif (nicht messbar). EU Router hat keine API für den Kostenverlauf, nur das Dashboard (nicht gemessen).

Tipp: Für einen sauberen Abgleich mit Admin-APIs braucht jede Anwendung einen eigenen Schlüssel in einem eigenen Projekt oder Workspace. Sonst landen Kosten mehrerer Anwendungen im selben Topf.

5. Woher die Preise kommen

Eigene Kostenrechnung braucht aktuelle Preise. Maschinenlesbar liefern sie nur einige:

  • Per API: xAI , Cortecs (in EUR) , EU Router, Requesty und OpenRouter.
  • Nur Webseite: OpenAI, Mistral und Gemini. Anthropic liefert über /v1/models Fähigkeiten und Effort-Stufen, aber keine Preise.

Dazu kommen öffentliche Sammlungen. models.dev führt keinen Preis für den 1-Stunden-Cache-Write , LiteLLM schon. Die Cache-Faktoren in der OpenRouter-Dokumentation weichen von den Preisseiten der Anbieter ab.

Und Preise haben Stufen: xAI verdoppelt alle Preise ab 200 000 Tokens Kontext , GPT-6.1 Sol ab 272 000 Tokens Input. Ein Preis pro Modell reicht also nicht – es braucht einen Preis pro Modell und Kontextgröße.

6. Unser Katalog im Abgleich

Für CompanyWizard betreiben wir einen eigenen Modellkatalog. Er führt models.dev (welche Modelle es gibt) mit LiteLLM (genauere Cache-Preise, auch für 1 Stunde) zusammen und prüft die Preise gegen OpenRouter; Abweichungen über 25 % landen im Log. Router-Preise stehen als eigene Einträge je Hoster daneben, bei Cortecs in Euro.

Wir haben den Katalog gegen die Messungen gehalten:

  • Preise: Bei allen gemessenen Modellen, die der Katalog führt, stimmten die Preise mit den Preisseiten überein.
  • Effort-Stufen: Auch die Stufen stimmten – für Claude, Gemini und GPT-5.6 Luna genau die Werte, die die API annahm.
  • Lücken: Drei der gemessenen Modelle fehlten: Claude Sonnet 5 bei Anthropic direkt, GPT-6.1 Sol und gpt-5-mini bei OpenAI.

Die Lücken entstehen durch den Freigabeschritt: Neue Modelle kommen als Vorschlag in den Katalog und erst nach manueller Prüfung zu den Anwendungen. Das ist gewollt – ein falscher Preis ist schlimmer als ein fehlender –, kostet aber Aktualität.

7. Gelistet ist nicht berechnet

Bei Routern kommt eine weitere Unsicherheit hinzu: Der gelistete Preis ist oft der Preis des günstigsten Upstreams, berechnet wird der tatsächlich gewählte.

Router Modell Abweichung vom gelisteten Preis (Median)
EU Router gpt-oss-120b +103 %
Cortecs gpt-oss-120b +50 % bis +67 %
Cortecs DeepSeek V4.1 Flash +44 %
Cortecs, EU Router, Requesty Claude Sonnet 5 0 %

Bei Open-Source-Modellen lagen die berechneten Kosten bis zu 170 % über dem Listenpreis. Bei Claude stimmten sie, dafür listet EU Router Claude Sonnet 5 10 % teurer als die anderen.

8. So haben wir es in .NET gelöst

Microsoft.Extensions.AI kennt eine Eigenschaft für Cache-Reads, aber keine für Cache-Writes. Der Anthropic-Adapter legt sie deshalb in ein Zusatzfeld – und nur, wenn der Wert größer als 0 ist:

public const String CacheCreationInputTokensKey = "CacheCreationInputTokens";

public TurnTokenUsage Add(UsageDetails? usage)
{
    var cacheWrite = usage.AdditionalCounts?.TryGetValue(CacheCreationInputTokensKey, out var written) == true ? written : 0L;

    return new TurnTokenUsage(
        Input      + (Int32) (usage.InputTokenCount       ?? 0),
        Output     + (Int32) (usage.OutputTokenCount      ?? 0),
        CacheRead  + (Int32) (usage.CachedInputTokenCount ?? 0),
        CacheWrite + (Int32) cacheWrite);
}

Quelle: TurnTokenUsage (Auszug)

In CompanyWizard zählt TurnTokenUsage an jeder Stelle mit, an der ein Gesprächszug ein Modell aufruft, auch in Tool-Schleifen und nach Unterbrechungen. Ein einziger Buchungsweg schreibt daraus einen Datensatz pro Zug.

Lesson Learned: Ein Stream, der mittendrin abbricht, bucht bei uns nichts – das Anthropic-SDK meldet die Usage erst am Ende des Streams. Diese Lücke ist bekannt und dokumentiert. Geschlossen ist sie nicht.

9. Was bewusst offen blieb

  • Admin-APIs: Anthropic (Einzelorganisation, HTTP 403) und Cortecs (kein Management-Schlüssel) haben wir nicht abgeglichen.
  • Batch-, Flex- und Priority-Tarife: nicht Teil dieser Serie.
  • Bildpreise: ebenfalls nicht.

Fazit: übertragbare Patterns

  1. Usage pro Anbieter normalisieren, bevor gerechnet wird – vor allem die Frage, ob Input die Cache-Tokens enthält.
  2. Kostenfelder nutzen, wo es sie gibt, und die eigene Formel daran prüfen.
  3. Preise mit Stand und Kontextstufe speichern, nicht als eine Zahl pro Modell.
  4. Den Key für die Anwendung, die Kosten pro Aufruf für alles darunter: Ein eigener Schlüssel pro Anwendung hält Admin-APIs zuordenbar; Kunde, Vorgang und Budget brauchen die Kosten pro Aufruf.
  5. Bei Routern den Upstream pinnen, wenn der Preis planbar sein muss.

Alle Rohdaten und Skripte: github.com/evanto-media-ag/llm-caching-reasoning-costs

Die Serie

Referenzen


Sie wollen KI-Kosten pro Kunde oder Abteilung ausweisen? Lassen Sie uns 30 Minuten über Ihren konkreten Workflow sprechen – unverbindlich, kostenlos, mit konkreten Vorschlägen am Ende. 30-Min-Gespräch buchen

Hinweis: Artikel mit KI-Unterstützung erstellt.

NEWSLETTER

Vier bis sechs Mal im Jahr, kein Werbe-Lärm.

Ein Pattern, ein Case, eine Empfehlung. Anmeldung mit Double-Opt-In, jederzeit kündbar.