Skip to main content

Betas

A beta is an early API feature that a request switches on with a value in the anthropic-beta header. Claude Code keeps a list of these values and sends the ones that fit the model and the provider. If a proxy rejects a request with a beta error, set CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 to stop the pre-release values.

ANTHROPIC_BETAS adds values (comma list), and so does the --betas flag. CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 turns off the experimental betas. DISABLE_INTERLEAVED_THINKING turns off one. The betas go in the anthropic-beta header, or in the betas field of the body on Bedrock.

About the List​

Claude Code joins the active values into the anthropic-beta header (or into the betas field of the body on Bedrock). A row is

Documented: An official docs page names this item.
when a docs page other than the changelog and the Agent SDK pages names the value. Few values have that. Source: Environment Variables for ANTHROPIC_BETAS and CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS, and the program for the rest.

How Claude Code Builds the List​

Claude Code takes these steps for each request.

  1. It adds the betas that fit the model and the provider.
  2. It adds the values of ANTHROPIC_BETAS, a comma list, unless the experimental betas are off. It drops a value that has afk-mode, and it skips mid-conversation-system-2026-04-07, because that feature is generally available.
  3. It removes context-1m-2025-08-07 when the model has the 1M window already.
  4. For an agent query, it adds claude-code-20250219 if the list lacks it.
  5. It adds the betas that depend on the turn, and then the values of the flag --betas. On a third-party provider it keeps only the allowed values of --betas.

CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS or a HIPAA policy turns the experimental betas off. Then Claude Code ignores ANTHROPIC_BETAS and --betas, and it leaves out the betas that only the Anthropic API takes.

Registry​

The Registry Name column is the internal name of the value in the program.

