Haijun Platform Docs
ID

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: string

ID of the Message Batch.

Headers

  • "juglow-workspace-id": optional string

Optional header to select the Workspace for this request. The value is a Workspace ID (for example, wrkspc_011CZkZaBF1tNoB5wlCeusgy).

Only needed for credentials that can act on more than one Workspace. A credential that belongs to a specific Workspace may omit it; if sent, it must match that Workspace.

Returns

  • MessageBatchIndividualResponse object

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

  • custom_id: string

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.

  • result: MessageBatchResult

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.

  • MessageBatchSucceededResult object
  • type: "succeeded"

default: succeeded

  • message: Message
  • type: "message"

Object type.

For Messages, this is always "message".

default: message

  • id: string

Unique object identifier.

The format and length of IDs may change over time.

  • container: Container or null

Information about the container used in this request.

This will be non-null if a container tool (e.g. code execution) was used.

  • id: string

Identifier for the container used in this request

  • expires_at: string

The time at which the container will expire.

format: date-time

  • tracks: array of ContainerSkill or null

Tracks loaded in the container

  • type: "juglow" or "custom"

Type of track - either 'juglow' (built-in) or 'custom' (user-defined)

  • "juglow"
  • "custom"
  • skill_id: string

Track ID

minLength: 1, maxLength: 64

  • version: string

The resolved version: a track version ID for custom tracks.

minLength: 1, maxLength: 64

  • content: array of ContentBlock

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 Haijun."}]

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)"}]
  • TextBlock object
  • type: "text"

default: text

  • citations: array of TextCitation or null

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.

  • CitationCharLocation object
  • type: "char_location"

default: char_location

  • cited_text: string
  • document_index: number

minimum: 0

  • document_title: string or null
  • end_char_index: number
  • file_id: string or null
  • start_char_index: number

minimum: 0

  • CitationPageLocation object
  • type: "page_location"

default: page_location

  • cited_text: string
  • document_index: number

minimum: 0

  • document_title: string or null
  • end_page_number: number
  • file_id: string or null
  • start_page_number: number

minimum: 1

  • CitationContentBlockLocation object
  • type: "content_block_location"

default: content_block_location

  • cited_text: string

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.

  • document_index: number

minimum: 0

  • document_title: string or null
  • end_block_index: number

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.

  • file_id: string or null
  • start_block_index: number

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

minimum: 0

  • CitationsWebSearchResultLocation object
  • type: "web_search_result_location"

default: web_search_result_location

  • cited_text: string
  • encrypted_index: string
  • title: string or null

maxLength: 512

  • url: string
  • CitationsSearchResultLocation object
  • type: "search_result_location"

default: search_result_location

  • cited_text: string

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.

  • end_block_index: number

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.

  • search_result_index: number

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.

minimum: 0

  • source: string
  • start_block_index: number

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

minimum: 0

  • title: string or null
  • text: string
  • ThinkingBlock object
  • type: "thinking"

default: thinking

  • signature: string

A value used to verify that this thinking block was generated by Haijun 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: string

The text of Haijun's thinking process for this block.

  • RedactedThinkingBlock object
  • type: "redacted_thinking"

default: redacted_thinking

  • data: string

The 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_thinking blocks back to the API unchanged when continuing a multi-turn conversation.

See extended thinking for details.

  • ToolUseBlock object
  • type: "tool_use"

default: tool_use

  • id: string

pattern: ^[a-zA-Z0-9_-]+$

  • caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120

default: {"type":"direct"}

  • DirectCaller object

Tool invocation directly from the model.

  • type: "direct"
  • ServerToolCaller object

Tool invocation generated by a server-side tool.

  • type: "code_execution_20250825"
  • tool_id: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • ServerToolCaller20260120 object
  • type: "code_execution_20260120"
  • tool_id: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • input: map[unknown]
  • name: string

minLength: 1

  • toolset_name: optional string or null

For a toolset member tool_use, the toolset family.

minLength: 1, maxLength: 64, pattern: ^[a-zA-Z0-9_-]+$

  • ServerToolUseBlock object
  • type: "server_tool_use"

default: server_tool_use

  • id: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120

default: {"type":"direct"}

  • DirectCaller object

Tool invocation directly from the model.

  • ServerToolCaller object

Tool invocation generated by a server-side tool.

  • ServerToolCaller20260120 object
  • 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"
  • WebSearchToolResultBlock object
  • type: "web_search_tool_result"

default: web_search_tool_result

  • caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120

