The Message Batches API is Anthropic's asynchronous processing endpoint: you submit many message requests at once, they run in the background, and you collect the results later. In exchange for giving up real-time responses, you get a 50% discount on both input and output tokens. On Claude Platform on AWS — the Anthropic-operated deployment that runs behind AWS authentication and billing — the Batch API is fully available, with the platform's typical same-day feature parity with the first-party Claude API. That matters because the other cloud routes differ: Anthropic's Message Batches API is not available on Amazon Bedrock or Google Vertex AI (each offers its own cloud-native batch inference mechanism instead — S3-based on Bedrock, BigQuery/GCS-based on Vertex), and it is not available at all on Microsoft Foundry.
The workflow: submit, poll, retrieve
Because Claude Platform on AWS exposes the Claude API surface directly, the batch workflow is exactly the first-party one. You create a batch of requests, each tagged with your own custom_id so you can match results back to inputs; you poll the batch until processing ends; then you download results. The AnthropicAWS client is used exactly like the first-party Anthropic() client:
from anthropic import AnthropicAWS
client = AnthropicAWS() # AWS_REGION + ANTHROPIC_AWS_WORKSPACE_ID set
batch = client.messages.batches.create(
requests=[{
"custom_id": "doc-0001",
"params": {
"model": "claude-haiku-4-5",
"max_tokens": 512,
"messages": [{"role": "user",
"content": "Summarize this filing: ..."}],
},
}],
)
print(batch.id) # poll this, then download results
Results are not returned in submission order, which is why the custom_id discipline matters. Batches roll up to the workspace you submitted them under, alongside usage, quotas, and cost. Batch results have a documented retention window of 29 days, so build retrieval into your pipeline rather than treating the batch store as an archive.
What it costs
Batch pricing is a straight 50% off list, and it stacks with prompt caching discounts. Per million tokens:
| Model | Batch input | Batch output |
|---|---|---|
| Claude Opus 4.8 | $2.50 | $12.50 |
| Claude Sonnet 5 (intro, through Aug 31, 2026) | $1.00 | $5.00 |
| Claude Sonnet 5 (from Sep 1, 2026) | $1.50 | $7.50 |
| Claude Haiku 4.5 | $0.50 | $2.50 |
One bonus for long-output workloads: on the Batch API, Opus 4.8, Opus 4.7, Opus 4.6, Sonnet 5, and Sonnet 4.6 support up to 300k output tokens with the output-300k-2026-03-24 beta header — beta headers pass through on Claude Platform on AWS the same way they do on the first-party API.
IAM: five actions govern batches
Every batch operation maps to an action in the aws-external-anthropic namespace: CreateBatchInference, GetBatchInference, ListBatchInferences, CancelBatchInference, and DeleteBatchInference. Two details are worth committing to memory. First, GetBatchInference covers both reading batch metadata and downloading results — there is no separate download action, so granting "status polling" also grants result access. Second, CreateInference (synchronous messages) and CreateBatchInference are separate actions: a policy that denies one does not deny the other, so to block all model calls you must deny both. Organizations with zero-data-retention sensitivities sometimes deny CreateBatchInference outright, because batches are inherently stateful — using them is a choice to step outside a ZDR arrangement for that data.
Operational notes
A few practicalities round out the picture. Polling is cheap but not free of discipline: poll on a sensible interval rather than hammering the status endpoint, and record batch IDs durably so an interrupted pipeline can resume retrieval. Batch requests support the inference_geo data-residency parameter per batch, so residency-constrained workloads are not excluded from the discount. Cost visibility comes through the workspace: usage and cost roll up per workspace on this platform, and billing flows through AWS Marketplace in Claude Consumption Units, metered hourly and invoiced monthly in arrears. Finally, remember that quotas on Claude Platform on AWS are managed by Anthropic, not AWS quota systems — new organizations start on the Start tier and do not move up automatically, so if a large batch program is coming, raise limits with Anthropic ahead of time rather than discovering the ceiling mid-run.
Where to go next
For the general mechanics and sizing guidance, see Batch processing with the Message Batches API and batch vs. real-time. If you are on Bedrock instead, Bedrock's batch alternatives covers the S3-based route.