AI Tools
●10 min read●September 25, 2026

Claude Fable 5.1 Migration Guide: The 3 Breaking Changes and How to Fix Them

What breaks when you move from Claude Fable 5 to Fable 5.1, the exact error messages, and Anthropic's recommended fix for each change.

Paras Tiwari
Paras TiwariFounder, Spectrum AI Labs
Claude Fable 5.1 Migration Guide: The 3 Breaking Changes and How to Fix Them

Get weekly AI tool reviews

We test tools so you don't have to. No spam.

TL;DR

For most apps, moving to Claude Fable 5.1 means changing one model ID. Three patterns break. Forcing a tool call with tool_choice now returns a 400. Fable 5.1 thinking blocks get silently dropped if a conversation moves to an older model. And if your code edits earlier turns, the thinking that followed them becomes invalid, which is a hard 400 on API accounts created on or after August 31, 2026. Each has a documented fix, and this guide shows the exact error text for each one. The list price is the same as Fable 5. Cache reads are 75% cheaper.

Claude Fable 5.1 at a glance
Updated September 25, 2026
  • Anthropic released Claude Fable 5.1 on September 1, 2026. The API model ID is claude-fable-5-1.
  • Pricing is $10 input and $50 output per million tokens, the same as Fable 5. Cache reads fell from $1 to $0.25 per million tokens.
  • It has a 1M-token context window at standard pricing across the whole window, and up to 128K output tokens per request.
  • Three changes break Fable 5 code: forced tool use, thinking-block portability to older models, and edited conversation history.
  • Mythos 5.1 is the same model with different safeguards. It is limited to approved customers in Anthropic's trusted access programs.
  • In Claude Code, the bundled Claude API skill (/claude-api migrate) can apply the migration across a code base.

If you use Claude through Claude Code, claude.ai, Managed Agents or the Agent SDK, you can mostly relax. Those products manage your conversation history, and Anthropic says the history rule does not apply to them. This guide is for people who run their own Messages API loop: custom agent harnesses, tool routers, fallback chains between models, and any code that trims or rewrites old turns to save tokens. That last group is the one most likely to hit a 400 in production.

3
breaking changes from Fable 5
per Anthropic's migration guide
$0.25
per 1M cache reads
down from $1 on Fable 5
~25%
estimated lower cost
typical workloads, Anthropic estimate

What changed in Fable 5.1

Same list price as Fable 5, with cache reads 75% cheaper.

Fable 5.1 costs the same as Fable 5 on paper: $10 per million input tokens and $50 per million output tokens. The change is in caching. Cache hits and refreshes are now billed at 0.025 times the base input price instead of the usual 0.1, which comes to $0.25 per million tokens. Anthropic estimates that makes Fable 5.1 about 25% cheaper than Fable 5 for typical workloads, and up to about 45% cheaper for agent work that re-reads the same context over and over. If you run long agent loops, this is the part of the release that shows up on your invoice.

Claude Fable 5 vs Fable 5.1 pricing, per million tokens

Fable 5Fable 5.1
Input$10$10
Output$50$50
5-minute cache write$12.50$12.50
1-hour cache write$20$20
Cache hits and refreshes$1$0.25

Source: Anthropic pricing page and Fable 5.1 announcement, checked September 25, 2026.

Batch requests on Fable 5.1 cost $5 input and $25 output per million tokens. The tokenizer is the same one Fable 5 uses, so your token counts should not change. Before you switch, check two account settings. Fable 5.1 requires 30-day data retention, and requests from an organization without it get a 400 invalid_request_error. It is also not offered on Priority Tier, which Fable 5 was.

The shortcut Anthropic recommends first

In Claude Code, run /claude-api migrate this project to claude-fable-5-1. The bundled Claude API skill swaps the model ID and applies breaking parameter changes, prefill replacement and effort calibration, then gives you a checklist of items to verify by hand. It asks you to confirm the scope before it edits anything, and it adjusts model ID formats for Amazon Bedrock and Claude Platform on AWS clients.

Breaking change 1: forced tool use returns a 400