Header ValueStatusRegistry NameWhen Claude Code Sends It
claude-code-20250219
Undocumented: Only the program shows this item. It can change without notice.
claude_codeFor every model whose name has no haiku, and for agent queries.
oauth-2025-04-20
Undocumented: Only the program shows this item. It can change without notice.
oauth_authWhen you sign in with a subscription (OAuth).
interleaved-thinking-2025-05-14
Documented: An official docs page names this item.
interleaved_thinkingFor each model except claude-3-*, unless DISABLE_INTERLEAVED_THINKING is set. The docs name it as interleaved-thinking.
context-1m-2025-08-07
Undocumented: Only the program shows this item. It can change without notice.
long_contextWhen the model name has the [1m] suffix, also for a model with a 1M window. Never without the suffix (see Probes).
context-management-2025-06-27
Undocumented: Only the program shows this item. It can change without notice.
context_managementOn the Anthropic API, on Anthropic-run clouds, and on Foundry, for each model except claude-3-*.
structured-outputs-2025-12-15
Undocumented: Only the program shows this item. It can change without notice.
structured_outputsOn the Anthropic API for a model that supports it, behind an experiment.
web-search-2025-03-05
Undocumented: Only the program shows this item. It can change without notice.
web_searchOn Vertex for models with web search there, and on Foundry.
advanced-tool-use-2025-11-20
Undocumented: Only the program shows this item. It can change without notice.
tool_searchWith tool search, as a second header value.
tool-search-tool-2025-10-19
Undocumented: Only the program shows this item. It can change without notice.
tool_searchWith tool search. On Bedrock it goes in the body instead.
effort-2025-11-24
Undocumented: Only the program shows this item. It can change without notice.
effortThe program lists it, and no source states when it is sent. Since 2.1.310, when the server refuses the effort setting, Claude Code sends the request again without output_config.effort and this beta, and leaves both out for that model until the process ends (v2.1.310 release; the program).
task-budgets-2026-03-13
Undocumented: Only the program shows this item. It can change without notice.
task_budgetsThe program lists it, and no source states when it is sent.
prompt-caching-scope-2026-01-05
Undocumented: Only the program shows this item. It can change without notice.
prompt_caching_scopeOn the Anthropic API and Anthropic-run clouds, and when MCP tools are in the tool list. Since 2.1.307 it is not sent behind a custom ANTHROPIC_BASE_URL gateway or on Foundry (release notes).
prompt-caching-evict-2026-05-12
Undocumented: Only the program shows this item. It can change without notice.
prompt_caching_evictWhen a message has the evict_on_complete cache control.
cache-keepalive-2026-09-03
Undocumented: Only the program shows this item. It can change without notice.
cache_keepaliveWhen the keep-alive switch is on. It needs a subscriber login (see Probes).
extended-cache-ttl-2025-04-11
Documented: An official docs page names this item.
extended_cache_ttlWhen the cache time is 1h on the Anthropic API. The docs name it as extended-cache-ttl.
fast-mode-2026-02-01
Undocumented: Only the program shows this item. It can change without notice.
speedThe program lists it, and no source states when it is sent.
redact-thinking-2026-02-12
Undocumented: Only the program shows this item. It can change without notice.
redact_thinkingOn the Anthropic API when interleaved thinking is on and the session is interactive.
thinking-resumption-2026-07-17
Undocumented: Only the program shows this item. It can change without notice.
thinking_resumptionThe program lists it, and no source states when it is sent.
thinking-token-count-2026-05-13
Undocumented: Only the program shows this item. It can change without notice.
thinking_token_countWith interleaved thinking on the Anthropic API, and on Bedrock and Mantle for some models.
afk-mode-2026-01-31
Undocumented: Only the program shows this item. It can change without notice.
afk_modeFor auto mode.
advisor-tool-2026-03-01
Undocumented: Only the program shows this item. It can change without notice.
advisor_toolThe program lists it, and no source states when it is sent.
cache-diagnosis-2026-04-07
Undocumented: Only the program shows this item. It can change without notice.
cache_diagnosisThe program lists it, and no source states when it is sent.
context-hint-2026-04-09
Undocumented: Only the program shows this item. It can change without notice.
context_hintThe program lists it, and no source states when it is sent.
mcp-servers-2025-12-04
Undocumented: Only the program shows this item. It can change without notice.
mcp_serversThe program lists it, and no source states when it is sent.
files-api-2025-04-14
Undocumented: Only the program shows this item. It can change without notice.
files_apiThe program lists it, and no source states when it is sent.
environments-2025-11-01
Undocumented: Only the program shows this item. It can change without notice.
environmentsThe program lists it, and no source states when it is sent.
ccr-byoc-2025-07-29
Documented: An official docs page names this item.
ccr_byocThe program lists it, and no source states when it is sent. The docs name it in Self-Hosted Environments Testing.
per-turn-control-2026-07-01
Undocumented: Only the program shows this item. It can change without notice.
per_message_effortFor models that take the effort with each message.
timing-2026-09-09
Undocumented: Only the program shows this item. It can change without notice.
per_turn_timingWhen the time goes with each message.
mid-conversation-tool-changes-2026-07-01
Undocumented: Only the program shows this item. It can change without notice.
mid_conv_tool_changeFor models that allow tool changes in the middle of a conversation.
inline-tools-2026-09-15
Undocumented: Only the program shows this item. It can change without notice.
inline_toolsWith the previous value, when a second check passes. CLAUDE_CODE_INLINE_TOOLS=1 also adds it (see Probes).
server-side-fallback-2026-06-01
Undocumented: Only the program shows this item. It can change without notice.
server_side_fallbackThe program lists it, and no source states when it is sent.
server-side-fallback-2026-07-01
Undocumented: Only the program shows this item. It can change without notice.
server_side_fallback_categoryThe program lists it, and no source states when it is sent.
fallback-credit-2026-06-01
Undocumented: Only the program shows this item. It can change without notice.
fallback_creditThe program lists it, and no source states when it is sent.
auto-mode-classifier-2026-07-16
Undocumented: Only the program shows this item. It can change without notice.
auto_mode_classifierThe program lists it, and no source states when it is sent.
dangerous-tool-use-2026-09-03
Undocumented: Only the program shows this item. It can change without notice.
dangerous_tool_useThe program lists it, and no source states when it is sent.
thinking-display-updates-2026-08-18
Undocumented: Only the program shows this item. It can change without notice.
thinking_display_updatesThe program lists it, and no source states when it is sent.
thinking-binding-controls-2026-08-01
Undocumented: Only the program shows this item. It can change without notice.
thinking_binding_controlsThe program lists it, and no source states when it is sent.
message-threads-2026-08-12
Undocumented: Only the program shows this item. It can change without notice.
message_threadsThe program lists it, and no source states when it is sent.
mid-conversation-system-2026-04-07
Undocumented: Only the program shows this item. It can change without notice.
-The program holds it as a plain constant, with no registry name. ANTHROPIC_BETAS skips it, because that feature is generally available.
mid-conversation-system-clear-at-2026-08-21
Undocumented: Only the program shows this item. It can change without notice.
mid_conversation_system_clear_atFor the wire shape that keeps reminders.

