Skip to content

Feature support by model

Every cell below was measured on this platform — the same endpoint your client calls, with an ordinary API key — and reflects what actually came back. Nothing here is copied from a vendor capability sheet.

Last measured: 15 August 2026.

Supported on every model

These twelve models all handle the following: multi-turn conversations, system prompts, streaming, tool use with tool_choice, the full tool_result round trip, vision via base64 images, PDF document blocks, stop_sequences containing text, and POST /v1/messages/count_tokens.

Where models differ

Model temperature Extended thinking Prompt caching
claude-fable-5 ✗ deprecated ✗ not available ⚠ intermittent
claude-haiku-4-5 enabled ✗ never engages
claude-haiku-4-5-20251001 enabled ✗ never engages
claude-opus-4-5-20251101 enabled ✗ never engages
claude-opus-4-6 enabled ✗ never engages
claude-opus-4-7 ✗ rejected ✗ not available ✗ never engages
claude-opus-4-8 ✗ rejected adaptive ✓ reliable
claude-opus-5 ✗ deprecated adaptive ⚠ intermittent
claude-sonnet-4-5 enabled ⚠ intermittent
claude-sonnet-4-5-20250929 enabled ✓ reliable
claude-sonnet-4-6 enabled ✓ reliable
claude-sonnet-5 ✗ deprecated adaptive ✓ reliable

Caching was measured three times per model on a 2,500-token cached prefix. Reliable means the cache was read on all three attempts, intermittent means on two of three, and never engages means the prefix was billed as fresh input every time.

temperature

The newest models no longer accept it:

{"error": {"type": "invalid_request_error",
           "message": "`temperature` is deprecated for this model."}}

Omit the parameter on those models. Sending it is a hard 400, not a warning, so a client that always sets temperature: 0 has to special-case them.

Extended thinking

Two syntaxes exist, and a model accepts exactly one of them.

Models marked enabled take the classic form:

{
  "model": "claude-sonnet-4-5",
  "max_tokens": 2048,
  "thinking": {"type": "enabled", "budget_tokens": 1024},
  "messages": [{"role": "user", "content": "What is 27*43?"}]
}

Models marked adaptive reject that and ask for the newer form, which takes no budget:

{
  "model": "claude-opus-5",
  "max_tokens": 2048,
  "thinking": {"type": "adaptive"},
  "messages": [{"role": "user", "content": "What is 27*43?"}]
}

Sending the wrong one returns:

"thinking.enabled" is not supported for this model. Use "thinking.adaptive"

When thinking is active the response carries a thinking block before the text block, exactly as Anthropic documents it. Note that max_tokens must exceed budget_tokens, or the request is rejected.

Prompt caching

Mark the prefix you want cached and send the identical prefix again:

{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "system": [
    {"type": "text", "text": "<at least 1024 tokens of instructions>",
     "cache_control": {"type": "ephemeral"}}
  ],
  "messages": [{"role": "user", "content": "..."}]
}

A cache hit shows up in the usage block:

"usage": {"input_tokens": 7, "cache_creation_input_tokens": 0,
          "cache_read_input_tokens": 3201}

Two things make caching look broken when it is not:

  • Below the minimum. Prefixes under 1024 tokens (2048 for Haiku) are not cached at all. The request succeeds and the marker is ignored, so a short system prompt reports zeros no matter how often you repeat it.
  • Model choice. On the models marked ✗ above, the prefix is billed as fresh input on every call no matter how long it is. If caching is what makes your workload affordable, pick a model marked ✓.

Check cache_read_input_tokens in the response rather than assuming a hit: that number is what you were not charged full price for.

Not available on any model

Feature Behaviour
Whitespace-only stop_sequences ("\n", "\n\n") HTTP 400 on all twelve models
Message Batches API 404 — the endpoints do not exist
File upload for documents Not available yet — send documents inline as a base64 document block