Ask for the tool in the prompt instead of forcing it with tool_choice.

On Fable 5 you could force a tool call with tool_choice set to {"type": "any"} or {"type": "tool", "name": "..."}. On claude-fable-5-1, both return a 400 invalid_request_error with this message:

tool_choice: type "tool" and "any" are not supported for this model.

The check runs on the Messages API, the Message Batches API and the token counting endpoint, so a batch job will fail the same way a live request does. auto (the default) and none still work.

Anthropic's reason is quality. Thinking is always on for Fable 5.1, and a forced tool call would skip it, so the model would end up doing its reasoning inside the tool arguments. Those arguments come out worse.

Before (works on Fable 5, fails on Fable 5.1):

record_summary_tool = {
    "name": "record_summary",
    "description": "Record the structured summary of the document.",
    "input_schema": {
        "type": "object",
        "properties": {"summary": {"type": "string"}},
        "required": ["summary"],
    },
}

response = client.messages.create(
    model="claude-fable-5",
    max_tokens=16000,
    tools=[record_summary_tool],
    tool_choice={"type": "tool", "name": "record_summary"},
    messages=[{"role": "user", "content": "Summarize: The meeting moved to Thursday."}],
)

After (Anthropic's documented fix): leave tool_choice at auto, name the tool in the instruction, and set strict: True so the call matches your 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.",
        }
    ],
)

The docs cover two edge cases. If the only reason you forced a tool was to get JSON that matches a schema, drop the tool and use JSON outputs (output_config.format) instead. If your application needs a specific tool on a specific turn, append a mid-conversation system message after the latest user turn. It needs no beta header:

{
    "role": "system",
    "content": "Tool-use requirement for the current turn: the application requires a call to the search_help_center tool in your response to the user's latest message. Begin your response with the search_help_center tool call. Do not reply with text only.",
},

CMEK organizations

If your organization uses customer-managed encryption keys, strict is not available. Anthropic says to rely on the instruction alone in that case, so add a validation step on the tool arguments.

Breaking change 2: older models drop Fable 5.1 thinking

The request succeeds, so you may not notice this one for weeks.

Every thinking block records which model produced it. Fable 5.1 can read its own blocks and blocks from Mythos 5.1, Opus 5, Fable 5, Mythos 5 and earlier models. The reverse does not hold: apart from Mythos 5.1, none of those models can read a Fable 5.1 block.

So what happens when a conversation moves from Fable 5.1 to an older model, through a router switch, a client-side retry, or a refusal fallback? The request still succeeds. The API removes the blocks the target model cannot read, you are not billed for those dropped input tokens, and the older model re-plans without that reasoning. Anthropic warns this can raise cost and latency on the first turn after the switch.

The drop is silent by default. To see it, send the thinking-binding-controls-2026-08-01 beta header. Responses then include an input_transformations array that names each dropped block:

Not sure which AI model to use?

20 models · Personalized picks · 60 seconds

Take the Quiz
{
  "input_transformations": [
    {
      "type": "thinking_dropped",
      "path": "messages.3.content.0",
      "reason": "model_binding_mismatch"
    }
  ]
}

In practice, keep passing thinking blocks back unchanged on every turn, including empty ones. Don't strip them to "help" the older model, because the API already does that. Add the beta header in any router or fallback path and log input_transformations, so you can see how often a downgrade happens and what the re-planning costs you.

If you use server-side fallbacks, the permitted fallback targets for Fable 5.1 are claude-opus-4-8 and claude-opus-5. Neither receives Fable 5.1's thinking blocks, so every fallback starts its reasoning from scratch.

A common mistake in third-party guides

Several migration posts say to fix this with the drop_block setting. That setting controls a different problem, the edited-history check below. Dropping blocks on a model switch happens automatically, and the prefix_mismatch_behavior setting has no effect on it.

Breaking change 3: editing earlier turns invalidates thinking

The one most likely to break a homegrown agent.

Each Fable 5.1 thinking block is valid only against the system prompt, tools and conversation history that came before it. If your code builds the messages array itself and changes anything earlier in the conversation, the thinking that followed no longer matches. On accounts that enforce the check you get a 400 like this:

