Claude Code/API-Kosten steuern: Token-Budgets, Warnungen und Limits
Schätze Claude-Code/API-Kosten, logge Tokenverbrauch, setze Warnungen und verhindere Überraschungen.
Claude Code ist im Alltag leichter zu verantworten, wenn du die Kosten erklären kannst, bevor die Rechnung kommt. Der Preis hängt nicht nur vom Modell ab. Entscheidend sind Kontextgröße, gelesene Dateien, Antwortlänge, Prompt-Cache-Treffer und die Frage, ob du ein Claude-Abo oder direkte Anthropic-API-Abrechnung nutzt.
Dieser Leitfaden wurde am 2026-06-03 mit offiziellen Quellen geprüft: Anthropic API pricing, Claude Code cost management, Prompt caching, Token counting und Usage and Cost API. Preise ändern sich; prüfe offizielle Seiten vor Einkauf, Budgetfreigabe oder Kundenschätzung erneut.
Kostenmodell in einfachen Worten
| Begriff | Bedeutung | Kosteneffekt |
|---|---|---|
| Tokens | Einheiten, die Claude liest und schreibt | Lange Dateien, Logs, Prompts und Code erhöhen den Verbrauch |
| Kontext | Verlauf, gelesene Dateien, CLAUDE.md, Tool-Definitionen | Alter Kontext wird in späteren Anfragen weiter mitgeschickt |
| Prompt Cache | Wiederverwendung eines gleichen Prompt-Präfixes | Wiederholte Eingaben werden deutlich günstiger |
| Budget Guard | Limit pro Aufgabe, Tag, Person oder Workspace | Stoppt offene Ausgaben, bevor sie eskalieren |
geschätzte Kosten = Eingabe-Tokens * Eingabetarif
+ Cache-Write-Tokens * Cache-Write-Tarif
+ Cache-Read-Tokens * Cache-Read-Tarif
+ Ausgabe-Tokens * Ausgabetarif
Am 2026-06-03 listet die offizielle Tabelle Sonnet 4.6 mit $3/MTok Eingabe und $15/MTok Ausgabe. Haiku 4.5 liegt bei $1 und $5. Opus 4.8/4.7/4.6 liegt bei $5 und $25. Cache Reads kosten 10% des Eingabetarifs; 5-Minuten-Cache-Writes kosten 1.25x.
Der häufigste Kostentreiber ist nicht das Lesen, sondern die offene Ausgabe. Aus “erkläre alles ausführlich” sollte “maximal fünf Befunde, nach Schwere sortiert, je zwei Zeilen” werden.
Kontrollschleife
flowchart LR
A["Aufgabe definieren"] --> B["Eingabe kürzen"]
B --> C["Modell wählen"]
C --> D["Tokens schätzen"]
D --> E{"Im Budget?"}
E -- "Ja" --> F["Claude ausführen"]
E -- "Nein" --> B
F --> G["usage loggen"]
G --> H{"Schwelle erreicht?"}
H -- "Ja" --> I["Stoppen, warnen oder Modell wechseln"]
H -- "Nein" --> A
In Claude Code beginnst du mit /usage und /context. Nutze /clear, wenn du zu einer anderen Aufgabe wechselst, und /compact, wenn Entscheidungen erhalten bleiben sollen, nicht aber der gesamte Verlauf. /usage ist eine lokale Schätzung; maßgeblich sind Console und bei Organisationen die Usage-and-Cost-Berichte.
Beispiel 1: Monatskosten schätzen
Dieses Skript ruft keine API auf. Es rechnet täglichen MTok-Verbrauch in Monatskosten um.
// claude-cost-estimator.mjs
const RATES = {
opus48: { input: 5, output: 25, cacheRead: 0.5 },
sonnet46: { input: 3, output: 15, cacheRead: 0.3 },
haiku45: { input: 1, output: 5, cacheRead: 0.1 },
};
const [model = "sonnet46", days = "22", input = "0.25", output = "0.06", cacheRead = "0.20"] =
process.argv.slice(2);
if (!RATES[model]) {
throw new Error(`Unknown model: ${model}`);
}
const rate = RATES[model];
const dailyUsd =
Number(input) * rate.input +
Number(output) * rate.output +
Number(cacheRead) * rate.cacheRead;
console.log({
model,
workDays: Number(days),
dailyUsd: Number(dailyUsd.toFixed(4)),
monthlyUsd: Number((dailyUsd * Number(days)).toFixed(2)),
});
node claude-cost-estimator.mjs sonnet46 22 0.25 0.06 0.20
node claude-cost-estimator.mjs haiku45 22 0.25 0.06 0.20
Es geht nicht um eine perfekte Rechnung, sondern um Größenordnung. Plane 20-30% Puffer für Tool-Definitionen, Wiederholungen, Cache Writes und längere Antworten.
Beispiel 2: API-Aufruf mit Tageslimit
Dieses Beispiel zählt Tokens vorab, schreibt das tatsächliche usage in JSONL und stoppt, wenn das Tagesbudget überschritten würde.
npm init -y
npm i @anthropic-ai/sdk
// budgeted-message.mjs
import Anthropic from "@anthropic-ai/sdk";
import fs from "node:fs";
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const model = process.env.CLAUDE_MODEL ?? "claude-sonnet-4-6";
const maxTokens = Number(process.env.MAX_TOKENS ?? 700);
const dailyBudgetUsd = Number(process.env.DAILY_BUDGET_USD ?? 5);
const RATES = {
"claude-opus-4-8": { input: 5, output: 25, cacheWrite5m: 6.25, cacheRead: 0.5 },
"claude-sonnet-4-6": { input: 3, output: 15, cacheWrite5m: 3.75, cacheRead: 0.3 },
"claude-haiku-4-5": { input: 1, output: 5, cacheWrite5m: 1.25, cacheRead: 0.1 },
};
function usdFromUsage(usage, rate) {
return (
(usage.input_tokens ?? 0) * rate.input +
(usage.output_tokens ?? 0) * rate.output +
(usage.cache_creation_input_tokens ?? 0) * rate.cacheWrite5m +
(usage.cache_read_input_tokens ?? 0) * rate.cacheRead
) / 1_000_000;
}
function todayTotalUsd(path) {
if (!fs.existsSync(path)) return 0;
const today = new Date().toISOString().slice(0, 10);
return fs.readFileSync(path, "utf8")
.trim()
.split("\n")
.filter(Boolean)
.map((line) => JSON.parse(line))
.filter((row) => row.date === today)
.reduce((sum, row) => sum + row.usd, 0);
}
const messages = [
{ role: "user", content: "List only the top three bug risks in this TypeScript function." },
];
const rate = RATES[model];
if (!rate) throw new Error(`No rate table for ${model}`);
const counted = await anthropic.messages.countTokens({ model, messages });
const worstCaseUsd = (counted.input_tokens * rate.input + maxTokens * rate.output) / 1_000_000;
const logPath = "claude-usage.jsonl";
if (todayTotalUsd(logPath) + worstCaseUsd > dailyBudgetUsd) {
throw new Error(`Budget stop: projected daily spend exceeds $${dailyBudgetUsd}`);
}
const response = await anthropic.messages.create({
model,
max_tokens: maxTokens,
cache_control: { type: "ephemeral" },
system: "You are a concise senior code reviewer. Return only actionable findings.",
messages,
});
const usd = usdFromUsage(response.usage, rate);
fs.appendFileSync(logPath, JSON.stringify({
date: new Date().toISOString().slice(0, 10),
model,
usd: Number(usd.toFixed(6)),
usage: response.usage,
}) + "\n");
console.log({ id: response.id, usd: Number(usd.toFixed(6)), usage: response.usage });
ANTHROPIC_API_KEY=sk-ant-...
DAILY_BUDGET_USD=5 node budgeted-message.mjs
Für Einsteiger: Vor dem Senden wiegen, danach den Beleg speichern, vor dem Tageslimit stoppen.
Beispiel 3: Team-Reporting
Organisationen können die Admin Usage and Cost API nutzen. Dafür ist ein Admin-API-Key nötig; normale API-Keys und Einzelkonten reichen nicht.
curl "https://api.anthropic.com/v1/organizations/usage_report/messages?\
starting_at=2026-06-01T00:00:00Z&\
ending_at=2026-06-08T00:00:00Z&\
group_by[]=model&\
bucket_width=1d" \
--header "anthropic-version: 2023-06-01" \
--header "x-api-key: $ANTHROPIC_ADMIN_KEY"
| Signal | Risiko | Maßnahme |
|---|---|---|
| Opus-Anteil | Einfache Aufgaben nutzen Premium-Modell | Zusammenfassungen, Übersetzung, Formatierung zu Sonnet/Haiku routen |
| Ausgabe-Tokens | Antworten sind zu lang | Befunde, Zeilen und max_tokens begrenzen |
| Cache Reads | cache_read_input_tokens bleibt nahe null | Zeitstempel und Zufallswerte aus dem Cache-Präfix entfernen |
Drei konkrete Einsatzfälle
Solo-Entwicklung: Sonnet als Standard, Opus nur für Architektur und schwieriges Debugging. Bei Aufgabenwechsel /clear verwenden.
Content und Lokalisierung: Styleguide und Glossar als stabilen Präfix cachen, nur den Artikeltext austauschen. Für große asynchrone Läufe lohnt der Blick auf den 50%-Batch-API-Rabatt.
Training und Team-Rollout: Schulungstage erzeugen ungewohnte Parallelität. Tagesbudget, Warnschwellen und Prompt-Regeln vorher definieren. Für strukturierte Einführung siehe /training/.
Häufige Fehler
API-Key ändert die Abrechnung. Die offizielle Hilfe erklärt, dass ANTHROPIC_API_KEY in Claude Code Vorrang vor einem angemeldeten Abo haben kann. Prüfe /status.
Cache wird angenommen, nicht gemessen. Prompt Caching braucht einen stabilen Präfix. Zeitstempel oder UUIDs im Systemprompt können Treffer verhindern.
Ausgabe bleibt offen. Reviews brauchen maximale Befundzahl, Zusammenfassungen eine Länge, Codegenerierung einen Dateibereich.
Alte Preise werden kopiert. Modelle und Preise ändern sich. Vor Rechnern, Angeboten und Trainingsunterlagen die offizielle Tabelle prüfen.
Billige Proxys ohne Audit. Wenn Modellidentität, Logs und Credentials unklar sind, ist der Rabatt kein belastbarer Kostenvorteil.
Verwandte Artikel
- Claude Code token optimization
- Claude Code pricing guide
- Claude Code context management
- Claude Code permission budget loop
Wiederverwendbare Budgetvorlagen, Prompt-Templates und Checklisten findest du unter /products/.
Praxisergebnis
In den ClaudeCodeLab-Workflows kamen die größten Einsparungen durch einfache Kontrollen: gemeinsame Regeln cachen, Übersetzung und Formatierung an Haiku/Sonnet geben, Opus für schwierige Entscheidungen reservieren und jedes usage als JSONL speichern. Starte mit 80%-Warnung, 100%-Stopp und Kontextbereinigung beim Aufgabenwechsel.
Kostenloses PDF: Claude-Code-Cheatsheet
E-Mail eintragen und eine Seite mit Befehlen, Review-Gewohnheiten und sicheren Workflows herunterladen.
Wir schützen Ihre Daten und senden keinen Spam.
Über den Autor
Masa
Engineer für praktische Claude-Code-Workflows und Team-Einführung.
Ähnliche Artikel
Claude Code Permission Safety Ladder: Zugriff kontrolliert erweitern
Von read-only zu begrenzten Änderungen, Prüfbefehlen und Deploy-Checks mit klarer Kontrolle.
Claude Code Small PR Proof Pack: kleine Änderungen reviewbar machen
Ein Proof Pack für Claude-Code-PRs: Diff, Checks, öffentliche URL, CTA-Pfad und Rollback.
Claude-Code-Review-Gate vor dem Commit
Vor dem Commit mit Claude Code prüfen: Diff, Build, öffentliche URL, Gumroad-Links, Beratung-CTA, fehlende Tests und fremde Dateien.