Claude Fable 5.1 API: Praktischer Leitfaden für HTTP, Aufwand, Tools und Caching
Claude Fable 5.1 wurde am 1. September 2026 veröffentlicht. Die API-Modell-ID lautet exakt claude-fable-5-1 – ohne Datumssuffix. Der Preis entspricht Fable 5: 10 US-Dollar pro Million Eingabe-Token und 50 US-Dollar pro Million Ausgabe-Token. Cache-Lesevorgänge kosten jetzt 0,25 US-Dollar pro Million Token. Außerdem bringt das Modell drei grundlegende Änderungen gegenüber Fable 5 mit.
Dieser Leitfaden zeigt den kompletten Ablauf:
- API-Schlüssel erstellen
- Erste Anfrage senden
- Aufwand und Kosten steuern
- Antworten streamen
- Tools ohne erzwungenes
tool_choiceverwenden - Ablehnungen mit Fallbacks behandeln
- Fortschrittsaktualisierungen anzeigen
- Cache-Treffer über das
usage-Objekt prüfen
Alle Beispiele verwenden reines HTTP mit JSON. Sie können sie deshalb zunächst in Apidog erstellen und debuggen, bevor Sie sie in Ihren Anwendungscode übernehmen.
Wenn Sie einen bestehenden Fable-5- oder Opus-5-Dienst migrieren, lesen Sie zusätzlich den vollständigen Migrationsleitfaden. Für einen Überblick lesen Sie Was ist Claude Fable 5.1?.
Vor dem ersten Aufruf: Drei Fehler, die 400 zurückgeben
1. Denken ist adaptiv
Thinking kann nicht deaktiviert oder mit einem Token-Budget konfiguriert werden. Fable 5.1 verwendet bei jeder Anfrage adaptives Denken.
Lassen Sie thinking weg oder verwenden Sie:
{"type": "adaptive"}
Die folgenden Varianten führen zu einem 400-Fehler:
{"type": "disabled"}
{"type": "enabled", "budget_tokens": 10000}
Wenn Sie von Opus 5 migrieren, entfernen Sie disabled und steuern Sie die Ausgabetiefe stattdessen über output_config.effort.
2. Erzwungene Tool-Aufrufe werden nicht unterstützt
Diese Werte schlagen fehl:
{"type": "any"}
{"type": "tool", "name": "..."}
Die Fehlermeldung lautet:
tool_choice: type "tool" and "any" are not supported for this model.
Verwenden Sie stattdessen auto und folgen Sie dem Tool-Muster aus Schritt 5.
3. Die Organisation benötigt 30 Tage Datenaufbewahrung
Fable 5.1 ist ein abgedecktes Modell. Verwendet Ihre Organisation oder Ihr Arbeitsbereich keine Datenaufbewahrung, kann die API trotz eines korrekten Request-Bodys mit einem allgemeinen 400 invalid_request_error antworten.
Wenn der erste Aufruf fehlschlägt, prüfen Sie daher zuerst die Aufbewahrungsrichtlinien.
Alle drei Einschränkungen sind in Was ist neu in Claude Fable 5.1 dokumentiert.
Schritt 1: API-Schlüssel erstellen
Melden Sie sich bei der Claude Console an, öffnen Sie den Bereich für API-Schlüssel in den Organisationseinstellungen und erstellen Sie einen Schlüssel. Kopieren Sie ihn sofort, da er später nicht erneut angezeigt wird.
Speichern Sie ihn als Umgebungsvariable:
export ANTHROPIC_API_KEY="sk-ant-..."
Legen Sie in Apidog eine Umgebungsvariable namens ANTHROPIC_API_KEY an und referenzieren Sie sie im Header als:
{{ANTHROPIC_API_KEY}}
So landet der Schlüssel weder im gespeicherten Request-Body noch fest im Quellcode.
Schritt 2: Die erste Anfrage senden
Erstellen Sie einen POST-Request an:
https://api.anthropic.com/v1/messages
Verwenden Sie diese Header:
x-[REDACTED CREDENTIAL]
anthropic-version: 2023-06-01
content-type: application/json
Beispiel mit curl:
curl https://api.anthropic.com/v1/messages \
-H "x-[REDACTED CREDENTIAL] \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-fable-5-1",
"max_tokens": 16000,
"messages": [
{"role": "user", "content": "Explain the difference between idempotent and safe HTTP methods, with one example each."}
]
}'
Dasselbe Beispiel mit dem offiziellen Python-SDK:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
messages=[{"role": "user", "content": "Explain the difference between idempotent and safe HTTP methods, with one example each."}],
)
if response.stop_reason == "refusal":
print("declined:", response.stop_details.category if response.stop_details else None)
else:
for block in response.content:
if block.type == "text":
print(block.text)
Prüfen Sie immer zuerst stop_reason, bevor Sie content auslesen. Eine Klassifizierungsablehnung kann als HTTP 200 mit leerem content-Array zurückgegeben werden.
Setzen Sie max_tokens großzügig. Der Wert begrenzt Denk- und Antwort-Token zusammen. Da Denken immer aktiviert ist, kann ein für Modelle ohne Thinking optimierter Wert die Antwort frühzeitig abschneiden.
Die Antwort enthält außerdem einen thinking-Block. Mit der Standardeinstellung display: "omitted" bleibt dessen Text leer. Das ist erwartetes Verhalten. Geben Sie den Block beim nächsten Zug unverändert zurück.
Schritt 3: Kosten und Tiefe über effort steuern
Der Aufwandsparameter ist der wichtigste Steuerungsmechanismus für Fable 5.1. Er befindet sich innerhalb von output_config und akzeptiert:
lowmediumhighxhighmax
Der Standardwert ist high.
{
"model": "claude-fable-5-1",
"max_tokens": 16000,
"output_config": {"effort": "medium"},
"messages": [
{
"role": "user",
"content": "Summarize this changelog in five bullets."
}
]
}
Anthropic empfiehlt, mit high zu beginnen und anschließend alle Stufen anhand eigener Bewertungen zu testen. Die Namen entsprechen nicht modellübergreifend derselben Denkintensität.
Laut Anthropic kann medium ungefähr die Leistung von Fable 5 zu geringeren Kosten liefern. low kann bei den Kosten pro Aufgabe mit Opus und Sonnet konkurrieren.
Beachten Sie zwei Besonderheiten:
- Bei
lowruft Fable 5.1 Such- und Abruf-Tools seltener auf und antwortet häufiger aus dem Gedächtnis. - Bei
xhighundmaxkann das Modell eine lange Antwort zunächst im Denkprozess entwerfen und anschließend erneut schreiben. Planen Sie dafür ausreichendmax_tokensein.
Weitere Details finden Sie im Leitfaden zum Aufwandsparameter und im Leitfaden für den Aufwandsparameter von Opus 5.
Aufwand mitten im Gespräch ändern
Bei Fable 5.1 können Sie den Aufwand ab dem nächsten Benutzerzug ändern, ohne den gecachten Präfix zu invalidieren. Fügen Sie dazu eine leere role: "system"-Nachricht mit output_config ein.
Dafür benötigen Sie:
- den Beta-Header
mid-conversation-output-config-2026-07-01 - den Namespace
client.beta.messages
response = client.beta.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
output_config={"effort": "high"},
betas=["mid-conversation-output-config-2026-07-01"],
messages=[
{"role": "user", "content": "Plan a migration from SQLite to PostgreSQL in three short steps."},
{"role": "assistant", "content": "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."},
{"role": "system", "content": [], "output_config": {"effort": "low"}},
{"role": "user", "content": "Summarize the plan in one sentence."},
],
)
Das Senken des Aufwands funktioniert zuverlässig. Beim Erhöhen sind größere Sprünge, beispielsweise von low auf xhigh, meist robuster.
Schritt 4: Lange Antworten streamen
Schwierige Aufgaben können bei höherem Aufwand mehrere Minuten dauern. Streamen Sie daher alle Antworten, die länger werden könnten.
Bei max_tokens nahe dem Maximum von 128.000 ist Streaming erforderlich, um HTTP-Timeouts zu vermeiden.
with client.messages.stream(
model="claude-fable-5-1",
max_tokens=64000,
messages=[{"role": "user", "content": "Write a test plan for a rate-limited public API."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()
print(final.stop_reason, final.usage.output_tokens)
Apidog rendert Streaming-Antworten direkt beim Eintreffen. So sehen Sie schnell, wie lange ein Zug mit high-Aufwand bis zum ersten Text-Token benötigt.
Schritt 5: Tools ohne erzwungenes tool_choice verwenden
Tools werden grundsätzlich wie bei Fable 5 definiert. Geändert hat sich nur die Methode, mit der ein Aufruf angestoßen wird.
Bei Fable 5 konnten Sie einen Aufruf erzwingen:
{"type": "tool", "...": "..."}
Bei Fable 5.1 führt das zu einem 400-Fehler. Das Modell soll zuerst denken und seine Arbeit nicht direkt in Tool-Argumente schreiben.
Verwenden Sie stattdessen:
tool_choice: {"type": "auto"}- eine explizite Tool-Anweisung im Prompt
strict: true-
additionalProperties: falseim Schema
record_summary_tool = {
"name": "record_summary",
"description": "Record the structured summary of the document.",
"strict": True,
"input_schema": {
"type": "object",
"properties": {"summary": {"type": "string"}},
"required": ["summary"],
"additionalProperties": False,
},
}
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
tools=[record_summary_tool],
tool_choice={"type": "auto"},
messages=[{"role": "user", "content": "Summarize: The meeting moved to Thursday. Call the record_summary tool with your result."}],
)
Wenn Sie nur valides JSON benötigen, verwenden Sie strukturierte Ausgaben über output_config.format statt eines Tools.
Wenn die Anwendung – und nicht die Benutzeranweisung – im aktuellen Zug einen bestimmten Tool-Aufruf benötigt, hängen Sie nach dem letzten Benutzerzug eine role: "system"-Nachricht an, die das Tool benennt und den Aufruf verlangt. Behalten Sie diese Nachricht anschließend im Gesprächsverlauf.
tool_choice: {"type": "none"} funktioniert weiterhin, wenn ein Zug keine Tools verwenden darf.
Der agentische Tool-Loop
Wenn stop_reason den Wert tool_use hat:
- Führen Sie jeden
tool_use-Block aus. - Senden Sie alle
tool_result-Blöcke in einer Benutzernachricht zurück. - Hängen Sie den Assistant-Zug exakt so an, wie er zurückgegeben wurde – einschließlich aller
thinking-Blöcke.
Diese letzte Regel ist bei Fable 5.1 besonders wichtig. Der Leitfaden zum erhaltenen Denken beschreibt die Details.
In langen Schleifen kann Fable 5.1 unabhängige Lesevorgänge einzeln anfordern, während Fable 5 mehrere Aufrufe gebündelt hat. Hängen Sie nach jeder Tool-Ergebnisnachricht daher folgende zugbezogene Systemnachricht an:
Listen Sie zuerst privat auf, was Sie als Nächstes benötigen; fordern Sie dann jedes Element an, das nicht vom Ergebnis eines anderen abhängt, in dieser einen Antwort.
Verwenden Sie dafür:
clear_at: "next_user_message"- den Beta-Header
mid-conversation-system-clear-at-2026-08-21
Belassen Sie frühere Kopien dieser Nachricht im Verlauf.
Schritt 6: Ablehnungen mit Fallbacks behandeln
Fable 5.1 verwendet Sicherheitsklassifikatoren. Eine abgelehnte Anfrage wird als HTTP 200 mit folgenden Werten zurückgegeben:
{
"stop_reason": "refusal",
"stop_details": {
"category": "cyber"
}
}
Mögliche Kategorien sind:
cyberbiofrontier_llmreasoning_extractiongeneral_harms
Eine Ablehnung vor jeglicher Ausgabe wird nicht berechnet.
Serverseitige Fallbacks aktivieren
Die einfachste Konfiguration verwendet fallbacks: "default" und den Beta-Header server-side-fallback-2026-07-01.
response = client.beta.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
fallbacks="default",
betas=["server-side-fallback-2026-07-01"],
messages=[{"role": "user", "content": "Audit this authentication middleware for logic bugs."}],
)
fallback_ran = any(
entry.type == "fallback_message" for entry in (response.usage.iterations or [])
)
if fallback_ran and response.stop_reason != "refusal":
print("served by", response.model)
Die Antwort enthält das tatsächlich verwendete Modell im Top-Level-Feld model. Ein fallback-Inhaltsblock markiert die Übergabe. Bewahren Sie diesen Block an seiner ursprünglichen Position auf, wenn Sie den Zug zurückgeben.
Einschränkungen:
-
fallbackswird von der Batches API abgelehnt. - Bedrock, Google Cloud und Foundry unterstützen diese Funktion nicht.
- Verwenden Sie dort stattdessen die
BetaRefusalFallbackMiddlewaredes SDKs auf Clientseite.
Mehr dazu finden Sie im Leitfaden zur Ablehnungsbehandlung.
Schritt 7: Fortschrittsaktualisierungen anzeigen
Bei langen Zügen schreibt Fable 5.1 zwischen Tool-Aufrufen kurze Hinweise, beispielsweise was gefunden wurde und welcher Schritt als Nächstes folgt.
Standardmäßig sind diese thinking-Blöcke unter display: "omitted" leer. Verwenden Sie display: "updates" zusammen mit dem Beta-Header thinking-display-updates-2026-08-18:
{
"model": "claude-fable-5-1",
"max_tokens": 16000,
"thinking": {"type": "adaptive", "display": "updates"},
"tools": [],
"messages": [
{
"role": "user",
"content": "Review the PRs open against our billing service."
}
]
}
Jeder nicht leere thinking-Block kann als Statuszeile gerendert werden. Fable 5.1 erzeugt weniger solcher Updates als Fable 5.
Wenn Ihre Benutzeroberfläche auf diesen Erzählungen basiert, entfernen Sie außerdem Prompt-Anweisungen, die das Modell auffordern, Zwischenergebnisse bis zur finalen Antwort zurückzuhalten.
Schritt 8: Cache-Lesevorgänge über usage prüfen
Mit Prompt-Caching profitieren Sie vom niedrigeren Preis für Cache-Lesevorgänge. Markieren Sie das stabile Präfix mit cache_control:
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
system=[{"type": "text", "text": LONG_STABLE_SYSTEM_PROMPT, "cache_control": {"type": "ephemeral"}}],
messages=[{"role": "user", "content": "Which endpoints in the spec lack an error schema?"}],
)
u = response.usage
print(u.input_tokens, u.cache_creation_input_tokens, u.cache_read_input_tokens)
Beim ersten Aufruf ist cache_creation_input_tokens größer als null. Für die fünfminütige TTL werden diese Token mit 12,50 US-Dollar pro Million abgerechnet.
Bei einer zweiten Anfrage innerhalb von fünf Minuten sollte cache_read_input_tokens größer als null sein. Diese Token kosten bei Fable 5.1 nur 0,25 US-Dollar pro Million.
Bleibt der Wert trotz identischer Anfragen bei null, ist das Präfix wahrscheinlich nicht stabil. Häufige Ursachen:
- Zeitstempel im System-Prompt
- unsortiertes JSON
- ein variierendes Tool-Array
Das minimale cachefähige Prompt umfasst 512 Token.
Da ein Cache-Fehltreffer 40-mal teurer ist als ein Treffer, lohnt sich ein stabiles Präfix bei Fable 5.1 besonders. Aufwand pro Nachricht und zugbezogene Systemnachrichten erlauben Änderungen während einer Sitzung, ohne den gesamten Cache zurückzusetzen.
Beachten Sie außerdem: Bearbeitungen, die den Cache invalidieren – etwa eine Neuerstellung des System-Prompts oder Änderungen an früheren Zügen – invalidieren nun auch Denkblöcke. Append-only-Verläufe sind deshalb doppelt wichtig.
Weitere Informationen bietet die Dokumentation zu Prompt-Caching.
Den gesamten Ablauf in Apidog testen
Speichern Sie jeden Schritt als eigene Anfrage in einer Apidog-Sammlung:
- erster API-Aufruf
- Aufwandsvarianten
- Streaming
- Tool-Loop
- Fallback
- Cache-Prüfung
Verwenden Sie Umgebungsvariablen für den API-Schlüssel und das Modell. So können Sie eine komplette Sammlung mit einer einzigen Änderung zwischen claude-fable-5 und `claude-fable-5-1 umschalten.
Fügen Sie anschließend Assertions hinzu:
-
stop_reasonist bei gutartigen Test-Prompts nichtrefusal -
usage.cache_read_input_tokensist beim zweiten Cache-Aufruf größer als null - bei Verwendung des Thinking-Binding-Headers enthält kein
input_transformations-Eintrag den Grundprefix_binding_mismatch
Führen Sie die Sammlung vor und nach Änderungen an der Testumgebung aus. Laden Sie Apidog herunter, um die Sammlung einzurichten. Dieselbe Sammlung kann anschließend als CI-Prüfung über die Apidog CLI ausgeführt werden.
Häufige Fehler und Lösungen
| Fehler | Lösung |
|---|---|
400 tool_choice: type "tool" and "any" are not supported for this model. |
auto, eine explizite Tool-Anweisung und strict: true verwenden |
400 bei thinking: {"type": "disabled"}
|
Feld entfernen und den Aufwand reduzieren |
400 invalid_request_error trotz gültigem Body |
30-tägige Datenaufbewahrung der Organisation oder des Arbeitsbereichs prüfen |
400 Invalid signature in thinking block. The block is bound to a different conversation. |
Keine früheren Züge, den System-Prompt oder das Tools-Array bearbeiten |
| Leerer Denktext | Bei display: "omitted" erwartetes Verhalten; für sichtbare Inhalte summarized oder updates verwenden |
cache_read_input_tokens bleibt null |
Präfix auf Zeitstempel und unsortierte Objekte prüfen |
| Priority-Tier-Anfrage schlägt Validierung fehl | Fable 5.1 unterstützt Priority Tier nicht; Fable 5 schon |
FAQ
Wie lautet die Modell-ID der Claude-Fable-5.1-API?
Auf der Claude Platform lautet sie:
text
claude-fable-5-1
Auf Amazon Bedrock:
text
anthropic.claude-fable-5-1
Google Cloud, Microsoft Foundry und Claude Platform auf AWS verwenden ebenfalls claude-fable-5-1.
Benötige ich einen Beta-Header?
Nein. Das Basismodell, adaptives Denken, Aufwand, Tools und Caching funktionieren mit:
text
anthropic-version: 2023-06-01
Beta-Header werden nur für folgende Funktionen benötigt:
- Aufwand pro Nachricht
- zugbezogene Systemnachrichten
- Fortschrittsaktualisierungen
- serverseitige Fallbacks
- Steuerung des Thinking-Bindings
Kann ich einen Tool-Aufruf erzwingen?
Nein. tool_choice: "any" und tool_choice: "tool" führen zu einem 400-Fehler.
Verwenden Sie auto, nennen Sie das Tool im Prompt und setzen Sie strict: true. Für reine JSON-Extraktion sind strukturierte Ausgaben die bessere Wahl.
Wie groß darf die Ausgabe sein?
Die Messages API unterstützt bis zu 128.000 Token. Streamen Sie große Antworten. Die Beta der Batches API mit 300.000 Token ist für Fable 5.1 nicht gelistet.
Wie prüfe ich die günstigeren Cache-Lesevorgänge?
Lesen Sie bei einer wiederholten Anfrage:
python
response.usage.cache_read_input_tokens
Bei Fable 5.1 werden diese Token mit 0,25 US-Dollar pro Million abgerechnet. Zum Vergleich:
- Fable 5: 1 US-Dollar pro Million
- Opus 5: 0,50 US-Dollar pro Million
Die aktuellen Werte finden Sie in der Preisübersicht.
Gilt der Fable-5-API-Leitfaden weiterhin?
Größtenteils ja. Der Fable-5-API-Leitfaden beschreibt weiterhin denselben Endpunkt.
Die Beispiele für erzwungene Tool-Aufrufe müssen Sie jedoch anpassen: Sie führen bei Fable 5.1 zu einem 400-Fehler. Außerdem berücksichtigt der ältere Leitfaden weder Aufwand pro Nachricht noch Fortschrittsaktualisierungen.

Top comments (0)