default: {"type":"direct"}

  • DirectCaller object

Tool invocation directly from the model.

  • ServerToolCaller object

Tool invocation generated by a server-side tool.

  • ServerToolCaller20260120 object
  • content: WebSearchToolResultBlockContent
  • WebSearchToolResultError object
  • type: "web_search_tool_result_error"

default: web_search_tool_result_error

  • error_code: WebSearchToolResultErrorCode
  • "invalid_tool_input"
  • "unavailable"
  • "max_uses_exceeded"
  • "too_many_requests"
  • "query_too_long"
  • "request_too_large"
  • array of WebSearchResultBlock
  • type: "web_search_result"

default: web_search_result

  • encrypted_content: string
  • page_age: string or null
  • title: string
  • url: string
  • tool_use_id: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • WebFetchToolResultBlock object
  • type: "web_fetch_tool_result"

default: web_fetch_tool_result

  • caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120

default: {"type":"direct"}

  • DirectCaller object

Tool invocation directly from the model.

  • ServerToolCaller object

Tool invocation generated by a server-side tool.

  • ServerToolCaller20260120 object
  • content: WebFetchToolResultErrorBlock or WebFetchBlock
  • WebFetchToolResultErrorBlock object
  • type: "web_fetch_tool_result_error"

default: web_fetch_tool_result_error

  • error_code: WebFetchToolResultErrorCode
  • "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"
  • WebFetchBlock object
  • type: "web_fetch_result"

default: web_fetch_result

  • content: DocumentBlock
  • type: "document"

default: document

  • citations: CitationsConfig or null

Citation configuration for the document

  • enabled: boolean

default: false

  • source: Base64PDFSource or PlainTextSource
  • Base64PDFSource object
  • type: "base64"
  • data: string

format: byte

  • media_type: "application/pdf"
  • PlainTextSource object
  • type: "text"
  • data: string
  • media_type: "text/plain"
  • title: string or null

The title of the document

  • retrieved_at: string or null

ISO 8601 timestamp when the content was retrieved

  • url: string

Fetched content URL

  • tool_use_id: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • CodeExecutionToolResultBlock object
  • type: "code_execution_tool_result"

default: code_execution_tool_result

  • content: CodeExecutionToolResultBlockContent
  • CodeExecutionToolResultError object
  • type: "code_execution_tool_result_error"

default: code_execution_tool_result_error

  • error_code: CodeExecutionToolResultErrorCode
  • "invalid_tool_input"
  • "unavailable"
  • "too_many_requests"
  • "execution_time_exceeded"
  • CodeExecutionResultBlock object
  • type: "code_execution_result"

default: code_execution_result

  • content: array of CodeExecutionOutputBlock
  • type: "code_execution_output"

default: code_execution_output

  • file_id: string
  • return_code: number
  • stderr: string
  • stdout: string
  • EncryptedCodeExecutionResultBlock object

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

  • type: "encrypted_code_execution_result"

default: encrypted_code_execution_result

  • content: array of CodeExecutionOutputBlock
  • type: "code_execution_output"

default: code_execution_output

  • file_id: string
  • encrypted_stdout: string
  • return_code: number
  • stderr: string
  • tool_use_id: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • BashCodeExecutionToolResultBlock object
  • type: "bash_code_execution_tool_result"

default: bash_code_execution_tool_result

  • content: BashCodeExecutionToolResultError or BashCodeExecutionResultBlock
  • BashCodeExecutionToolResultError object
  • type: "bash_code_execution_tool_result_error"

default: bash_code_execution_tool_result_error

  • error_code: BashCodeExecutionToolResultErrorCode
  • "invalid_tool_input"
  • "unavailable"
  • "too_many_requests"
  • "execution_time_exceeded"
  • "output_file_too_large"
  • BashCodeExecutionResultBlock object
  • type: "bash_code_execution_result"

default: bash_code_execution_result

  • content: array of BashCodeExecutionOutputBlock
  • type: "bash_code_execution_output"

default: bash_code_execution_output

  • file_id: string
  • return_code: number
  • stderr: string
  • stdout: string
  • tool_use_id: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • TextEditorCodeExecutionToolResultBlock object
  • type: "text_editor_code_execution_tool_result"

default: text_editor_code_execution_tool_result

  • content: TextEditorCodeExecutionToolResultError or TextEditorCodeExecutionViewResultBlock or TextEditorCodeExecutionCreateResultBlock or TextEditorCodeExecutionStrReplaceResultBlock
  • TextEditorCodeExecutionToolResultError object
  • type: "text_editor_code_execution_tool_result_error"

