title: Retrieve Message Batch results url: https://platform.claude.com/docs/en/api/beta/messages/batches/results
Retrieve Message Batch results
GET /v1/messages/batches/{message_batch_id}/results
Streams the results of a Message Batch as a .jsonl file.
Each line in the file is a JSON object containing the result of a single request in the Message Batch. Results are not guaranteed to be in the same order as requests. Use the custom_id field to match results to requests.
Learn more about the Message Batches API in our user guide
Path parameters
-
message_batch_id: stringID of the Message Batch.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
-
"anthropic-workspace-id": optional string
Returns
-
BetaMessageBatchIndividualResponse objectThis is a single line in the response
.jsonlfile and does not represent the response as a whole.-
custom_id: stringDeveloper-provided ID created for each request in a Message Batch. Useful for matching results to requests, as results may be given out of request order.
Must be unique for each request within the Message Batch.
-
result: BetaMessageBatchResultProcessing result for this request.
Contains a Message output if processing was successful, an error response if processing failed, or the reason why processing was not attempted, such as cancellation or expiration.
-
BetaMessageBatchSucceededResult object-
type: "succeeded"default: succeeded
-
message: BetaMessage-
type: "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 object-
type: "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 object-
type: "char_location"default: char_location
-
cited_text: string -
document_index: numberminimum: 0
-
document_title: string or null -
end_char_index: number -
file_id: string or null -
start_char_index: numberminimum: 0
-
-
BetaCitationPageLocation object-
type: "page_location"default: page_location
-
cited_text: string -
document_index: numberminimum: 0
-
document_title: string or null -
end_page_number: number -
file_id: string or null -
start_page_number: numberminimum: 1
-
-
BetaCitationContentBlockLocation object-
type: "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 null -
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. -
file_id: string or null -
start_block_index: number0-based index of the first cited block in the source's
contentarray.minimum: 0
-
-
BetaCitationsWebSearchResultLocation object-
type: "web_search_result_location"default: web_search_result_location
-
cited_text: string -
encrypted_index: string -
title: string or nullmaxLength: 512
-
url: string
-
-
BetaCitationSearchResultLocation object-
type: "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: string -
start_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 object-
type: "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 object-
type: "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 object-
type: "tool_use"default: tool_use
-
id: stringpattern: [1]+$
-
input: map[unknown] -
name: stringminLength: 1
-
caller: optional BetaDirectCaller or BetaServerToolCaller or BetaServerToolCaller20260120-
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 object-
type: "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: [2]+$
-
-
BetaServerToolUseBlock object-
type: "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 BetaServerToolCaller20260120-
BetaDirectCaller objectTool invocation directly from the model.
-
BetaServerToolCaller objectTool invocation generated by a server-side tool.
-
BetaServerToolCaller20260120 object
-
-
-
BetaWebSearchToolResultBlock object-
type: "web_search_tool_result"default: web_search_tool_result
-
content: BetaWebSearchToolResultBlockContent-
BetaWebSearchToolResultError object-
type: "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 BetaWebSearchResultBlock-
type: "web_search_result"default: web_search_result
-
encrypted_content: string -
page_age: string or null -
title: string -
url: string
-
-
-
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
-
caller: optional BetaDirectCaller or BetaServerToolCaller or BetaServerToolCaller20260120-
BetaDirectCaller objectTool invocation directly from the model.
-
BetaServerToolCaller objectTool invocation generated by a server-side tool.
-
BetaServerToolCaller20260120 object
-
-
-
BetaWebFetchToolResultBlock object-
type: "web_fetch_tool_result"default: web_fetch_tool_result
-
content: BetaWebFetchToolResultErrorBlock or BetaWebFetchBlock-
BetaWebFetchToolResultErrorBlock object-
type: "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 object-
type: "web_fetch_result"default: web_fetch_result
-
content: BetaDocumentBlock-
type: "document"default: document
-
citations: BetaCitationConfig or nullCitation configuration for the document
-
enabled: booleandefault: false
-
-
source: BetaBase64PDFSource or BetaPlainTextSource-
BetaBase64PDFSource object-
type: "base64" -
data: stringformat: byte
-
media_type: "application/pdf"
-
-
BetaPlainTextSource object-
type: "text" -
data: string -
media_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 BetaServerToolCaller20260120-
BetaDirectCaller objectTool invocation directly from the model.
-
BetaServerToolCaller objectTool invocation generated by a server-side tool.
-
BetaServerToolCaller20260120 object
-
-
-
BetaAdvisorToolResultBlock object-
type: "advisor_tool_result"default: advisor_tool_result
-
content: BetaAdvisorToolResultError or BetaAdvisorResultBlock or BetaAdvisorRedactedResultBlock-
BetaAdvisorToolResultError object-
type: "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 object-
type: "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 object-
type: "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 object-
type: "code_execution_tool_result"default: code_execution_tool_result
-
content: BetaCodeExecutionToolResultBlockContent-
BetaCodeExecutionToolResultError object-
type: "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 object-
type: "code_execution_result"default: code_execution_result
-
content: array of BetaCodeExecutionOutputBlock-
type: "code_execution_output"default: code_execution_output
-
file_id: string
-
-
return_code: number -
stderr: string -
stdout: 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 BetaCodeExecutionOutputBlock-
type: "code_execution_output"default: code_execution_output
-
file_id: string
-
-
encrypted_stdout: string -
return_code: number -
stderr: string
-
-
-
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
-
-
BetaBashCodeExecutionToolResultBlock object-
type: "bash_code_execution_tool_result"default: bash_code_execution_tool_result
-
content: BetaBashCodeExecutionToolResultError or BetaBashCodeExecutionResultBlock-
BetaBashCodeExecutionToolResultError object-
type: "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 object-
type: "bash_code_execution_result"default: bash_code_execution_result
-
content: array of BetaBashCodeExecutionOutputBlock-
type: "bash_code_execution_output"default: bash_code_execution_output
-
file_id: string
-
-
return_code: number -
stderr: string -
stdout: string
-
-
-
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
-
-
BetaTextEditorCodeExecutionToolResultBlock object-
type: "text_editor_code_execution_tool_result"default: text_editor_code_execution_tool_result
-
content: BetaTextEditorCodeExecutionToolResultError or BetaTextEditorCodeExecutionViewResultBlock or BetaTextEditorCodeExecutionCreateResultBlock or BetaTextEditorCodeExecutionStrReplaceResultBlock-
BetaTextEditorCodeExecutionToolResultError object-
type: "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 object-
type: "text_editor_code_execution_view_result"default: text_editor_code_execution_view_result
-
content: string -
file_type: "text" or "image" or "pdf"-
"text" -
"image" -
"pdf"
-
-
num_lines: number or null -
start_line: number or null -
total_lines: number or null
-
-
BetaTextEditorCodeExecutionCreateResultBlock object-
type: "text_editor_code_execution_create_result"default: text_editor_code_execution_create_result
-
is_file_update: boolean
-
-
BetaTextEditorCodeExecutionStrReplaceResultBlock object-
type: "text_editor_code_execution_str_replace_result"default: text_editor_code_execution_str_replace_result
-
lines: array of string or null -
new_lines: number or null -
new_start: number or null -
old_lines: number or null -
old_start: number or null
-
-
-
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
-
-
BetaToolSearchToolResultBlock object-
type: "tool_search_tool_result"default: tool_search_tool_result
-
content: BetaToolSearchToolResultError or BetaToolSearchToolSearchResultBlock-
BetaToolSearchToolResultError object-
type: "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 object-
type: "tool_search_tool_search_result"default: tool_search_tool_search_result
-
tool_references: array of BetaToolReferenceBlock-
type: "tool_reference"default: tool_reference
-
tool_name: stringmaxLength: 256, minLength: 1, pattern: [3]{1,256}$
-
-
-
-
tool_use_id: stringpattern: ^srvtoolu_[a-zA-Z0-9_]+$
-
-
BetaMCPToolUseBlock object-
type: "mcp_tool_use"default: mcp_tool_use
-
id: stringpattern: [4]+$
-
input: map[unknown] -
name: stringThe name of the MCP tool
-
server_name: stringThe name of the MCP server
-
-
BetaMCPToolResultBlock object-
type: "mcp_tool_result"default: mcp_tool_result
-
content: string or array of BetaTextBlock-
string -
BetaMCPToolResultBlockContent = array of BetaTextBlock-
type: "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: [5]+$
-
-
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
-
signature: optional string or nullSignature over the summary, to be sent back with the block 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 object-
type: "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 object-
type: "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 object-
type: "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 object-
type: "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 object-
type: "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 object-
type: "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 object-
type: "previous_message_not_found"default: previous_message_not_found
-
-
BetaCacheMissUnavailable object-
type: "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: Model or nullThe 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.
The terminal entry of a fallback-served turn: when a fallback hop's output is the returned message, the entry for the iteration that completed it carries this type in place of
message. A declined hop and the serving hop's earlier tool-loop iterations producemessageentries. 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 BetaInputTransformation or nullChanges the API made to the request's input before showing it to the model, and blocks that failed a binding check but were left unchanged: one entry per block, in request order. Two entry types today.
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.thinking_mismatch_allowed— athinkingorredacted_thinkingblock that failed the conversation check (the conversation before it differs from the one it was created in, or it carries no record of one on a model that requires it) and was shown to the model all the same, because that check is not enforced for this request. 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 there is no entry to report; without the beta, blocks are removed or left in place all the same but nothing is reported. Removed blocks contribute nothing tousage.input_tokens; blocks left in place count as sent. 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.-
BetaThinkingDroppedInputTransformation object-
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"
-
-
-
BetaThinkingMismatchAllowedInputTransformation object-
type: "thinking_mismatch_allowed"Always
thinking_mismatch_allowedfor this entry type.default: thinking_mismatch_allowed
-
path: stringWhere the block is 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 the block failed; the block was shown to the model all the same. Always
prefix_binding_mismatchtoday — the conversation before the block differs from the conversation it was created in, or the block carries no record of one on a model that requires it. Were the check enforced for this request, the block would have been removed or the request rejected (thinking.block_binding.prefix_mismatch_behavior). A removal also takes the rest of that turn's consecutive thinking blocks, whereas here each block is checked on its own, sothinking_mismatch_allowedentries are a lower bound on what enforcement would remove.-
"model_binding_mismatch" -
"prefix_binding_mismatch" -
"organization_binding_mismatch" -
"end_user_binding_mismatch"
-
-
-
-
-
-
BetaMessageBatchErroredResult object-
type: "errored"default: errored
-
error: BetaErrorResponse-
type: "error"default: error
-
error: BetaError-
BetaInvalidRequestError object-
type: "invalid_request_error"default: invalid_request_error
-
message: stringdefault: Invalid request
-
-
BetaAuthenticationError object-
type: "authentication_error"default: authentication_error
-
message: stringdefault: Authentication error
-
-
BetaBillingError object-
type: "billing_error"default: billing_error
-
message: stringdefault: Billing error
-
-
BetaPermissionError object-
type: "permission_error"default: permission_error
-
message: stringdefault: Permission denied
-
-
BetaNotFoundError object-
type: "not_found_error"default: not_found_error
-
message: stringdefault: Not found
-
-
BetaRateLimitError object-
type: "rate_limit_error"default: rate_limit_error
-
message: stringdefault: Rate limited
-
-
BetaGatewayTimeoutError object-
type: "timeout_error"default: timeout_error
-
message: stringdefault: Request timeout
-
-
BetaAPIError object-
type: "api_error"default: api_error
-
message: stringdefault: Internal server error
-
-
BetaOverloadedError object-
type: "overloaded_error"default: overloaded_error
-
message: stringdefault: Overloaded
-
-
-
request_id: string or null
-
-
-
BetaMessageBatchCanceledResult object-
type: "canceled"default: canceled
-
-
BetaMessageBatchExpiredResult object-
type: "expired"default: expired
-
-
-
Example
curl https://api.anthropic.com/v1/messages/batches/$MESSAGE_BATCH_ID/results \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: message-batches-2024-09-24' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"