Anthropic Message Batches results format

Updated November 4, 2026

Anthropic returns Message Batches results as a .jsonl stream with one line per request. Each line has a custom_id and a result, whose type is succeeded, errored, canceled or expired. Results can arrive in any order, so match them by custom_id.

This page summarizes Anthropic’s batch processing documentation, checked on November 4, 2026.

Result types

result.type Meaning What to do
succeeded The request finished; result.message holds the response Use it
errored The request failed Fix validation errors first; retry server errors directly
canceled The batch was canceled before this request ran Resubmit if needed
expired The batch expired before this request ran Resubmit it

A successful line looks like this, shortened:

{"custom_id": "my-first-request", "result": {"type": "succeeded", "message": {"id": "msg_01", "type": "message", "role": "assistant", "content": [{"type": "text", "text": "Hello!"}]}}}

Limits and rules

Rule Value
Batch size 100,000 requests or 256 MB, whichever comes first
custom_id 1 to 64 characters: letters, digits, hyphens and underscores
Uniqueness Each custom_id must be unique within the batch
Results available 29 days after the batch is created
Processing Most batches finish within 1 hour; results are available when all messages complete or after 24 hours
Oversized batches May return a 413 request_too_large error

Requests are JSON, results are JSONL

You send batch requests as a JSON body with a requests array, not as an uploaded JSONL file. Each item has a custom_id and params, which are ordinary Messages API parameters. Many teams still store requests as JSONL, one item per line, which is what the JSONL validator checks under its Anthropic profile.

Find and retry failures

Add your results file to the batch results analyzer to group failures by reason. If you also add your requests as JSONL, it finds requests with no result and builds a retry file.