messages.5.content.0: Invalid `signature` in `thinking` block. The block is bound to a different conversation. Remove the block, or set `thinking.block_binding.prefix_mismatch_behavior` to "drop_block". That setting requires the `thinking-binding-controls-2026-08-01` value in the `anthropic-beta` header.

The API enforces this for accounts created on or after August 31, 2026. Older accounts have the mismatch recorded but not acted on, unless the request sets prefix_mismatch_behavior. Anthropic's announcement says the rule will apply to all users with future model releases, so older accounts should fix it now too. It does not apply if Claude Code, claude.ai, Managed Agents or the Agent SDK manages your history, and Mythos 5.1 does not run this check.

Warning for tool and framework authors

Anthropic points this out directly: your own API key is probably on an older account, so your tests pass. Your users on new accounts hit the error first. Test with a new account or with prefix_mismatch_behavior set to error.

The error is permanent for that request body, so a retry loop will not clear it. You have two ways to continue. Strip the thinking blocks from the history and retry once, or opt into dropping the mismatched blocks automatically:

response = client.beta.messages.create(
    model="claude-fable-5-1",
    max_tokens=16000,
    thinking={
        "type": "adaptive",
        "block_binding": {"prefix_mismatch_behavior": "drop_block"},
    },
    messages=[
        {
            "role": "user",
            "content": "What is the greatest common divisor of 1071 and 462?",
        }
    ],
    betas=["thinking-binding-controls-2026-08-01"],
)

print(f"Input transformations: {len(response.input_transformations or [])}")

With drop_block, the API drops the mismatched block and every thinking block after it, and reports each one with reason: "prefix_binding_mismatch". The default is error.

The better fix is to stop editing history at all. Anthropic lists the patterns that break and what to use instead:

History patterns that break on Fable 5.1, and what to use instead

Pattern that breaksUse instead
Editing, reordering or removing earlier turns (deleting old tool results, client-side keep-the-tail compaction)Server-side compaction or context editing
Injecting per-turn reminders that are not saved into historyA turn-scoped system message
Rebuilding the system prompt or tools list between requestsA mid-conversation system message, or tool_addition and tool_removal blocks (beta header inline-tools-2026-09-15)
Image or document URLs that serve different bytes on a later requestA Files API file_id or base64 content

Source: Anthropic, Fable 5.1 migration guide.

Still safe: appending new turns, removing thinking blocks oldest-first, changing effort, max_tokens or cache_control, and server-side compaction or context editing.

Anthropic suggests a three-step audit. Diff consecutive request bodies to find where your code rewrites history. Run a session with drop_block and log input_transformations to see what gets dropped. Then pick error or drop_block for production. For CI, set error so any history edit fails the run.

Rules carried over from Fable 5

Old rules, but new to you if you are coming from Opus.

If you are coming straight from Fable 5, these already applied. If you are coming from Opus 5 or an older model, they are new to you:

  • thinking: {"type": "disabled"} and manual extended thinking with budget_tokens both return a 400. Omit thinking or send {"type": "adaptive"}, and use effort to control depth.
  • Prefilling the assistant message returns a 400. Put that guidance in the system prompt instead.
  • Non-default temperature, top_p or top_k values return a 400.
  • Coming from Opus 5, text between tool calls now arrives as thinking blocks instead of text blocks, and the price goes from $5 / $25 to $10 / $50.

Some changes won't throw errors but will show up in your evals. Anthropic says Fable 5.1 makes fewer parallel tool calls in long agent loops, sends fewer progress messages, runs fewer searches at low effort, and writes denser prose with less chat-style formatting. If your parser expects markdown bullets, check it.

What you get for migrating

Most of the new features are behind beta headers, so opt in one at a time.