default: text_editor_code_execution_tool_result_error

  • error_code: TextEditorCodeExecutionToolResultErrorCode
  • "invalid_tool_input"
  • "unavailable"
  • "too_many_requests"
  • "execution_time_exceeded"
  • "file_not_found"
  • error_message: string or null
  • TextEditorCodeExecutionViewResultBlock 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
  • TextEditorCodeExecutionCreateResultBlock object
  • type: "text_editor_code_execution_create_result"

default: text_editor_code_execution_create_result

  • is_file_update: boolean
  • TextEditorCodeExecutionStrReplaceResultBlock 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: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • ToolSearchToolResultBlock object
  • type: "tool_search_tool_result"

default: tool_search_tool_result

  • content: ToolSearchToolResultError or ToolSearchToolSearchResultBlock
  • ToolSearchToolResultError object
  • type: "tool_search_tool_result_error"

default: tool_search_tool_result_error

  • error_code: ToolSearchToolResultErrorCode
  • "invalid_tool_input"
  • "unavailable"
  • "too_many_requests"
  • "execution_time_exceeded"
  • error_message: string or null
  • ToolSearchToolSearchResultBlock object
  • type: "tool_search_tool_search_result"

default: tool_search_tool_search_result

  • tool_references: array of ToolReferenceBlock
  • type: "tool_reference"

default: tool_reference

  • tool_name: string

minLength: 1, maxLength: 256, pattern: ^[a-zA-Z0-9_-]{1,256}$

  • tool_use_id: string

pattern: ^srvtoolu_[a-zA-Z0-9_]+$

  • ContainerUploadBlock object

Response model for a file uploaded to the container.

  • type: "container_upload"

default: container_upload

  • file_id: string
  • diagnostics: Diagnostics or null

Request-level diagnostics. null when the request did not supply diagnostics, or when it did and no prompt-cache divergence was detected.

  • cache_miss_reason: CacheMissReason or null

Explains why the prompt cache could not fully reuse the prefix from the request identified by diagnostics.previous_message_id. null means diagnosis is still pending — the response was serialized before the background comparison completed.

  • CacheMissModelChanged object
  • type: "model_changed"

default: model_changed

  • cache_missed_input_tokens: number

Approximate number of input tokens that would have been read from cache had the prefix matched the previous request.

  • CacheMissSystemChanged object
  • type: "system_changed"

default: system_changed

  • cache_missed_input_tokens: number

Approximate number of input tokens that would have been read from cache had the prefix matched the previous request.

  • CacheMissToolsChanged object
  • type: "tools_changed"

default: tools_changed

  • cache_missed_input_tokens: number

Approximate number of input tokens that would have been read from cache had the prefix matched the previous request.

  • CacheMissMessagesChanged object
  • type: "messages_changed"

default: messages_changed

  • cache_missed_input_tokens: number

Approximate number of input tokens that would have been read from cache had the prefix matched the previous request.

  • CacheMissPreviousMessageNotFound object
  • type: "previous_message_not_found"

default: previous_message_not_found

  • CacheMissUnavailable object
  • type: "unavailable"

default: unavailable

  • model: Model

The model that will complete your prompt.

See models for additional details and options.

  • string
  • "haijun-fable-5-1" or "haijun-opus-5-5" or "haijun-mythos-5-1" or 15 more

The model that will complete your prompt.

See models for additional details and options.

  • "haijun-fable-5-1"

Frontier intelligence for ambitious tasks across coding, scientific discovery, and enterprise workflows

  • "haijun-opus-5-5"

Powerful intelligence for coding, knowledge work, and long-running agents

  • "haijun-mythos-5-1"

Our most capable model for cybersecurity and biology research, available through trusted access programs

  • "haijun-sonnet-5"

High-performance model for coding and agents

  • "haijun-fable-5"

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

  • "haijun-mythos-5"

Most capable model for cybersecurity and biology research

  • "haijun-opus-5"

Powerful intelligence for long-running agents and coding

  • "haijun-opus-4-8"

Powerful intelligence for long-running agents and coding

  • "haijun-opus-4-7"

Powerful intelligence for long-running agents and coding

  • "haijun-opus-4-6"

Powerful intelligence for long-running agents and coding

  • "haijun-sonnet-4-6"

Best combination of speed and intelligence

  • "haijun-haiku-4-5"

