Skip to content

Claude API 400 "thinking.type.disabled" is not supported: Causes and Fixes ​

A request to /v1/messages fails with HTTP 400 invalid_request_error when you send thinking: {"type": "disabled"} to a model where thinking is always on, or combine a thinking-off setting with an effort level the model does not allow.

Short answer

On Claude Opus 5.5, Fable 5.2, Mythos 5.2, and related 5.x models, thinking is mandatory and cannot be disabled. Remove thinking: {"type": "disabled"} to run with adaptive thinking, and use output_config.effort to control depth. On Claude Sonnet 5.5, use thinking: {"type": "between_tools"} to stop up-front thinking. Check that effort is set to high or below when using between_tools, and ensure it remains consistent across the conversation.

Last verified: 2026-11-14 (source: Anthropic API errors).

Symptoms and What the Error Means ​

The API rejects requests that attempt to disable mandatory thinking features. You will see specific error messages depending on the configuration and the model used.

If you attempt to disable thinking on models like Opus 5.5 or Fable 5.2:

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

If you send disabled to Claude Sonnet 5.5:

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.

If you use between_tools on a model that does not support it:

text
"thinking.type.between_tools" is not supported for this model.

If you use between_tools with an unsupported effort level (like xhigh or max):

text
output_config.effort 'xhigh' is not supported when thinking is disabled on this model. Use effort 'high' or below, or enable thinking.

If you attempt to change the effort level mid-conversation while using between_tools:

text
messages.N: output_config.effort 'low' differs from the 'high' in effect before it; effort cannot change when thinking is disabled on this model. Use effort 'high', or enable thinking.

Models Affected ​

ModelThinking RequirementBehavior
Claude Opus 5.5Always onRejects disabled.
Claude Sonnet 5.5Can be limitedRejects disabled; use between_tools.
Claude Haiku 5.5Can be disabledAccepts disabled; enforces effort limits.
Claude Fable/Mythos (5.0–5.2)Always onRejects disabled.

Why It Happens ​

  1. Mandatory Thinking: On Opus 5.5 and the Fable / Mythos models thinking is always on, so {"type": "disabled"} is rejected.
  2. Unsupported between_tools: Only Claude Sonnet 5.5 supports between_tools as an alternative to up-front thinking.
  3. Effort Limits with between_tools: When thinking is limited (via between_tools or disabled on Haiku), high-intensity reasoning modes like xhigh or max are unavailable.
  4. Effort Persistence: With between_tools, the effort level sets a boundary for the entire interaction; you cannot increase or decrease this intensity in subsequent messages within the same conversation.

Fix 1: Update Configuration for Always-On Models ​

On models like claude-opus-5-5, remove the disabled configuration. If you need to manage costs or response depth, use the output_config object instead.

Failing Request:

json
{
  "model": "claude-opus-5-5",
  "max_tokens": 1024,
  "thinking": {"type": "disabled"},
  "messages": [{"role": "user", "content": "Explain quantum entanglement."}]
}

Fixed Request:

json
{
  "model": "claude-opus-5-5",
  "max_tokens": 1024,
  "output_config": {"effort": "low"},
  "messages": [{"role": "user", "content": "Explain quantum entanglement."}]
}

Fix 2: Use between_tools Correctly (Sonnet 5.5) ​

If you are using claude-sonnet-5-5 and want to stop up-front thinking, use between_tools. Ensure the effort level is high or lower and remains consistent.

Fixed Request:

json
{
  "model": "claude-sonnet-5-5",
  "max_tokens": 1024,
  "thinking": {"type": "between_tools"},
  "output_config": {"effort": "high"},
  "messages": [{"role": "user", "content": "Fetch weather data."}]
}

Note: If you want to keep the model's thinking processes active but hide them from the API response text, add display: "omitted" inside your thinking object.

Through a gateway ​

The error occurs because the upstream API validation logic rejects your request parameters as incompatible with the chosen model. When sending requests through byesu, this validation logic is passed through directly from Anthropic. If you receive these errors, the fix remains the same regardless of whether you are connecting directly or through the gateway. Ensure your client-side application logic does not inject or cache thinking configurations that are outdated or invalid for the specific model ID you are calling.

FAQ ​

Why does my request fail with "thinking.type.disabled" is not supported? ​

On models where thinking is always active, such as Claude Opus 5.5, Fable 5.2, and Mythos 5.2, you cannot disable thinking. Remove the thinking parameter to use the default adaptive thinking, or if you want to control depth, use output_config.effort.

How do I turn off thinking on Claude Sonnet 5.5? ​

You cannot set thinking to disabled. Instead, send thinking: {"type": "between_tools"}. This stops up-front thinking but allows the model to generate thinking content between tool calls. Use effort 'high' or below with this setting.

Why do I get an error when changing effort mid-conversation? ​

When using between_tools, the effort level must be consistent across the conversation. Changing output_config.effort in a subsequent message triggers a 400 because effort cannot be adjusted once a specific level is already in effect.

Can I hide thinking content from my API response? ​

Yes. If you want to use adaptive thinking without the thinking content appearing in your API response, you can set display: "omitted" within your thinking configuration object.

Got a problem? Contact support or join our group.