New in Claude Fable 5.1

  1. 1Effort levels: low, medium, high, xhigh and max through output_config.effort. The default is high. Anthropic says 5.1's gains over Fable 5 are largest at xhigh and max, so re-run your own evals instead of reusing a Fable 5 setting.
  2. 2Per-message effort (beta header mid-conversation-output-config-2026-07-01): change effort for one turn with an effort-only system message, without restarting the prompt cache.
  3. 3Progress updates (beta header thinking-display-updates-2026-08-18): set thinking.display to updates to get short readable progress notes before tool calls instead of empty thinking.
  4. 4Turn-scoped system messages (beta header mid-conversation-system-clear-at-2026-08-21): a message with clear_at set to next_user_message costs no input tokens later and keeps thinking valid.
  5. 5Content provenance: Fable 5.1 text carries Anthropic's statistical watermark, and generated media from the Files API carries C2PA credentials. No request changes needed.

In Anthropic's own products, Fable 5.1 defaults to high effort in Claude Code and medium in Claude Cowork and on claude.ai. If you want to compare it with other current models before you commit, our task-by-task model guide covers where Fable 5.1 fits, and the AI API price index tracks what it costs next to OpenAI, Google and the open-weight providers.

Fable 5.1 migration checklist

In the order I would do it.

  1. Confirm your organization has 30-day data retention and is not relying on Priority Tier.
  2. Change the model ID to claude-fable-5-1, or run /claude-api migrate in Claude Code.
  3. Search your code for tool_choice. Replace any and named-tool values with auto, name the tool in the prompt, and add strict: True to the tool.
  4. Check for thinking set to disabled, budget_tokens, assistant prefill and non-default sampling parameters if you are not coming from Fable 5.
  5. Diff consecutive request bodies in a real session. Any change to earlier turns, the system prompt or the tools list needs one of the replacements above.
  6. Add the thinking-binding-controls-2026-08-01 beta header in staging and log input_transformations.
  7. Test on an API account created on or after August 31, 2026, or with prefix_mismatch_behavior set to error.
  8. Re-run your evals at high, xhigh and max effort and pick a setting based on results, not habit.

What this guide is based on

Every error message, parameter and code sample here comes from Anthropic's Fable 5.1 migration guide, API documentation and release announcement, checked on September 25, 2026. I did not run a production migration for this article. Beta header names change, so confirm them in the docs before you ship.

Sources

FAQ

What are the breaking changes in Claude Fable 5.1?

Anthropic lists three for apps moving from Fable 5. Forced tool use (tool_choice set to any or to a named tool) now returns a 400 error. Earlier models cannot read Fable 5.1's thinking blocks, so they are dropped if a conversation moves to an older model. And editing earlier turns invalidates the thinking blocks that follow, which returns a 400 on accounts created on or after August 31, 2026.

Why does tool_choice any return an error on Claude Fable 5.1?

Thinking is always on for Fable 5.1, and a forced tool call would skip it. Anthropic says the model would then put its reasoning into the tool arguments, which lowers their quality. The fix is to leave tool_choice at auto, name the tool in your instruction, and set strict to true on the tool so the call matches your schema.

Is Claude Fable 5.1 more expensive than Fable 5?

No. Input and output stay at $10 and $50 per million tokens. The only price change is cache reads, which drop from $1 to $0.25 per million tokens. Anthropic estimates Fable 5.1 costs about 25% less than Fable 5 on typical workloads and up to about 45% less on highly agentic work.

Can I switch a conversation from Fable 5.1 back to an older Claude model?

Yes, the request still succeeds. The API removes the Fable 5.1 thinking blocks the older model cannot read, and you are not billed for those dropped tokens. The older model has to re-plan without that reasoning, which can raise cost and latency on the first turn after the switch.

Does Claude Code migrate my project to Fable 5.1 automatically?

Anthropic documents a bundled Claude API skill for this. In Claude Code, run /claude-api migrate. It swaps the model ID, applies breaking parameter changes, prefill replacement and effort calibration across your code base, and asks you to confirm the scope before editing any files. It then gives you a checklist of things to verify by hand.

Paras Tiwari
Written by
Paras Tiwari
Founder, Spectrum AI Labs

Founder of Spectrum AI Labs — testing AI tools and models, and writing up what actually ships.

More about Paras →

Stay ahead of the AI curve

We test new AI tools every week and share honest results. Join our newsletter.