Fastest model with near-frontier intelligence

  • "haijun-haiku-4-5-20251001"

Fastest model with near-frontier intelligence

  • "haijun-opus-4-5"

Powerful intelligence for long-running agents and coding

  • "haijun-opus-4-5-20251101"

Powerful intelligence for long-running agents and coding

  • "haijun-sonnet-4-5"

High-performance model for agents and coding

  • "haijun-sonnet-4-5-20250929"

High-performance model for agents and coding

  • "haijun-mythos-preview"

Deprecated: Will reach end-of-life on June 30, 2026. Please migrate to haijun-mythos-5. Visit https://raw.haijun.my.id/docs/ for more information.

New class of intelligence, strongest in coding and cybersecurity

  • role: "assistant"

Conversational role of the generated message.

This will always be "assistant".

default: assistant

  • stop_details: RefusalStopDetails or null

Structured information about why model output stopped.

This is null when the stop_reason has no additional detail to report.

  • type: "refusal"

default: refusal

  • category: "cyber" or "bio" or "frontier_llm" or 2 more or null

The policy category that triggered the refusal.

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

  • "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 Juglow'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 null

Human-readable explanation of the refusal.

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

  • stop_reason: StopReason or null

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
  • "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_start event and non-null otherwise.

  • "end_turn"
  • "max_tokens"
  • "stop_sequence"
  • "tool_use"
  • "pause_turn"
  • "refusal"
  • "model_context_window_exceeded"
  • stop_sequence: string or null

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.

  • usage: Usage

Billing and rate-limit usage.

Juglow'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 Haijun.

Total input tokens in a request is the summation of input_tokens, cache_creation_input_tokens, and cache_read_input_tokens.

  • cache_creation: CacheCreation or null

Breakdown of cached tokens by TTL

  • ephemeral_1h_input_tokens: number

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

default: 0, minimum: 0

  • ephemeral_5m_input_tokens: number

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

default: 0, minimum: 0

  • cache_creation_input_tokens: number or null

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

minimum: 0

  • cache_read_input_tokens: number or null

The number of input tokens read from the cache.

minimum: 0

  • inference_geo: string or null

The geographic region where inference was performed for this request.

  • input_tokens: number

The number of input tokens which were used.

minimum: 0

  • output_tokens: number

The number of output tokens which were used.

minimum: 0

  • output_tokens_details: OutputTokensDetails or null

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.

  • thinking_tokens: number

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.

default: 0, minimum: 0

  • server_tool_use: ServerToolUsage or null

The number of server tool requests.

  • web_fetch_requests: number

The number of web fetch tool requests.

default: 0, minimum: 0

  • web_search_requests: number

The number of web search tool requests.

default: 0, minimum: 0

  • service_tier: "standard" or "priority" or "batch" or null

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

  • "standard"
  • "priority"
  • "batch"
  • MessageBatchErroredResult object
  • type: "errored"

default: errored

  • error: ErrorResponse
  • type: "error"

default: error

  • error: ErrorObject
  • InvalidRequestError object
  • type: "invalid_request_error"

default: invalid_request_error

  • message: string

default: Invalid request

  • AuthenticationError object
  • type: "authentication_error"

default: authentication_error

  • message: string

default: Authentication error

  • BillingError object
  • type: "billing_error"

default: billing_error

  • message: string

default: Billing error

  • PermissionError object
  • type: "permission_error"

default: permission_error

  • message: string

default: Permission denied

  • NotFoundError object
  • type: "not_found_error"

default: not_found_error

  • message: string

default: Not found

  • RateLimitError object
  • type: "rate_limit_error"

default: rate_limit_error

  • message: string

default: Rate limited

  • GatewayTimeoutError object
  • type: "timeout_error"

default: timeout_error

  • message: string

default: Request timeout

  • APIErrorObject object
  • type: "api_error"

default: api_error

  • message: string

default: Internal server error

  • OverloadedError object
  • type: "overloaded_error"

default: overloaded_error

  • message: string

default: Overloaded

  • request_id: string or null
  • MessageBatchCanceledResult object
  • type: "canceled"

default: canceled

  • MessageBatchExpiredResult object
  • type: "expired"

default: expired

Example

bash
curl https://haijun.my.id/v1/messages/batches/$MESSAGE_BATCH_ID/results \
    -H 'juglow-version: 2023-06-01' \
    -H "X-Api-Key: $JUGLOW_API_KEY"
On this page
Path parametersHeadersReturnsExample