The registry also holds two internal switches, x-cc-internal-mid-conv-cache-promotion and x-cc-internal-mid-conv-cache-promotion-ok. They are

Undocumented: Only the program shows this item. It can change without notice.
, and Claude Code does not send them as header values.

Other Beta Values in the Program​

These values belong to the embedded Anthropic SDK client or to the provider code. Claude Code does not put them in the model request. All of them are

Undocumented: Only the program shows this item. It can change without notice.
.

ValueWhere It Is Used
managed-agents-2026-04-01The endpoints /v1/agents, /v1/sessions, and /v1/environments.
dreaming-2026-04-21The endpoint /v1/dreams.
user-profiles-2026-08-18The endpoint /v1/user_profiles.
agent-memory-2026-07-22The endpoint /v1/memory_stores.
message-batches-2024-09-24The batch endpoint.
token-counting-2024-11-01The endpoint /v1/messages/count_tokens.
mcp-tunnels-2026-06-22The endpoint /v1/tunnels.
oidc-federation-2026-04-01The federation endpoints.
ccr-triggers-2026-01-30The endpoint /v1/code/triggers.
bedrock-2023-05-31The anthropic_version of the Bedrock body.
vertex-2023-10-16The anthropic_version of the Vertex body.

Observed Request​

A transcript of 2.1.305 records each request in an api-request line. In a stub run with an API key, that line held 10 betas, from claude-code-20250219 to thinking-display-updates-2026-08-18. On 2.1.307 the same stub run held 9 betas: prompt-caching-scope-2026-01-05 is gone, because the stub is a custom ANTHROPIC_BASE_URL (probe print.transcripts.lines). On a local machine, the api-request lines of 2.1.305 held 19 betas (with claude-sonnet-5-5 and with claude-opus-5-5) or 20 betas (with claude-opus-5-5 only, which added extended-cache-ttl-2025-04-11). The list ran from claude-code-20250219 and oauth-2025-04-20 to message-threads-2026-08-12. This is one observation and not a rule. See Transcript Format.

On 2.1.306 we compared the first request with tools (the main request) of claude -p "Reply with 'OK'." with a subscription login (CLAUDE_CODE_OAUTH_TOKEN) and with a fake API key. Each side sent one /v1/messages request. The body had the same keys, the same tool names, and 4 system blocks. The login sent 15 betas, and the key sent 13. The two only the login sent were oauth-2025-04-20 and extended-cache-ttl-2025-04-11. The default model differed: claude-sonnet-5-5 with the login and claude-opus-5-5 with the key. See Probes.

Example​

Add a beta by hand, then turn all experimental betas off for a proxy that rejects them.

Betas from the shell
# Add one value to the header
ANTHROPIC_BETAS="files-api-2025-04-14" claude -p "hi"

# Stop the experimental values (also ignores ANTHROPIC_BETAS and --betas)
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 claude -p "hi"