SunsetDiff

"thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

A request that sends thinking type enabled and budget_tokens fails on claude-sonnet-5-5. Remove the budget and set an effort level.

Error text

"thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

The Sonnet 5.5 migration guide says Claude Sonnet 4.6 still accepts thinking type enabled with budget_tokens as a deprecated setting, and Claude Sonnet 4.5 and Claude Haiku 4.5 use that setting for all thinking. claude-sonnet-5-5 returns a 400. There is no fixed mapping from a budget to an effort level. 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 enabled. Use adaptive thinking and output_config.effort.
claude-sonnet-4-6 The migration guide says this model still accepts budget_tokens as a deprecated setting.
claude-sonnet-4-5-20250929 The migration guide says Claude Sonnet 4.5 uses budget_tokens for all thinking.

Fix

Raw SDK

Remove budget_tokens. The migration guide's after request uses thinking type adaptive and output_config.effort. The guide's example uses high, and it also lists max, xhigh, medium, and low.

Before

client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=16000,
    thinking={"type": "enabled", "budget_tokens": 10000},
    messages=[{"role": "user", "content": "Hello"}],
)

After

client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    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 enabled with budget_tokens. LiteLLM documents a thinking parameter on Anthropic calls. Pass the adaptive object from the migration guide. LiteLLM's reasoning_effort map is documented for Claude 4.6 and 4.7, not for claude-sonnet-5-5.

Python

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

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

Vercel AI SDK

The AI SDK Anthropic docs show thinking type adaptive plus effort on providerOptions.anthropic. They also say the provider converts thinking type enabled with budgetTokens to adaptive for claude-opus-5-5, claude-fable-5, and claude-fable-5-1. They do not name claude-sonnet-5-5 for that conversion, so set adaptive yourself.

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 replaces budget_tokens?

output_config.effort, with thinking type adaptive. The migration guide says there is no fixed mapping from a token budget to an effort level.

Deprecation alerts

We email you before models shut down. Unsubscribe anytime.

Deprecation alert signup
Providers (optional)