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.
Returns
-
MessageBatchIndividualResponse object { custom_id, result }This 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: MessageBatchResultProcessing 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.
-
MessageBatchSucceededResult object { message, type }-
message: Message-
id: stringUnique object identifier.
The format and length of IDs may change over time.
-
container: ContainerInformation 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.
-
-
content: array of ContentBlockContent generated by the model.
This is an array of content blocks, each of which has a
typethat determines its shape.Example:
[{"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:[ {"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:[{"type": "text", "text": "B)"}]-
TextBlock object { citations, text, type }-
citations: array of TextCitationCitations 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.-
CitationCharLocation object { cited_text, document_index, document_title, 4 more }-
cited_text: string -
document_index: number -
document_title: string -
end_char_index: number -
file_id: string -
start_char_index: number -
type: "char_location""char_location"
-
-
CitationPageLocation object { cited_text, document_index, document_title, 4 more }-
cited_text: string -
document_index: number -
document_title: string -
end_page_number: number -
file_id: string -
start_page_number: number -
type: "page_location""page_location"
-
-
CitationContentBlockLocation object { cited_text, document_index, document_title, 4 more }-
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: number -
document_title: string -
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 -
start_block_index: number0-based index of the first cited block in the source's
contentarray. -
type: "content_block_location""content_block_location"
-
-
CitationsWebSearchResultLocation object { cited_text, encrypted_index, title, 2 more }-
cited_text: string -
encrypted_index: string -
title: string -
type: "web_search_result_location""web_search_result_location"
-
url: string
-
-
CitationsSearchResultLocation object { cited_text, end_block_index, search_result_index, 4 more }-
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. -
source: string -
start_block_index: number0-based index of the first cited block in the source's
contentarray. -
title: string -
type: "search_result_location""search_result_location"
-
-
-
text: string -
type: "text""text"
-
-
ThinkingBlock object { signature, thinking, type }-
signature: string -
thinking: string -
type: "thinking""thinking"
-
-
RedactedThinkingBlock object { data, type }-
data: string -
type: "redacted_thinking""redacted_thinking"
-
-
ToolUseBlock object { id, caller, input, 2 more }-
id: string -
caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120Tool invocation directly from the model.
-
DirectCaller object { type }Tool invocation directly from the model.
-
type: "direct""direct"
-
-
ServerToolCaller object { tool_id, type }Tool invocation generated by a server-side tool.
-
tool_id: string -
type: "code_execution_20250825""code_execution_20250825"
-
-
ServerToolCaller20260120 object { tool_id, type }-
tool_id: string -
type: "code_execution_20260120""code_execution_20260120"
-
-
-
input: map[unknown] -
name: string -
type: "tool_use""tool_use"
-
-
ServerToolUseBlock object { id, caller, input, 2 more }-
id: string -
caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120Tool invocation directly from the model.
-
DirectCaller object { type }Tool invocation directly from the model.
-
ServerToolCaller object { tool_id, type }Tool invocation generated by a server-side tool.
-
ServerToolCaller20260120 object { tool_id, type }
-
-
input: map[unknown] -
name: "web_search" or "web_fetch" or "code_execution" or 4 more-
"web_search" -
"web_fetch" -
"code_execution" -
"bash_code_execution" -
"text_editor_code_execution" -
"tool_search_tool_regex" -
"tool_search_tool_bm25"
-
-
type: "server_tool_use""server_tool_use"
-
-
WebSearchToolResultBlock object { caller, content, tool_use_id, type }-
caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120Tool invocation directly from the model.
-
DirectCaller object { type }Tool invocation directly from the model.
-
ServerToolCaller object { tool_id, type }Tool invocation generated by a server-side tool.
-
ServerToolCaller20260120 object { tool_id, type }
-
-
content: WebSearchToolResultBlockContent-
WebSearchToolResultError object { error_code, type }-
error_code: WebSearchToolResultErrorCode-
"invalid_tool_input" -
"unavailable" -
"max_uses_exceeded" -
"too_many_requests" -
"query_too_long" -
"request_too_large"
-
-
type: "web_search_tool_result_error""web_search_tool_result_error"
-
-
array of WebSearchResultBlock-
encrypted_content: string -
page_age: string -
title: string -
type: "web_search_result""web_search_result"
-
url: string
-
-
-
tool_use_id: string -
type: "web_search_tool_result""web_search_tool_result"
-
-
WebFetchToolResultBlock object { caller, content, tool_use_id, type }-
caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120Tool invocation directly from the model.
-
DirectCaller object { type }Tool invocation directly from the model.
-
ServerToolCaller object { tool_id, type }Tool invocation generated by a server-side tool.
-
ServerToolCaller20260120 object { tool_id, type }
-
-
content: WebFetchToolResultErrorBlock or WebFetchBlock-
WebFetchToolResultErrorBlock object { error_code, type }-
error_code: WebFetchToolResultErrorCode-
"invalid_tool_input" -
"url_too_long" -
"url_not_allowed" -
"url_not_accessible" -
"unsupported_content_type" -
"too_many_requests" -
"max_uses_exceeded" -
"unavailable"
-
-
type: "web_fetch_tool_result_error""web_fetch_tool_result_error"
-
-
WebFetchBlock object { content, retrieved_at, type, url }-
content: DocumentBlock-
citations: CitationsConfigCitation configuration for the document
enabled: boolean
-
source: Base64PDFSource or PlainTextSource-
Base64PDFSource object { data, media_type, type }-
data: string -
media_type: "application/pdf""application/pdf"
-
type: "base64""base64"
-
-
PlainTextSource object { data, media_type, type }-
data: string -
media_type: "text/plain""text/plain"
-
type: "text""text"
-
-
-
title: stringThe title of the document
-
type: "document""document"
-
-
retrieved_at: stringISO 8601 timestamp when the content was retrieved
-
type: "web_fetch_result""web_fetch_result"
-
url: stringFetched content URL
-
-
-
tool_use_id: string -
type: "web_fetch_tool_result""web_fetch_tool_result"
-
-
CodeExecutionToolResultBlock object { content, tool_use_id, type }-
content: CodeExecutionToolResultBlockContentCode execution result with encrypted stdout for PFC + web_search results.
-
CodeExecutionToolResultError object { error_code, type }-
error_code: CodeExecutionToolResultErrorCode-
"invalid_tool_input" -
"unavailable" -
"too_many_requests" -
"execution_time_exceeded"
-
-
type: "code_execution_tool_result_error""code_execution_tool_result_error"
-
-
CodeExecutionResultBlock object { content, return_code, stderr, 2 more }-
content: array of CodeExecutionOutputBlock-
file_id: string -
type: "code_execution_output""code_execution_output"
-
-
return_code: number -
stderr: string -
stdout: string -
type: "code_execution_result""code_execution_result"
-
-
EncryptedCodeExecutionResultBlock object { content, encrypted_stdout, return_code, 2 more }Code execution result with encrypted stdout for PFC + web_search results.
-
content: array of CodeExecutionOutputBlock-
file_id: string -
type: "code_execution_output"
-
-
encrypted_stdout: string -
return_code: number -
stderr: string -
type: "encrypted_code_execution_result""encrypted_code_execution_result"
-
-
-
tool_use_id: string -
type: "code_execution_tool_result""code_execution_tool_result"
-
-
BashCodeExecutionToolResultBlock object { content, tool_use_id, type }-
content: BashCodeExecutionToolResultError or BashCodeExecutionResultBlock-
BashCodeExecutionToolResultError object { error_code, type }-
error_code: BashCodeExecutionToolResultErrorCode-
"invalid_tool_input" -
"unavailable" -
"too_many_requests" -
"execution_time_exceeded" -
"output_file_too_large"
-
-
type: "bash_code_execution_tool_result_error""bash_code_execution_tool_result_error"
-
-
BashCodeExecutionResultBlock object { content, return_code, stderr, 2 more }-
content: array of BashCodeExecutionOutputBlock-
file_id: string -
type: "bash_code_execution_output""bash_code_execution_output"
-
-
return_code: number -
stderr: string -
stdout: string -
type: "bash_code_execution_result""bash_code_execution_result"
-
-
-
tool_use_id: string -
type: "bash_code_execution_tool_result""bash_code_execution_tool_result"
-
-
TextEditorCodeExecutionToolResultBlock object { content, tool_use_id, type }-
content: TextEditorCodeExecutionToolResultError or TextEditorCodeExecutionViewResultBlock or TextEditorCodeExecutionCreateResultBlock or TextEditorCodeExecutionStrReplaceResultBlock-
TextEditorCodeExecutionToolResultError object { error_code, error_message, type }-
error_code: TextEditorCodeExecutionToolResultErrorCode-
"invalid_tool_input" -
"unavailable" -
"too_many_requests" -
"execution_time_exceeded" -
"file_not_found"
-
-
error_message: string -
type: "text_editor_code_execution_tool_result_error""text_editor_code_execution_tool_result_error"
-
-
TextEditorCodeExecutionViewResultBlock object { content, file_type, num_lines, 3 more }-
content: string -
file_type: "text" or "image" or "pdf"-
"text" -
"image" -
"pdf"
-
-
num_lines: number -
start_line: number -
total_lines: number -
type: "text_editor_code_execution_view_result""text_editor_code_execution_view_result"
-
-
TextEditorCodeExecutionCreateResultBlock object { is_file_update, type }-
is_file_update: boolean -
type: "text_editor_code_execution_create_result""text_editor_code_execution_create_result"
-
-
TextEditorCodeExecutionStrReplaceResultBlock object { lines, new_lines, new_start, 3 more }-
lines: array of string -
new_lines: number -
new_start: number -
old_lines: number -
old_start: number -
type: "text_editor_code_execution_str_replace_result""text_editor_code_execution_str_replace_result"
-
-
-
tool_use_id: string -
type: "text_editor_code_execution_tool_result""text_editor_code_execution_tool_result"
-
-
ToolSearchToolResultBlock object { content, tool_use_id, type }-
content: ToolSearchToolResultError or ToolSearchToolSearchResultBlock-
ToolSearchToolResultError object { error_code, error_message, type }-
error_code: ToolSearchToolResultErrorCode-
"invalid_tool_input" -
"unavailable" -
"too_many_requests" -
"execution_time_exceeded"
-
-
error_message: string -
type: "tool_search_tool_result_error""tool_search_tool_result_error"
-
-
ToolSearchToolSearchResultBlock object { tool_references, type }-
tool_references: array of ToolReferenceBlock-
tool_name: string -
type: "tool_reference""tool_reference"
-
-
type: "tool_search_tool_search_result""tool_search_tool_search_result"
-
-
-
tool_use_id: string -
type: "tool_search_tool_result""tool_search_tool_result"
-
-
ContainerUploadBlock object { file_id, type }Response model for a file uploaded to the container.
-
file_id: string -
type: "container_upload""container_upload"
-
-
-
model: ModelThe model that will complete your prompt.
See models for additional details and options.
-
"claude-opus-4-7" or "claude-mythos-preview" or "claude-opus-4-6" or 14 moreThe model that will complete your prompt.
See models for additional details and options.
-
"claude-opus-4-7"Frontier intelligence for long-running agents and coding
-
"claude-mythos-preview"New class of intelligence, strongest in coding and cybersecurity
-
"claude-opus-4-6"Frontier 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"Premium model combining maximum intelligence with practical performance
-
"claude-opus-4-5-20251101"Premium model combining maximum intelligence with practical performance
-
"claude-sonnet-4-5"High-performance model for agents and coding
-
"claude-sonnet-4-5-20250929"High-performance model for agents and coding
-
"claude-opus-4-1"Exceptional model for specialized complex tasks
-
"claude-opus-4-1-20250805"Exceptional model for specialized complex tasks
-
"claude-opus-4-0"Powerful model for complex tasks
-
"claude-opus-4-20250514"Powerful model for complex tasks
-
"claude-sonnet-4-0"High-performance model with extended thinking
-
"claude-sonnet-4-20250514"High-performance model with extended thinking
-
"claude-3-haiku-20240307"Fast and cost-effective model
-
-
string
-
-
role: "assistant"Conversational role of the generated message.
This will always be
"assistant"."assistant"
-
stop_details: RefusalStopDetailsStructured information about a refusal.
-
category: "cyber" or "bio"The policy category that triggered the refusal.
nullwhen the refusal doesn't map to a named category.-
"cyber" -
"bio"
-
-
explanation: stringHuman-readable explanation of the refusal.
This text is not guaranteed to be stable.
nullwhen no explanation is available for the category. -
type: "refusal""refusal"
-
-
stop_reason: StopReasonThe 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
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" -
"refusal"
-
stop_sequence: stringWhich custom stop sequence was generated, if any.
This value will be a non-null string if one of your custom stop sequences was generated.
-
type: "message"Object type.
For Messages, this is always
"message"."message"
-
usage: UsageBilling 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: CacheCreationBreakdown of cached tokens by TTL
-
ephemeral_1h_input_tokens: numberThe number of input tokens used to create the 1 hour cache entry.
-
ephemeral_5m_input_tokens: numberThe number of input tokens used to create the 5 minute cache entry.
-
-
cache_creation_input_tokens: numberThe number of input tokens used to create the cache entry.
-
cache_read_input_tokens: numberThe number of input tokens read from the cache.
-
inference_geo: stringThe geographic region where inference was performed for this request.
-
input_tokens: numberThe number of input tokens which were used.
-
output_tokens: numberThe number of output tokens which were used.
-
server_tool_use: ServerToolUsageThe number of server tool requests.
-
web_fetch_requests: numberThe number of web fetch tool requests.
-
web_search_requests: numberThe number of web search tool requests.
-
-
service_tier: "standard" or "priority" or "batch"If the request used the priority, standard, or batch tier.
-
"standard" -
"priority" -
"batch"
-
-
-
-
type: "succeeded""succeeded"
-
-
MessageBatchErroredResult object { error, type }-
error: ErrorResponse-
error: ErrorObject-
InvalidRequestError object { message, type }-
message: string -
type: "invalid_request_error""invalid_request_error"
-
-
AuthenticationError object { message, type }-
message: string -
type: "authentication_error""authentication_error"
-
-
BillingError object { message, type }-
message: string -
type: "billing_error""billing_error"
-
-
PermissionError object { message, type }-
message: string -
type: "permission_error""permission_error"
-
-
NotFoundError object { message, type }-
message: string -
type: "not_found_error""not_found_error"
-
-
RateLimitError object { message, type }-
message: string -
type: "rate_limit_error""rate_limit_error"
-
-
GatewayTimeoutError object { message, type }-
message: string -
type: "timeout_error""timeout_error"
-
-
APIErrorObject object { message, type }-
message: string -
type: "api_error""api_error"
-
-
OverloadedError object { message, type }-
message: string -
type: "overloaded_error""overloaded_error"
-
-
-
request_id: string -
type: "error""error"
-
-
type: "errored""errored"
-
-
MessageBatchCanceledResult object { type }-
type: "canceled""canceled"
-
-
MessageBatchExpiredResult object { type }-
type: "expired""expired"
-
-
-
Example
curl https://api.anthropic.com/v1/messages/batches/$MESSAGE_BATCH_ID/results \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"