SunsetDiff

To turn thinking off on this model, send "thinking": {"type": "between_tools"} instead of {"type": "disabled"}. The model does not think before responding. The short updates it writes between tool calls come back as thinking blocks.

A request that sets thinking to disabled fails on claude-sonnet-5-5. The migration guide says to send between_tools when you want no up-front thinking.

Error text

To turn thinking off on this model, send "thinking": {"type": "between_tools"} instead of {"type": "disabled"}. The model does not think before responding. The short updates it writes between tool calls come back as thinking blocks.

The Sonnet 5.5 migration guide says thinking type disabled returns a 400 invalid_request_error on claude-sonnet-5-5. Claude Sonnet 5 turns thinking off with that setting. between_tools is accepted at low, medium, and high effort. At xhigh or max it returns a 400. between_tools takes no display, budget_tokens, or block_binding field. Source: Claude Sonnet 5.5 migration guide, checked October 20, 2026.

Affected models

Models named on the official page for this failure.
Model idWhat the source says
claude-sonnet-5-5 Returns 400 for thinking type disabled. Use between_tools to skip up-front thinking.
claude-sonnet-5 The migration guide's before example turns thinking off with thinking type disabled.

Fix

Raw SDK

Replace thinking type disabled with between_tools, and set effort to high or lower. The migration guide's after request uses effort high.

Before (Claude Sonnet 5)

client.messages.create(
    model="claude-sonnet-5",
    max_tokens=16000,
    thinking={"type": "disabled"},
    output_config={"effort": "xhigh"},
    messages=[{"role": "user", "content": "Hello"}],
)

After (claude-sonnet-5-5)

client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=16000,
    thinking={"type": "between_tools"},
    output_config={"effort": "high"},
    messages=[{"role": "user", "content": "Hello"}],
)

Source: Claude Sonnet 5.5 migration guide, checked October 20, 2026.

LiteLLM

Do not send thinking type disabled. LiteLLM's Anthropic page documents passing a thinking object on completion(). The migration guide's working value is between_tools. That LiteLLM page does not name claude-sonnet-5-5, so confirm the forwarded body.

Python

import litellm
response = litellm.completion(
    model="anthropic/claude-sonnet-5-5",
    messages=[{"role": "user", "content": "Hello"}],
    thinking={"type": "between_tools"},
)

Source: LiteLLM Anthropic provider, checked October 20, 2026.

Vercel AI SDK

Do not send thinking type disabled. The AI SDK Anthropic docs show providerOptions.anthropic.thinking set to adaptive, and they say the provider removes disabled for claude-opus-5-5, claude-fable-5, and claude-fable-5-1. Those docs do not list between_tools and do not name claude-sonnet-5-5 for that removal. Use the raw request when you need between_tools.

TypeScript

import { anthropic, type AnthropicProviderOptions } from "@ai-sdk/anthropic";
import { generateText } from "ai";

const { text } = await generateText({
  model: anthropic("claude-sonnet-5-5"),
  prompt: "Hello",
  providerOptions: {
    anthropic: {
      thinking: { type: "adaptive" },
      effort: "high",
    } satisfies AnthropicProviderOptions,
  },
});

Source: AI SDK Anthropic provider, checked October 20, 2026.

Switch guides

More request errors

All request errors

Questions

What do I send instead of thinking disabled?

thinking type between_tools, at low, medium, or high effort. The migration guide says xhigh and max return a 400 with between_tools. Switch guide: claude-sonnet-4-5-20250929 to claude-sonnet-5-5.

Deprecation alerts

We email you before models shut down. Unsubscribe anytime.

Deprecation alert signup
Providers (optional)