Returns
BetaMessage objecttype: "message"Object type.
For Messages, this is always
"message".default: message
id: stringUnique object identifier.
The format and length of IDs may change over time.
container: BetaContainer or nullInformation about the container used in the request (for the code execution tool)
id: stringIdentifier for the container used in this request
expires_at: stringThe time at which the container will expire.
format: date-time
skills: array of BetaContainerSkill or nullSkills loaded in the container
type: "anthropic" or "custom"Type of skill - either 'anthropic' (built-in) or 'custom' (user-defined)
"anthropic""custom"
skill_id: stringSkill ID
maxLength: 64, minLength: 1
version: stringThe resolved version: a skill version ID for custom skills.
maxLength: 64, minLength: 1
content: array of BetaContentBlockContent generated by the model.
This is an array of content blocks, each of which has a
typethat determines its shape.Example:
json[\{"type": "text", "text": "Hi, I'm Claude."\}]If the request input
messagesended with anassistantturn, then the responsecontentwill continue directly from that last turn. You can use this to constrain the model's output.For example, if the input
messageswere:json[ \{"role": "user", "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun"\}, \{"role": "assistant", "content": "The best answer is ("\} ]Then the response
contentmight be:json[\{"type": "text", "text": "B)"\}]BetaTextBlock objecttype: "text"default: text
citations: array of BetaTextCitation or nullCitations supporting the text block.
The type of citation returned will depend on the type of document being cited. Citing a PDF results in
page_location, plain text results inchar_location, and content document results incontent_block_location.BetaCitationCharLocation objecttype: "char_location"default: char_location
cited_text: stringdocument_index: numberminimum: 0
document_title: string or nullend_char_index: numberfile_id: string or nullstart_char_index: numberminimum: 0
BetaCitationPageLocation objecttype: "page_location"default: page_location
cited_text: stringdocument_index: numberminimum: 0
document_title: string or nullend_page_number: numberfile_id: string or nullstart_page_number: numberminimum: 1
BetaCitationContentBlockLocation objecttype: "content_block_location"default: content_block_location
cited_text: stringThe full text of the cited block range, concatenated.
Always equals the contents of
content[start_block_index:end_block_index]joined together. The text block is the minimal citable unit; this field is never a substring of a single block. Not counted toward output tokens, and not counted toward input tokens when sent back in subsequent turns.document_index: numberminimum: 0
document_title: string or nullend_block_index: numberExclusive 0-based end index of the cited block range in the source's
contentarray.Always greater than
start_block_index; a single-block citation hasend_block_index = start_block_index + 1.file_id: string or nullstart_block_index: number0-based index of the first cited block in the source's
contentarray.minimum: 0
BetaCitationsWebSearchResultLocation objecttype: "web_search_result_location"default: web_search_result_location
cited_text: stringencrypted_index: stringtitle: string or nullmaxLength: 512
url: string
BetaCitationSearchResultLocation objecttype: "search_result_location"default: search_result_location
cited_text: stringThe full text of the cited block range, concatenated.
Always equals the contents of
content[start_block_index:end_block_index]joined together. The text block is the minimal citable unit; this field is never a substring of a single block. Not counted toward output tokens, and not counted toward input tokens when sent back in subsequent turns.end_block_index: numberExclusive 0-based end index of the cited block range in the source's
contentarray.Always greater than
start_block_index; a single-block citation hasend_block_index = start_block_index + 1.search_result_index: number0-based index of the cited search result among all
search_resultcontent blocks in the request, in the order they appear across messages and tool results.Counted separately from
document_index; server-side web search results are not included in this count.minimum: 0
source: stringstart_block_index: number0-based index of the first cited block in the source's
contentarray.minimum: 0
title: string or null
text: stringminLength: 0
BetaThinkingBlock objecttype: "thinking"default: thinking
signature: stringA value used to verify that this thinking block was generated by Claude when it is passed back to the API.
This is an opaque field and should not be interpreted or parsed. When passing thinking blocks back to the API (required when using tools with extended thinking), pass them back exactly as received, with this field intact.
See extended thinking for details.
thinking: stringThe text of Claude's thinking process for this block.
BetaRedactedThinkingBlock objecttype: "redacted_thinking"default: redacted_thinking
data: stringThe contents of this redacted thinking block, returned when portions of the model's thinking were safety-redacted. This field is opaque and encrypted, with no readable content.
Pass
redacted_thinkingblocks back to the API unchanged when continuing a multi-turn conversation.See extended thinking for details.
BetaToolUseBlock objecttype: "tool_use"default: tool_use
id: stringpattern: ^[a-zA-Z0-9_-]+$
input: map[unknown]name: stringminLength: 1
caller: optional BetaDirectCaller or BetaServerToolCaller or BetaServerToolCaller20260120Tool invocation directly from the model.
BetaDirectCaller objectTool invocation directly from the model.
type: "direct"
BetaServerToolCaller objectTool invocation generated by a server-side tool.
type: "code_execution_20250825"tool_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
BetaServerToolCaller20260120 objecttype: "code_execution_20260120"tool_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
toolset_name: optional string or nullFor a toolset member tool_use, the toolset family.
maxLength: 64, minLength: 1, pattern: ^[a-zA-Z0-9_-]+$
BetaServerToolUseBlock objecttype: "server_tool_use"default: server_tool_use
id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
input: map[unknown]name: "advisor" or "web_search" or "web_fetch" or 5 more"advisor""web_search""web_fetch""code_execution""bash_code_execution""text_editor_code_execution""tool_search_tool_regex""tool_search_tool_bm25"
caller: optional BetaDirectCaller or BetaServerToolCaller or BetaServerToolCaller20260120Tool invocation directly from the model.
BetaDirectCaller objectTool invocation directly from the model.
BetaServerToolCaller objectTool invocation generated by a server-side tool.
BetaServerToolCaller20260120 object
BetaWebSearchToolResultBlock objecttype: "web_search_tool_result"default: web_search_tool_result
content: BetaWebSearchToolResultBlockContentBetaWebSearchToolResultError objecttype: "web_search_tool_result_error"default: web_search_tool_result_error
error_code: BetaWebSearchToolResultErrorCode"invalid_tool_input""unavailable""max_uses_exceeded""too_many_requests""query_too_long""request_too_large"
array of BetaWebSearchResultBlocktype: "web_search_result"default: web_search_result
encrypted_content: stringpage_age: string or nulltitle: stringurl: string
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
caller: optional BetaDirectCaller or BetaServerToolCaller or BetaServerToolCaller20260120Tool invocation directly from the model.
BetaDirectCaller objectTool invocation directly from the model.
BetaServerToolCaller objectTool invocation generated by a server-side tool.
BetaServerToolCaller20260120 object
BetaWebFetchToolResultBlock objecttype: "web_fetch_tool_result"default: web_fetch_tool_result
content: BetaWebFetchToolResultErrorBlock or BetaWebFetchBlockBetaWebFetchToolResultErrorBlock objecttype: "web_fetch_tool_result_error"default: web_fetch_tool_result_error
error_code: BetaWebFetchToolResultErrorCode"invalid_tool_input""url_too_long""url_not_allowed""url_not_in_prior_context""url_not_accessible""unsupported_content_type""too_many_requests""max_uses_exceeded""unavailable""content_too_large"
BetaWebFetchBlock objecttype: "web_fetch_result"default: web_fetch_result
content: BetaDocumentBlocktype: "document"default: document
citations: BetaCitationConfig or nullCitation configuration for the document
enabled: booleandefault: false
source: BetaBase64PDFSource or BetaPlainTextSourceBetaBase64PDFSource objecttype: "base64"data: stringformat: byte
media_type: "application/pdf"
BetaPlainTextSource objecttype: "text"data: stringmedia_type: "text/plain"
title: string or nullThe title of the document
retrieved_at: string or nullISO 8601 timestamp when the content was retrieved
url: stringFetched content URL
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
caller: optional BetaDirectCaller or BetaServerToolCaller or BetaServerToolCaller20260120Tool invocation directly from the model.
BetaDirectCaller objectTool invocation directly from the model.
BetaServerToolCaller objectTool invocation generated by a server-side tool.
BetaServerToolCaller20260120 object
BetaAdvisorToolResultBlock objecttype: "advisor_tool_result"default: advisor_tool_result
content: BetaAdvisorToolResultError or BetaAdvisorResultBlock or BetaAdvisorRedactedResultBlockBetaAdvisorToolResultError objecttype: "advisor_tool_result_error"default: advisor_tool_result_error
error_code: "max_uses_exceeded" or "prompt_too_long" or "too_many_requests" or 4 more"max_uses_exceeded""prompt_too_long""too_many_requests""overloaded""unavailable""execution_time_exceeded""model_not_found"
BetaAdvisorResultBlock objecttype: "advisor_result"default: advisor_result
stop_reason: string or nullThe advisor sub-inference's stop reason (same values as the top-level message
stop_reason).max_tokensindicates the advisor's output was truncated at the tool'smax_tokensvalue or the advisor model's policy cap.text: string
BetaAdvisorRedactedResultBlock objecttype: "advisor_redacted_result"default: advisor_redacted_result
encrypted_content: stringOpaque blob containing the advisor's output. Round-trip verbatim; do not inspect or modify.
stop_reason: string or nullThe advisor sub-inference's stop reason (same values as the top-level message
stop_reason).
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
BetaCodeExecutionToolResultBlock objecttype: "code_execution_tool_result"default: code_execution_tool_result
content: BetaCodeExecutionToolResultBlockContentCode execution result with encrypted stdout for PFC + web_search results.
BetaCodeExecutionToolResultError objecttype: "code_execution_tool_result_error"default: code_execution_tool_result_error
error_code: BetaCodeExecutionToolResultErrorCode"invalid_tool_input""unavailable""too_many_requests""execution_time_exceeded"
BetaCodeExecutionResultBlock objecttype: "code_execution_result"default: code_execution_result
content: array of BetaCodeExecutionOutputBlocktype: "code_execution_output"default: code_execution_output
file_id: string
return_code: numberstderr: stringstdout: string
BetaEncryptedCodeExecutionResultBlock objectCode execution result with encrypted stdout for PFC + web_search results.
type: "encrypted_code_execution_result"default: encrypted_code_execution_result
content: array of BetaCodeExecutionOutputBlocktype: "code_execution_output"default: code_execution_output
file_id: string
encrypted_stdout: stringreturn_code: numberstderr: string
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
BetaBashCodeExecutionToolResultBlock objecttype: "bash_code_execution_tool_result"default: bash_code_execution_tool_result
content: BetaBashCodeExecutionToolResultError or BetaBashCodeExecutionResultBlockBetaBashCodeExecutionToolResultError objecttype: "bash_code_execution_tool_result_error"default: bash_code_execution_tool_result_error
error_code: "invalid_tool_input" or "unavailable" or "too_many_requests" or 2 more"invalid_tool_input""unavailable""too_many_requests""execution_time_exceeded""output_file_too_large"
BetaBashCodeExecutionResultBlock objecttype: "bash_code_execution_result"default: bash_code_execution_result
content: array of BetaBashCodeExecutionOutputBlocktype: "bash_code_execution_output"default: bash_code_execution_output
file_id: string
return_code: numberstderr: stringstdout: string
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
BetaTextEditorCodeExecutionToolResultBlock objecttype: "text_editor_code_execution_tool_result"default: text_editor_code_execution_tool_result
content: BetaTextEditorCodeExecutionToolResultError or BetaTextEditorCodeExecutionViewResultBlock or BetaTextEditorCodeExecutionCreateResultBlock or BetaTextEditorCodeExecutionStrReplaceResultBlockBetaTextEditorCodeExecutionToolResultError objecttype: "text_editor_code_execution_tool_result_error"default: text_editor_code_execution_tool_result_error
error_code: "invalid_tool_input" or "unavailable" or "too_many_requests" or 2 more"invalid_tool_input""unavailable""too_many_requests""execution_time_exceeded""file_not_found"
error_message: string or null
BetaTextEditorCodeExecutionViewResultBlock objecttype: "text_editor_code_execution_view_result"default: text_editor_code_execution_view_result
content: stringfile_type: "text" or "image" or "pdf""text""image""pdf"
num_lines: number or nullstart_line: number or nulltotal_lines: number or null
BetaTextEditorCodeExecutionCreateResultBlock objecttype: "text_editor_code_execution_create_result"default: text_editor_code_execution_create_result
is_file_update: boolean
BetaTextEditorCodeExecutionStrReplaceResultBlock objecttype: "text_editor_code_execution_str_replace_result"default: text_editor_code_execution_str_replace_result
lines: array of string or nullnew_lines: number or nullnew_start: number or nullold_lines: number or nullold_start: number or null
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
BetaToolSearchToolResultBlock objecttype: "tool_search_tool_result"default: tool_search_tool_result
content: BetaToolSearchToolResultError or BetaToolSearchToolSearchResultBlockBetaToolSearchToolResultError objecttype: "tool_search_tool_result_error"default: tool_search_tool_result_error
error_code: "invalid_tool_input" or "unavailable" or "too_many_requests" or "execution_time_exceeded""invalid_tool_input""unavailable""too_many_requests""execution_time_exceeded"
error_message: string or null
BetaToolSearchToolSearchResultBlock objecttype: "tool_search_tool_search_result"default: tool_search_tool_search_result
tool_references: array of BetaToolReferenceBlocktype: "tool_reference"default: tool_reference
tool_name: stringmaxLength: 256, minLength: 1, pattern: ^[a-zA-Z0-9_-]{1,256}$
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
BetaMCPToolUseBlock objecttype: "mcp_tool_use"default: mcp_tool_use
id: stringpattern: ^[a-zA-Z0-9_-]+$
input: map[unknown]name: stringThe name of the MCP tool
server_name: stringThe name of the MCP server
BetaMCPToolResultBlock objecttype: "mcp_tool_result"default: mcp_tool_result
content: string or array of BetaTextBlockstringBetaMCPToolResultBlockContent = array of BetaTextBlocktype: "text"default: text
citations: array of BetaTextCitation or nullCitations supporting the text block.
The type of citation returned will depend on the type of document being cited. Citing a PDF results in
page_location, plain text results inchar_location, and content document results incontent_block_location.text: stringminLength: 0
is_error: booleandefault: false
tool_use_id: stringpattern: ^[a-zA-Z0-9_-]+$
BetaContainerUploadBlock objectResponse model for a file uploaded to the container.
type: "container_upload"default: container_upload
file_id: string
BetaCompactionBlock objectA compaction block returned when autocompact is triggered.
When content is None, it indicates the compaction failed to produce a valid summary (e.g., malformed output from the model). Clients may round-trip compaction blocks with null content; the server treats them as no-ops.
type: "compaction"default: compaction
content: string or nullSummary of compacted content, or null if compaction failed
encrypted_content: string or nullOpaque metadata from prior compaction, to be round-tripped verbatim
BetaFallbackBlock objectMarks the point in
contentwhere one model's output gives way to the next.One block appears per hop where a preceding model actually ran this turn and declined. A turn where no preceding model ran and declined has no such boundary and carries no block — the signal for whether a fallback model served the response is the presence of a
fallback_messageentry inusage.iterations, not this block.The block is treated like a server-tool content block for streaming: it arrives via the standard
content_block_start/content_block_stoppair and carries no deltas.type: "fallback"default: fallback
from: BetaFallbackInfoThe model whose output ends at this point — the model that declined at this hop. When the declining hop is the requested model, its
modelechoes the top-levelmodelstring the caller sent (alias or canonical); when the declining hop is a fallback model, itsmodelis that model's canonical id.model: ModelThe model that will complete your prompt.
See models for additional details and options.
"claude-fable-5-1" or "claude-mythos-5-1" or "claude-sonnet-5" or 14 moreThe model that will complete your prompt.
See models for additional details and options.
"claude-fable-5-1"Frontier intelligence for ambitious tasks across coding, scientific discovery, and enterprise workflows
"claude-mythos-5-1"Our most capable model for cybersecurity and biology research, available through trusted access programs
"claude-sonnet-5"High-performance model for coding and agents
"claude-fable-5"Next generation of intelligence for the hardest knowledge work and coding problems
"claude-mythos-5"Most capable model for cybersecurity and biology research
"claude-opus-5"Powerful intelligence for long-running agents and coding
"claude-opus-4-8"Powerful intelligence for long-running agents and coding
"claude-opus-4-7"Powerful intelligence for long-running agents and coding
"claude-mythos-preview"New class of intelligence, strongest in coding and cybersecurity
"claude-opus-4-6"Powerful intelligence for long-running agents and coding
"claude-sonnet-4-6"Best combination of speed and intelligence
"claude-haiku-4-5"Fastest model with near-frontier intelligence
"claude-haiku-4-5-20251001"Fastest model with near-frontier intelligence
"claude-opus-4-5"Powerful intelligence for long-running agents and coding
"claude-opus-4-5-20251101"Powerful intelligence for long-running agents and coding
"claude-sonnet-4-5"High-performance model for agents and coding
"claude-sonnet-4-5-20250929"High-performance model for agents and coding
string
to: BetaFallbackInfoThe fallback model producing the content that follows this block. Its
modelis always the canonical id.trigger: BetaFallbackRefusalTriggerWhat caused the
frommodel to hand over at this hop.type: "refusal"default: refusal
category: "cyber" or "bio" or "frontier_llm" or 2 more or nullThe policy category that triggered a refusal.
"cyber"The request could enable cyber harm, such as malware or exploit development. Benign cybersecurity work can also trigger this category.
"bio"The request could enable biological harm, such as dangerous lab methods. Beneficial life sciences work can also trigger this category.
"frontier_llm"The request could assist the development of competing AI models, which is restricted under Anthropic's commercial terms. Benign machine learning work can also trigger this category.
"reasoning_extraction"The request asks the model to reproduce its internal reasoning in the response text. To get reasoning in a structured form instead, use adaptive thinking.
"general_harms"The request could be related to an area that was determined as harmful. Benign work might sometimes trigger this category.
context_management: BetaContextManagementResponse or nullContext management response.
Information about context management strategies applied during the request.
applied_edits: array of BetaClearToolUses20250919EditResponse or BetaClearThinking20251015EditResponseList of context management edits that were applied.
BetaClearToolUses20250919EditResponse objecttype: "clear_tool_uses_20250919"The type of context management edit applied.
default: clear_tool_uses_20250919
cleared_input_tokens: numberNumber of input tokens cleared by this edit.
minimum: 0
cleared_tool_uses: numberNumber of tool uses that were cleared.
minimum: 0
BetaClearThinking20251015EditResponse objecttype: "clear_thinking_20251015"The type of context management edit applied.
default: clear_thinking_20251015
cleared_input_tokens: numberNumber of input tokens cleared by this edit.
minimum: 0
cleared_thinking_turns: numberNumber of thinking turns that were cleared.
minimum: 0
diagnostics: BetaDiagnostics or nullResponse envelope for request-level diagnostics. Present (possibly null) whenever the caller supplied
diagnosticson the request.cache_miss_reason: BetaCacheMissModelChanged or BetaCacheMissSystemChanged or BetaCacheMissToolsChanged or 3 more or nullExplains why the prompt cache could not fully reuse the prefix from the request identified by
diagnostics.previous_message_id.nullmeans diagnosis is still pending — the response was serialized before the background comparison completed.BetaCacheMissModelChanged objecttype: "model_changed"default: model_changed
cache_missed_input_tokens: numberApproximate number of input tokens that would have been read from cache had the prefix matched the previous request.
BetaCacheMissSystemChanged objecttype: "system_changed"default: system_changed
cache_missed_input_tokens: numberApproximate number of input tokens that would have been read from cache had the prefix matched the previous request.
BetaCacheMissToolsChanged objecttype: "tools_changed"default: tools_changed
cache_missed_input_tokens: numberApproximate number of input tokens that would have been read from cache had the prefix matched the previous request.
BetaCacheMissMessagesChanged objecttype: "messages_changed"default: messages_changed
cache_missed_input_tokens: numberApproximate number of input tokens that would have been read from cache had the prefix matched the previous request.
BetaCacheMissPreviousMessageNotFound objecttype: "previous_message_not_found"default: previous_message_not_found
BetaCacheMissUnavailable objecttype: "unavailable"default: unavailable
model: ModelThe model that will complete your prompt.
See models for additional details and options.
role: "assistant"Conversational role of the generated message.
This will always be
"assistant".default: assistant
stop_details: BetaRefusalStopDetails or nullStructured information about a refusal.
type: "refusal"default: refusal
category: "cyber" or "bio" or "frontier_llm" or 2 more or nullThe policy category that triggered a refusal.
"cyber"The request could enable cyber harm, such as malware or exploit development. Benign cybersecurity work can also trigger this category.
"bio"The request could enable biological harm, such as dangerous lab methods. Beneficial life sciences work can also trigger this category.
"frontier_llm"The request could assist the development of competing AI models, which is restricted under Anthropic's commercial terms. Benign machine learning work can also trigger this category.
"reasoning_extraction"The request asks the model to reproduce its internal reasoning in the response text. To get reasoning in a structured form instead, use adaptive thinking.
"general_harms"The request could be related to an area that was determined as harmful. Benign work might sometimes trigger this category.
explanation: string or nullHuman-readable explanation of the refusal.
This text is not guaranteed to be stable.
nullwhen no explanation is available for the category.fallback_credit_token: string or nullOpaque code that refunds the cache-miss cost when retrying this refused request on the fallback model. Pass it as
fallback_credit_tokenon the retry request. Expires 5 minutes after the refusal.The retry is sent either with the same request body (
system,messages,tools, and other render-shaping fields), or with the same body plus one appendedassistantmessage whose content is the partial text (with any trailing whitespace stripped from the final text block) and paired server-tool blocks from this refusal — which also authorizes that appended turn as an assistant-prefill continuation on models that otherwise disallow prefill. A token minted mid-server-tool-loop whose partial content was continuable may only be redeemed the second way — if a same-body retry is rejected with a 400 saying the token must be redeemed by continuing the partial response, retry the second way instead. Either way: same workspace, same platform; a mismatch is a 400. Resending a token for an already-warm prefix is permitted but yields no additional credit.nullwhen the refused model isn't eligible for a fallback credit.fallback_has_prefill_claim: boolean or nullWhether the accompanying
fallback_credit_tokenmay be redeemed with the appended-assistant retry form. Only set whenfallback_credit_tokenis present.true: retry by resending the same request body plus one appendedassistantmessage whose content is this response'scontentwith any trailing whitespace stripped from the final text block and unpairedtool_useblocks omitted (the same appended-turn shape described onfallback_credit_token), with the token attached.false: retry by resending the original request body unchanged, with the token attached — the appended-assistant form is not available for this refusal (no continuable partial content, or the request usesoutput_formator atool_choicethat forces tool use). One exception: when the request usedoutput_formator a forcedtool_choiceand the refusal arrived after server tools (including MCP connector tools) had already executed, the token may not be redeemable by either retry form; if the exact-body retry is then rejected with a 400 saying the token must be redeemed by continuing the partial response, discard the token and retry without it.Advisory: if an appended-assistant retry is rejected with a 400 despite
true, fall back to resending the original request body with the token.recommended_model: string or nullThe server's suggested retry target for this refusal. Populated when a fallback attempt could not be made (the fallback model's rate limit was exhausted, or it was overloaded); names the fallback model the caller can retry directly. Null otherwise.
stop_reason: BetaStopReason or nullThe reason that we stopped.
This may be one the following values:
"end_turn": the model reached a natural stopping point"max_tokens": we exceeded the requestedmax_tokensor the model's maximum"stop_sequence": one of your provided customstop_sequenceswas generated"tool_use": the model invoked one or more tools"pause_turn": we paused a long-running turn. You may provide the response back as-is in a subsequent request to let the model continue."refusal": when streaming classifiers intervene to handle potential policy violations"model_context_window_exceeded": we exceeded the model's context window
In non-streaming mode this value is always non-null. In streaming mode, it is null in the
message_startevent and non-null otherwise."end_turn""max_tokens""stop_sequence""tool_use""pause_turn""compaction""refusal""model_context_window_exceeded"
stop_sequence: string or nullWhich custom stop sequence was generated, if any.
This value will be a non-null string if one of your custom stop sequences was generated.
usage: BetaUsageBilling and rate-limit usage.
Anthropic's API bills and rate-limits by token counts, as tokens represent the underlying cost to our systems.
Under the hood, the API transforms requests into a format suitable for the model. The model's output then goes through a parsing stage before becoming an API response. As a result, the token counts in
usagewill not match one-to-one with the exact visible content of an API request or response.For example,
output_tokenswill be non-zero, even for an empty string response from Claude.Total input tokens in a request is the summation of
input_tokens,cache_creation_input_tokens, andcache_read_input_tokens.cache_creation: BetaCacheCreation or nullBreakdown of cached tokens by TTL
ephemeral_1h_input_tokens: numberThe number of input tokens used to create the 1 hour cache entry.
default: 0, minimum: 0
ephemeral_5m_input_tokens: numberThe number of input tokens used to create the 5 minute cache entry.
default: 0, minimum: 0
cache_creation_input_tokens: number or nullThe number of input tokens used to create the cache entry.
minimum: 0
cache_read_input_tokens: number or nullThe number of input tokens read from the cache.
minimum: 0
fallback_credit: BetaFallbackCreditUsage or nullOutcome of the
fallback_credit_tokenpresented on this request.status: BetaFallbackCreditRedeemed or BetaFallbackCreditNotAppliedWhether the fallback-credit reprice was applied to this response's billing.
A union discriminated on
type.redeemed: the retry is billed as if the conversation had been on the retry model all along — including when the resulting shift is zero because there was nothing to move.not_applied: no reprice was applied; the arm'sreasonsays why.BetaFallbackCreditRedeemed objectThe reprice was applied: the retry is billed as if the conversation had been on the retry model all along.
type: "redeemed"default: redeemed
BetaFallbackCreditNotApplied objectNo reprice was applied;
reasonsays why.type: "not_applied"default: not_applied
reason: "body_mismatch" or "continuation_excluded" or "continuation_only" or 9 moreWhy the reprice was not applied.
A closed enum; additions to the redemption-check vocabulary arrive as deliberate schema updates.
"body_mismatch""continuation_excluded""continuation_only""expired""invalid_target_model""not_enabled""reprice_unavailable""temporarily_unavailable""variant_fields_present""wrong_organization""wrong_platform""wrong_workspace"
remove_to_redeem: optional array of string or nullRequest fields to remove before retrying, so the retry can redeem this token.
Present exactly when
reasonisvariant_fields_present— never null, never an empty array; absent otherwise. Fields are named only from your own request, and only after the sealed variant hash matched. A served best-effort retry has already been billed at normal price; nothing redeems retroactively, but a corrected re-send inside the token's five-minute window can still redeem.
inference_geo: string or nullThe geographic region where inference was performed for this request.
input_tokens: numberThe number of input tokens which were used.
minimum: 0
iterations: BetaIterationsUsage or nullPer-iteration token usage breakdown.
Each entry represents one sampling iteration, with its own input/output token counts and cache statistics, discriminated by
type. Formessageentries (model sampling iterations, such as the turns of a server-side tool use loop), this allows you to:- Determine which iterations exceeded long context thresholds (>=200k tokens)
- Calculate the context window size from the last
messageentry - Understand token accumulation across server-side tool use loops
A
compactionentry reports the token usage of the compaction operation itself — the server-side request that summarizes the context being closed — NOT the size of the context that was compacted away, and its token counts can be much smaller than that closed context (for example, a compaction that closes a ~200k-token context can report only a few thousand tokens). Do not derive the context window size from acompactionentry, even when it is the last entry. Acompactionentry's tokens are not included in the top-levelusagefields. When an input-token trigger is in effect (the default — 150,000 tokens unless configured otherwise), eachcompactionentry closes a context that had reached at least that threshold, though the context can exceed it by the final iteration's output and tool results.BetaMessageIterationUsage objectToken usage for a sampling iteration.
type: "message"Usage for a sampling iteration
default: message
cache_creation: BetaCacheCreation or nullBreakdown of cached tokens by TTL
cache_creation_input_tokens: numberThe number of input tokens used to create the cache entry.
default: 0, minimum: 0
cache_read_input_tokens: numberThe number of input tokens read from the cache.
default: 0, minimum: 0
input_tokens: numberThe number of input tokens which were used.
minimum: 0
model: ModelThe model that will complete your prompt.
See models for additional details and options.
output_tokens: numberThe number of output tokens which were used.
minimum: 0
BetaCompactionIterationUsage objectToken usage for a compaction iteration.
type: "compaction"Usage for a compaction iteration
default: compaction
cache_creation: BetaCacheCreation or nullBreakdown of cached tokens by TTL
cache_creation_input_tokens: numberThe number of input tokens used to create the cache entry.
default: 0, minimum: 0
cache_read_input_tokens: numberThe number of input tokens read from the cache.
default: 0, minimum: 0
input_tokens: numberThe number of input tokens which were used.
minimum: 0
output_tokens: numberThe number of output tokens which were used.
minimum: 0
BetaAdvisorMessageIterationUsage objectToken usage for an advisor sub-inference iteration.
type: "advisor_message"Usage for an advisor sub-inference iteration
default: advisor_message
cache_creation: BetaCacheCreation or nullBreakdown of cached tokens by TTL
cache_creation_input_tokens: numberThe number of input tokens used to create the cache entry.
default: 0, minimum: 0
cache_read_input_tokens: numberThe number of input tokens read from the cache.
default: 0, minimum: 0
input_tokens: numberThe number of input tokens which were used.
minimum: 0
model: ModelThe model that will complete your prompt.
See models for additional details and options.
output_tokens: numberThe number of output tokens which were used.
minimum: 0
BetaFallbackMessageIterationUsage objectToken usage for the fallback-model attempt of a server-side fallback request.
Produced in place of a
messageentry for whichever hop served the response. A declined hop produces the existingmessageentry. Whether a fallback model served the response is signalled by the presence of this entry inusage.iterations.type: "fallback_message"Usage for the fallback-model attempt that served the response
default: fallback_message
cache_creation: BetaCacheCreation or nullBreakdown of cached tokens by TTL
cache_creation_input_tokens: numberThe number of input tokens used to create the cache entry.
default: 0, minimum: 0
cache_read_input_tokens: numberThe number of input tokens read from the cache.
default: 0, minimum: 0
input_tokens: numberThe number of input tokens which were used.
minimum: 0
model: ModelThe model that will complete your prompt.
See models for additional details and options.
output_tokens: numberThe number of output tokens which were used.
minimum: 0
output_tokens: numberThe number of output tokens which were used.
minimum: 0
output_tokens_details: BetaOutputTokensDetails or nullBreakdown of output tokens by category.
output_tokensremains the inclusive, authoritative total used for billing. This object provides a read-only decomposition for observability — for example, how many of the billed output tokens were spent on internal reasoning that may have been summarized before being returned to you.thinking_tokens: numberNumber of output tokens the model generated as internal reasoning, including the thinking-block delimiter tokens.
Reflects the raw reasoning the model produced, not the (possibly shorter) summarized thinking text returned in the response body. Computed by re-tokenizing the raw reasoning text, so it may differ from the model's exact generation count by a small number of tokens. Always ≤
output_tokens;output_tokens - thinking_tokensapproximates the non-reasoning output.default: 0, minimum: 0
server_tool_use: BetaServerToolUsage or nullThe number of server tool requests.
web_fetch_requests: numberThe number of web fetch tool requests.
default: 0, minimum: 0
web_search_requests: numberThe number of web search tool requests.
default: 0, minimum: 0
service_tier: "standard" or "priority" or "batch" or nullIf the request used the priority, standard, or batch tier.
"standard""priority""batch"
speed: "standard" or "fast" or nullInference speed mode.
fastprovides significantly faster output token generation at premium pricing. Not all models supportfast; invalid combinations are rejected at create time."standard""fast"
input_transformations: optional array of BetaThinkingDroppedInputTransformation or nullChanges the API made to the request's input before showing it to the model: one entry per change, in request order. Today the only entry type is
thinking_dropped— athinking,redacted_thinkingorconnector_textblock from the request'smessagesthat was removed from the prompt instead of being shown to the model because it failed a binding check. More entry types may be added over time; ignore types you do not recognize.Requires
anthropic-beta: thinking-binding-controls-2026-08-01. Present on every such response from a model that supports extended thinking, as[]when nothing was changed; without the beta, blocks are removed all the same but nothing is reported. Removed blocks contribute nothing tousage.input_tokens. When streaming, the array is final inmessage_start; the finalmessage_deltaevent carries it only when a server-side model fallback happened mid-stream, in which case it holds the serving model's entries and replaces the one inmessage_start.type: "thinking_dropped"Always
thinking_droppedfor this entry type.default: thinking_dropped
path: stringWhere the removed block was in your request, as
messages.\{i\}.content.\{j\}:iindexes themessagesarray you sent andjthat message'scontentarray — the same form error messages use.reason: "model_binding_mismatch" or "prefix_binding_mismatch" or "organization_binding_mismatch" or "end_user_binding_mismatch"Which binding check removed the block:
model_binding_mismatch— it was created by a model whose reasoning the requested model may not read;prefix_binding_mismatch— the conversation before it differs from the conversation it was created in (the rest of that turn's consecutive thinking blocks are removed with it, each with this reason);organization_binding_mismatch— it was created under a different organization (an Anthropic organization, AWS account or Google Cloud project) and this organization is not one of its additional organizations;end_user_binding_mismatch— it was created for a different end user, or was removed by the consumer-organization binding. A block that would fail several checks reports one reason, in this order of precedence:organization_binding_mismatch,end_user_binding_mismatch,model_binding_mismatch,prefix_binding_mismatch."model_binding_mismatch""prefix_binding_mismatch""organization_binding_mismatch""end_user_binding_mismatch"
BetaRawMessageStreamEvent = BetaRawMessageStartEvent or BetaRawMessageDeltaEvent or BetaRawMessageStopEvent or 3 moreBetaRawMessageStartEvent objecttype: "message_start"default: message_start
message: BetaMessage
BetaRawMessageDeltaEvent objecttype: "message_delta"default: message_delta
context_management: BetaContextManagementResponse or nullInformation about context management strategies applied during the request
delta: objectcontainer: BetaContainer or nullInformation about the container used in the request (for the code execution tool)
stop_details: BetaRefusalStopDetails or nullStructured information about a refusal.
stop_reason: BetaStopReason or nullstop_sequence: string or null
usage: BetaMessageDeltaUsageBilling and rate-limit usage.
Anthropic's API bills and rate-limits by token counts, as tokens represent the underlying cost to our systems.
Under the hood, the API transforms requests into a format suitable for the model. The model's output then goes through a parsing stage before becoming an API response. As a result, the token counts in
usagewill not match one-to-one with the exact visible content of an API request or response.For example,
output_tokenswill be non-zero, even for an empty string response from Claude.Total input tokens in a request is the summation of
input_tokens,cache_creation_input_tokens, andcache_read_input_tokens.cache_creation_input_tokens: number or nullThe cumulative number of input tokens used to create the cache entry.
minimum: 0
cache_read_input_tokens: number or nullThe cumulative number of input tokens read from the cache.
minimum: 0
fallback_credit: BetaFallbackCreditUsage or nullOutcome of the
fallback_credit_tokenpresented on this request.input_tokens: number or nullThe cumulative number of input tokens which were used.
minimum: 0
iterations: BetaIterationsUsage or nullPer-iteration token usage breakdown.
Each entry represents one sampling iteration, with its own input/output token counts and cache statistics, discriminated by
type. Formessageentries (model sampling iterations, such as the turns of a server-side tool use loop), this allows you to:- Determine which iterations exceeded long context thresholds (>=200k tokens)
- Calculate the context window size from the last
messageentry - Understand token accumulation across server-side tool use loops
A
compactionentry reports the token usage of the compaction operation itself — the server-side request that summarizes the context being closed — NOT the size of the context that was compacted away, and its token counts can be much smaller than that closed context (for example, a compaction that closes a ~200k-token context can report only a few thousand tokens). Do not derive the context window size from acompactionentry, even when it is the last entry. Acompactionentry's tokens are not included in the top-levelusagefields. When an input-token trigger is in effect (the default — 150,000 tokens unless configured otherwise), eachcompactionentry closes a context that had reached at least that threshold, though the context can exceed it by the final iteration's output and tool results.output_tokens: numberThe cumulative number of output tokens which were used.
output_tokens_details: BetaOutputTokensDetails or nullBreakdown of output tokens by category.
output_tokensremains the inclusive, authoritative total used for billing. This object provides a read-only decomposition for observability — for example, how many of the billed output tokens were spent on internal reasoning that may have been summarized before being returned to you.server_tool_use: BetaServerToolUsage or nullThe number of server tool requests.
input_transformations: optional array of BetaThinkingDroppedInputTransformation or nullChanges the API made to the request's input before showing it to the model: one entry per change, in request order. Today the only entry type is
thinking_dropped— athinking,redacted_thinkingorconnector_textblock from the request'smessagesthat was removed from the prompt instead of being shown to the model because it failed a binding check. More entry types may be added over time; ignore types you do not recognize.Requires
anthropic-beta: thinking-binding-controls-2026-08-01. Present on every such response from a model that supports extended thinking, as[]when nothing was changed; without the beta, blocks are removed all the same but nothing is reported. Removed blocks contribute nothing tousage.input_tokens. When streaming, the array is final inmessage_start; the finalmessage_deltaevent carries it only when a server-side model fallback happened mid-stream, in which case it holds the serving model's entries and replaces the one inmessage_start.type: "thinking_dropped"Always
thinking_droppedfor this entry type.default: thinking_dropped
path: stringWhere the removed block was in your request, as
messages.\{i\}.content.\{j\}:iindexes themessagesarray you sent andjthat message'scontentarray — the same form error messages use.reason: "model_binding_mismatch" or "prefix_binding_mismatch" or "organization_binding_mismatch" or "end_user_binding_mismatch"Which binding check removed the block:
model_binding_mismatch— it was created by a model whose reasoning the requested model may not read;prefix_binding_mismatch— the conversation before it differs from the conversation it was created in (the rest of that turn's consecutive thinking blocks are removed with it, each with this reason);organization_binding_mismatch— it was created under a different organization (an Anthropic organization, AWS account or Google Cloud project) and this organization is not one of its additional organizations;end_user_binding_mismatch— it was created for a different end user, or was removed by the consumer-organization binding. A block that would fail several checks reports one reason, in this order of precedence:organization_binding_mismatch,end_user_binding_mismatch,model_binding_mismatch,prefix_binding_mismatch.
BetaRawMessageStopEvent objecttype: "message_stop"default: message_stop
BetaRawContentBlockStartEvent objecttype: "content_block_start"default: content_block_start
content_block: BetaTextBlock or BetaThinkingBlock or BetaRedactedThinkingBlock or 14 moreResponse model for a file uploaded to the container.
BetaTextBlock objectBetaThinkingBlock objectBetaRedactedThinkingBlock objectBetaToolUseBlock objectBetaServerToolUseBlock objectBetaWebSearchToolResultBlock objectBetaWebFetchToolResultBlock objectBetaAdvisorToolResultBlock objectBetaCodeExecutionToolResultBlock objectBetaBashCodeExecutionToolResultBlock objectBetaTextEditorCodeExecutionToolResultBlock objectBetaToolSearchToolResultBlock objectBetaMCPToolUseBlock objectBetaMCPToolResultBlock objectBetaContainerUploadBlock objectResponse model for a file uploaded to the container.
BetaCompactionBlock objectA compaction block returned when autocompact is triggered.
When content is None, it indicates the compaction failed to produce a valid summary (e.g., malformed output from the model). Clients may round-trip compaction blocks with null content; the server treats them as no-ops.
BetaFallbackBlock objectMarks the point in
contentwhere one model's output gives way to the next.One block appears per hop where a preceding model actually ran this turn and declined. A turn where no preceding model ran and declined has no such boundary and carries no block — the signal for whether a fallback model served the response is the presence of a
fallback_messageentry inusage.iterations, not this block.The block is treated like a server-tool content block for streaming: it arrives via the standard
content_block_start/content_block_stoppair and carries no deltas.
index: number
BetaRawContentBlockDeltaEvent objecttype: "content_block_delta"default: content_block_delta
delta: BetaRawContentBlockDeltaBetaTextDelta objecttype: "text_delta"default: text_delta
text: string
BetaInputJSONDelta objecttype: "input_json_delta"default: input_json_delta
partial_json: string
BetaCitationsDelta objecttype: "citations_delta"default: citations_delta
citation: BetaCitationCharLocation or BetaCitationPageLocation or BetaCitationContentBlockLocation or 2 moreBetaCitationCharLocation objectBetaCitationPageLocation objectBetaCitationContentBlockLocation objectBetaCitationsWebSearchResultLocation objectBetaCitationSearchResultLocation object
BetaThinkingDelta objecttype: "thinking_delta"default: thinking_delta
estimated_tokens: number or nullPer-frame increment of a coarse, running estimate of the tokens this thinking block has produced so far. Present whenever the
thinking-token-count-2026-05-13beta is set;nullunlessthinking.displayresolves to"omitted"and a count is due this frame. Sum the increments acrossthinking_deltaframes on this block for a progress indicator. Each increment is a non-negative multiple of a fixed quantum and the cadence is rate-limited, so this is a deliberately lossy display hint, not a billable count;usage.output_tokensremains authoritative.thinking: stringThe incremental
thinkingtext for this content block. Concatenate thethinkingvalues of successivethinking_deltaevents to assemble the block's fullthinkingvalue.
BetaSignatureDelta objecttype: "signature_delta"default: signature_delta
signature: stringThe
signaturefor this thinking block: an opaque value used to verify that the block was generated by Claude when it is passed back to the API. Delivered in asignature_deltaevent just before the block'scontent_block_stopevent.
BetaCompactionContentBlockDelta objecttype: "compaction_delta"default: compaction_delta
content: string or nullencrypted_content: string or nullOpaque metadata from prior compaction, to be round-tripped verbatim
index: number
BetaRawContentBlockStopEvent objecttype: "content_block_stop"default: content_block_stop
index: number