## Retrieve Message Batch results

`MessageBatchIndividualResponse Messages.Batches.ResultsStreaming(BatchResultsParamsparameters, CancellationTokencancellationToken = default)`

**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](https://docs.claude.com/en/docs/build-with-claude/batch-processing)

### Parameters

- `BatchResultsParams parameters`

  - `required string messageBatchID`

    ID of the Message Batch.

### Returns

- `class MessageBatchIndividualResponse:`

  This is a single line in the response `.jsonl` file and does not represent the response as a whole.

  - `required string CustomID`

    Developer-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.

  - `required MessageBatchResult Result`

    Processing 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.

    - `class MessageBatchSucceededResult:`

      - `required Message Message`

        - `required string ID`

          Unique object identifier.

          The format and length of IDs may change over time.

        - `required Container? Container`

          Information about the container used in the request (for the code execution tool)

          - `required string ID`

            Identifier for the container used in this request

          - `required DateTimeOffset ExpiresAt`

            The time at which the container will expire.

        - `required IReadOnlyList<ContentBlock> Content`

          Content generated by the model.

          This is an array of content blocks, each of which has a `type` that determines its shape.

          Example:

          ```json
          [{"type": "text", "text": "Hi, I'm Claude."}]
          ```

          If the request input `messages` ended with an `assistant` turn, then the response `content` will continue directly from that last turn. You can use this to constrain the model's output.

          For example, if the input `messages` were:

          ```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 `content` might be:

          ```json
          [{"type": "text", "text": "B)"}]
          ```

          - `class TextBlock:`

            - `required IReadOnlyList<TextCitation>? Citations`

              Citations 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 in `char_location`, and content document results in `content_block_location`.

              - `class CitationCharLocation:`

                - `required string CitedText`

                - `required Long DocumentIndex`

                - `required string? DocumentTitle`

                - `required Long EndCharIndex`

                - `required string? FileID`

                - `required Long StartCharIndex`

                - `JsonElement Type "char_location"constant`

              - `class CitationPageLocation:`

                - `required string CitedText`

                - `required Long DocumentIndex`

                - `required string? DocumentTitle`

                - `required Long EndPageNumber`

                - `required string? FileID`

                - `required Long StartPageNumber`

                - `JsonElement Type "page_location"constant`

              - `class CitationContentBlockLocation:`

                - `required string CitedText`

                  The 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.

                - `required Long DocumentIndex`

                - `required string? DocumentTitle`

                - `required Long EndBlockIndex`

                  Exclusive 0-based end index of the cited block range in the source's `content` array.

                  Always greater than `start_block_index`; a single-block citation has `end_block_index = start_block_index + 1`.

                - `required string? FileID`

                - `required Long StartBlockIndex`

                  0-based index of the first cited block in the source's `content` array.

                - `JsonElement Type "content_block_location"constant`

              - `class CitationsWebSearchResultLocation:`

                - `required string CitedText`

                - `required string EncryptedIndex`

                - `required string? Title`

                - `JsonElement Type "web_search_result_location"constant`

                - `required string Url`

              - `class CitationsSearchResultLocation:`

                - `required string CitedText`

                  The 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.

                - `required Long EndBlockIndex`

                  Exclusive 0-based end index of the cited block range in the source's `content` array.

                  Always greater than `start_block_index`; a single-block citation has `end_block_index = start_block_index + 1`.

                - `required Long SearchResultIndex`

                  0-based index of the cited search result among all `search_result` content 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.

                - `required string Source`

                - `required Long StartBlockIndex`

                  0-based index of the first cited block in the source's `content` array.

                - `required string? Title`

                - `JsonElement Type "search_result_location"constant`

            - `required string Text`

            - `JsonElement Type "text"constant`

          - `class ThinkingBlock:`

            - `required string Signature`

            - `required string Thinking`

            - `JsonElement Type "thinking"constant`

          - `class RedactedThinkingBlock:`

            - `required string Data`

            - `JsonElement Type "redacted_thinking"constant`

          - `class ToolUseBlock:`

            - `required string ID`

            - `required Caller Caller`

              Tool invocation directly from the model.

              - `class DirectCaller:`

                Tool invocation directly from the model.

                - `JsonElement Type "direct"constant`

              - `class ServerToolCaller:`

                Tool invocation generated by a server-side tool.

                - `required string ToolID`

                - `JsonElement Type "code_execution_20250825"constant`

              - `class ServerToolCaller20260120:`

                - `required string ToolID`

                - `JsonElement Type "code_execution_20260120"constant`

            - `required IReadOnlyDictionary<string, JsonElement> Input`

            - `required string Name`

            - `JsonElement Type "tool_use"constant`

          - `class ServerToolUseBlock:`

            - `required string ID`

            - `required Caller Caller`

              Tool invocation directly from the model.

              - `class DirectCaller:`

                Tool invocation directly from the model.

              - `class ServerToolCaller:`

                Tool invocation generated by a server-side tool.

              - `class ServerToolCaller20260120:`

            - `required IReadOnlyDictionary<string, JsonElement> Input`

            - `required Name Name`

              - `"web_search"WebSearch`

              - `"web_fetch"WebFetch`

              - `"code_execution"CodeExecution`

              - `"bash_code_execution"BashCodeExecution`

              - `"text_editor_code_execution"TextEditorCodeExecution`

              - `"tool_search_tool_regex"ToolSearchToolRegex`

              - `"tool_search_tool_bm25"ToolSearchToolBm25`

            - `JsonElement Type "server_tool_use"constant`

          - `class WebSearchToolResultBlock:`

            - `required Caller Caller`

              Tool invocation directly from the model.

              - `class DirectCaller:`

                Tool invocation directly from the model.

              - `class ServerToolCaller:`

                Tool invocation generated by a server-side tool.

              - `class ServerToolCaller20260120:`

            - `required WebSearchToolResultBlockContent Content`

              - `class WebSearchToolResultError:`

                - `required WebSearchToolResultErrorCode ErrorCode`

                  - `"invalid_tool_input"InvalidToolInput`

                  - `"unavailable"Unavailable`

                  - `"max_uses_exceeded"MaxUsesExceeded`

                  - `"too_many_requests"TooManyRequests`

                  - `"query_too_long"QueryTooLong`

                  - `"request_too_large"RequestTooLarge`

                - `JsonElement Type "web_search_tool_result_error"constant`

              - `IReadOnlyList<WebSearchResultBlock>`

                - `required string EncryptedContent`

                - `required string? PageAge`

                - `required string Title`

                - `JsonElement Type "web_search_result"constant`

                - `required string Url`

            - `required string ToolUseID`

            - `JsonElement Type "web_search_tool_result"constant`

          - `class WebFetchToolResultBlock:`

            - `required Caller Caller`

              Tool invocation directly from the model.

              - `class DirectCaller:`

                Tool invocation directly from the model.

              - `class ServerToolCaller:`

                Tool invocation generated by a server-side tool.

              - `class ServerToolCaller20260120:`

            - `required Content Content`

              - `class WebFetchToolResultErrorBlock:`

                - `required WebFetchToolResultErrorCode ErrorCode`

                  - `"invalid_tool_input"InvalidToolInput`

                  - `"url_too_long"UrlTooLong`

                  - `"url_not_allowed"UrlNotAllowed`

                  - `"url_not_in_prior_context"UrlNotInPriorContext`

                  - `"url_not_accessible"UrlNotAccessible`

                  - `"unsupported_content_type"UnsupportedContentType`

                  - `"too_many_requests"TooManyRequests`

                  - `"max_uses_exceeded"MaxUsesExceeded`

                  - `"unavailable"Unavailable`

                - `JsonElement Type "web_fetch_tool_result_error"constant`

              - `class WebFetchBlock:`

                - `required DocumentBlock Content`

                  - `required CitationsConfig? Citations`

                    Citation configuration for the document

                    - `required Boolean Enabled`

                  - `required Source Source`

                    - `class Base64PdfSource:`

                      - `required string Data`

                      - `JsonElement MediaType "application/pdf"constant`

                      - `JsonElement Type "base64"constant`

                    - `class PlainTextSource:`

                      - `required string Data`

                      - `JsonElement MediaType "text/plain"constant`

                      - `JsonElement Type "text"constant`

                  - `required string? Title`

                    The title of the document

                  - `JsonElement Type "document"constant`

                - `required string? RetrievedAt`

                  ISO 8601 timestamp when the content was retrieved

                - `JsonElement Type "web_fetch_result"constant`

                - `required string Url`

                  Fetched content URL

            - `required string ToolUseID`

            - `JsonElement Type "web_fetch_tool_result"constant`

          - `class CodeExecutionToolResultBlock:`

            - `required CodeExecutionToolResultBlockContent Content`

              Code execution result with encrypted stdout for PFC + web_search results.

              - `class CodeExecutionToolResultError:`

                - `required CodeExecutionToolResultErrorCode ErrorCode`

                  - `"invalid_tool_input"InvalidToolInput`

                  - `"unavailable"Unavailable`

                  - `"too_many_requests"TooManyRequests`

                  - `"execution_time_exceeded"ExecutionTimeExceeded`

                - `JsonElement Type "code_execution_tool_result_error"constant`

              - `class CodeExecutionResultBlock:`

                - `required IReadOnlyList<CodeExecutionOutputBlock> Content`

                  - `required string FileID`

                  - `JsonElement Type "code_execution_output"constant`

                - `required Long ReturnCode`

                - `required string Stderr`

                - `required string Stdout`

                - `JsonElement Type "code_execution_result"constant`

              - `class EncryptedCodeExecutionResultBlock:`

                Code execution result with encrypted stdout for PFC + web_search results.

                - `required IReadOnlyList<CodeExecutionOutputBlock> Content`

                  - `required string FileID`

                  - `JsonElement Type "code_execution_output"constant`

                - `required string EncryptedStdout`

                - `required Long ReturnCode`

                - `required string Stderr`

                - `JsonElement Type "encrypted_code_execution_result"constant`

            - `required string ToolUseID`

            - `JsonElement Type "code_execution_tool_result"constant`

          - `class BashCodeExecutionToolResultBlock:`

            - `required Content Content`

              - `class BashCodeExecutionToolResultError:`

                - `required BashCodeExecutionToolResultErrorCode ErrorCode`

                  - `"invalid_tool_input"InvalidToolInput`

                  - `"unavailable"Unavailable`

                  - `"too_many_requests"TooManyRequests`

                  - `"execution_time_exceeded"ExecutionTimeExceeded`

                  - `"output_file_too_large"OutputFileTooLarge`

                - `JsonElement Type "bash_code_execution_tool_result_error"constant`

              - `class BashCodeExecutionResultBlock:`

                - `required IReadOnlyList<BashCodeExecutionOutputBlock> Content`

                  - `required string FileID`

                  - `JsonElement Type "bash_code_execution_output"constant`

                - `required Long ReturnCode`

                - `required string Stderr`

                - `required string Stdout`

                - `JsonElement Type "bash_code_execution_result"constant`

            - `required string ToolUseID`

            - `JsonElement Type "bash_code_execution_tool_result"constant`

          - `class TextEditorCodeExecutionToolResultBlock:`

            - `required Content Content`

              - `class TextEditorCodeExecutionToolResultError:`

                - `required TextEditorCodeExecutionToolResultErrorCode ErrorCode`

                  - `"invalid_tool_input"InvalidToolInput`

                  - `"unavailable"Unavailable`

                  - `"too_many_requests"TooManyRequests`

                  - `"execution_time_exceeded"ExecutionTimeExceeded`

                  - `"file_not_found"FileNotFound`

                - `required string? ErrorMessage`

                - `JsonElement Type "text_editor_code_execution_tool_result_error"constant`

              - `class TextEditorCodeExecutionViewResultBlock:`

                - `required string Content`

                - `required FileType FileType`

                  - `"text"Text`

                  - `"image"Image`

                  - `"pdf"Pdf`

                - `required Long? NumLines`

                - `required Long? StartLine`

                - `required Long? TotalLines`

                - `JsonElement Type "text_editor_code_execution_view_result"constant`

              - `class TextEditorCodeExecutionCreateResultBlock:`

                - `required Boolean IsFileUpdate`

                - `JsonElement Type "text_editor_code_execution_create_result"constant`

              - `class TextEditorCodeExecutionStrReplaceResultBlock:`

                - `required IReadOnlyList<string>? Lines`

                - `required Long? NewLines`

                - `required Long? NewStart`

                - `required Long? OldLines`

                - `required Long? OldStart`

                - `JsonElement Type "text_editor_code_execution_str_replace_result"constant`

            - `required string ToolUseID`

            - `JsonElement Type "text_editor_code_execution_tool_result"constant`

          - `class ToolSearchToolResultBlock:`

            - `required Content Content`

              - `class ToolSearchToolResultError:`

                - `required ToolSearchToolResultErrorCode ErrorCode`

                  - `"invalid_tool_input"InvalidToolInput`

                  - `"unavailable"Unavailable`

                  - `"too_many_requests"TooManyRequests`

                  - `"execution_time_exceeded"ExecutionTimeExceeded`

                - `required string? ErrorMessage`

                - `JsonElement Type "tool_search_tool_result_error"constant`

              - `class ToolSearchToolSearchResultBlock:`

                - `required IReadOnlyList<ToolReferenceBlock> ToolReferences`

                  - `required string ToolName`

                  - `JsonElement Type "tool_reference"constant`

                - `JsonElement Type "tool_search_tool_search_result"constant`

            - `required string ToolUseID`

            - `JsonElement Type "tool_search_tool_result"constant`

          - `class ContainerUploadBlock:`

            Response model for a file uploaded to the container.

            - `required string FileID`

            - `JsonElement Type "container_upload"constant`

        - `required Model Model`

          The model that will complete your prompt.

          See [models](https://docs.anthropic.com/en/docs/models-overview) for additional details and options.

          - `"claude-fable-5"ClaudeFable5`

            Next generation of intelligence for the hardest knowledge work and coding problems

          - `"claude-mythos-5"ClaudeMythos5`

            Most capable model for cybersecurity and biology research

          - `"claude-opus-4-8"ClaudeOpus4_8`

            Frontier intelligence for long-running agents and coding

          - `"claude-opus-4-7"ClaudeOpus4_7`

            Frontier intelligence for long-running agents and coding

          - `"claude-mythos-preview"ClaudeMythosPreview`

            New class of intelligence, strongest in coding and cybersecurity

          - `"claude-opus-4-6"ClaudeOpus4_6`

            Frontier intelligence for long-running agents and coding

          - `"claude-sonnet-4-6"ClaudeSonnet4_6`

            Best combination of speed and intelligence

          - `"claude-haiku-4-5"ClaudeHaiku4_5`

            Fastest model with near-frontier intelligence

          - `"claude-haiku-4-5-20251001"ClaudeHaiku4_5_20251001`

            Fastest model with near-frontier intelligence

          - `"claude-opus-4-5"ClaudeOpus4_5`

            Premium model combining maximum intelligence with practical performance

          - `"claude-opus-4-5-20251101"ClaudeOpus4_5_20251101`

            Premium model combining maximum intelligence with practical performance

          - `"claude-sonnet-4-5"ClaudeSonnet4_5`

            High-performance model for agents and coding

          - `"claude-sonnet-4-5-20250929"ClaudeSonnet4_5_20250929`

            High-performance model for agents and coding

          - `"claude-opus-4-1"ClaudeOpus4_1`

            Exceptional model for specialized complex tasks

          - `"claude-opus-4-1-20250805"ClaudeOpus4_1_20250805`

            Exceptional model for specialized complex tasks

          - `"claude-opus-4-0"ClaudeOpus4_0`

            Powerful model for complex tasks

          - `"claude-opus-4-20250514"ClaudeOpus4_20250514`

            Powerful model for complex tasks

          - `"claude-sonnet-4-0"ClaudeSonnet4_0`

            High-performance model with extended thinking

          - `"claude-sonnet-4-20250514"ClaudeSonnet4_20250514`

            High-performance model with extended thinking

          - `"claude-3-haiku-20240307"Claude_3_Haiku_20240307`

            Fast and cost-effective model

        - `JsonElement Role "assistant"constant`

          Conversational role of the generated message.

          This will always be `"assistant"`.

        - `required RefusalStopDetails? StopDetails`

          Structured information about a refusal.

          - `required Category? Category`

            The policy category that triggered the refusal.

            `null` when the refusal doesn't map to a named category.

            - `"cyber"Cyber`

            - `"bio"Bio`

            - `"reasoning_extraction"ReasoningExtraction`

          - `required string? Explanation`

            Human-readable explanation of the refusal.

            This text is not guaranteed to be stable. `null` when no explanation is available for the category.

          - `JsonElement Type "refusal"constant`

        - `required StopReason? StopReason`

          The 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 requested `max_tokens` or the model's maximum
          * `"stop_sequence"`: one of your provided custom `stop_sequences` was 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_start` event and non-null otherwise.

          - `"end_turn"EndTurn`

          - `"max_tokens"MaxTokens`

          - `"stop_sequence"StopSequence`

          - `"tool_use"ToolUse`

          - `"pause_turn"PauseTurn`

          - `"refusal"Refusal`

        - `required string? StopSequence`

          Which custom stop sequence was generated, if any.

          This value will be a non-null string if one of your custom stop sequences was generated.

        - `JsonElement Type "message"constant`

          Object type.

          For Messages, this is always `"message"`.

        - `required Usage Usage`

          Billing 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 `usage` will not match one-to-one with the exact visible content of an API request or response.

          For example, `output_tokens` will 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`, and `cache_read_input_tokens`.

          - `required CacheCreation? CacheCreation`

            Breakdown of cached tokens by TTL

            - `required Long Ephemeral1hInputTokens`

              The number of input tokens used to create the 1 hour cache entry.

            - `required Long Ephemeral5mInputTokens`

              The number of input tokens used to create the 5 minute cache entry.

          - `required Long? CacheCreationInputTokens`

            The number of input tokens used to create the cache entry.

          - `required Long? CacheReadInputTokens`

            The number of input tokens read from the cache.

          - `required string? InferenceGeo`

            The geographic region where inference was performed for this request.

          - `required Long InputTokens`

            The number of input tokens which were used.

          - `required Long OutputTokens`

            The number of output tokens which were used.

          - `required OutputTokensDetails? OutputTokensDetails`

            Breakdown of output tokens by category.

            `output_tokens` remains 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.

            - `required Long ThinkingTokens`

              Number 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_tokens` approximates the non-reasoning output.

          - `required ServerToolUsage? ServerToolUse`

            The number of server tool requests.

            - `required Long WebFetchRequests`

              The number of web fetch tool requests.

            - `required Long WebSearchRequests`

              The number of web search tool requests.

          - `required ServiceTier? ServiceTier`

            If the request used the priority, standard, or batch tier.

            - `"standard"Standard`

            - `"priority"Priority`

            - `"batch"Batch`

      - `JsonElement Type "succeeded"constant`

    - `class MessageBatchErroredResult:`

      - `required ErrorResponse Error`

        - `required ErrorObject Error`

          - `class InvalidRequestError:`

            - `required string Message`

            - `JsonElement Type "invalid_request_error"constant`

          - `class AuthenticationError:`

            - `required string Message`

            - `JsonElement Type "authentication_error"constant`

          - `class BillingError:`

            - `required string Message`

            - `JsonElement Type "billing_error"constant`

          - `class PermissionError:`

            - `required string Message`

            - `JsonElement Type "permission_error"constant`

          - `class NotFoundError:`

            - `required string Message`

            - `JsonElement Type "not_found_error"constant`

          - `class RateLimitError:`

            - `required string Message`

            - `JsonElement Type "rate_limit_error"constant`

          - `class GatewayTimeoutError:`

            - `required string Message`

            - `JsonElement Type "timeout_error"constant`

          - `class ApiErrorObject:`

            - `required string Message`

            - `JsonElement Type "api_error"constant`

          - `class OverloadedError:`

            - `required string Message`

            - `JsonElement Type "overloaded_error"constant`

        - `required string? RequestID`

        - `JsonElement Type "error"constant`

      - `JsonElement Type "errored"constant`

    - `class MessageBatchCanceledResult:`

      - `JsonElement Type "canceled"constant`

    - `class MessageBatchExpiredResult:`

      - `JsonElement Type "expired"constant`

### Example

```csharp
BatchResultsParams parameters = new() { MessageBatchID = "message_batch_id" };

await foreach (var messageBatchIndividualResponse in client.Messages.Batches.ResultsStreaming(parameters))
{
    Console.WriteLine(messageBatchIndividualResponse);
}
```
