AnthropicClaude Certified Architect – Foundations2026-104.5 Design efficient batch processing strategies
Know what the batch discount cannot buy
Completed by the knowledge check
Learning objective
Explain the 50% batch discount, 24-hour expiration window, lack of a completion-time SLA, and absence of mid-request tool execution in a batch.
Core idea
Message Batches trades immediate response delivery for lower-priced asynchronous processing. Anthropic documents batch usage at 50% of standard API prices. That discount does not buy a promised completion time: a batch can reach its 24-hour expiration with requests still unprocessed.
The execution boundary also matters. Your application cannot answer a client-tool call in the middle of an outstanding batch entry. Anthropic-executed server tools can run inside that entry. Treating all tool use as unsupported would exclude documented batch capabilities; treating all tool use as a self-contained agent would hide work your application still has to perform.
See 4.5.1 for selecting workloads and 4.5.3 for turning these constraints into a delivery plan. Here, the decision is whether the proposed savings assume a capability or guarantee the batch contract does not provide.
How it works
Interpret the discount at the request level
The batch-processing documentation states that usage is charged at half the standard API price, including input and output tokens. If eligible standard token usage would cost 100 cost units, the corresponding batch usage costs 50. This is a pricing comparison, not a claim that a complete business workflow always costs half as much. Prompt-caching discounts can stack with the batch discount, but cache hits in batches are best-effort; shared prefixes marked with cache_control do not guarantee a hit.
A successful but unusable answer can require another generation. That additional request consumes additional usage even if the first request had result.type: "succeeded". The batch result describes execution success; it does not certify that the response satisfies your review or extraction criteria. Prompt refinement and sample evaluation reduce that avoidable work; see 4.5.5.
The documentation separately states that errored, canceled, and expired entries are not billed. Keep that distinction when estimating recovery. Resubmitting an unprocessed expired entry differs from regenerating an answer that already succeeded. Replaying an entire batch after a few failures repeats successful work unnecessarily; see 4.5.4.
Read 24 hours as expiration
A batch exposes created_at and expires_at. Processing may end before expiration, but remaining work can expire if the batch does not finish within 24 hours. An entry with result.type: "expired" did not reach the model before the expiration boundary.
That is different from a completion-time service-level agreement (SLA). Anthropic reports that most batches complete within one hour, but that is a typical observation, not a completion promise: a batch can still expire at 24 hours with work unprocessed. Do not turn typical processing time into a promise that every entry produces a message within a day.
The batch’s processing_status: "ended" says the batch has reached its terminal processing state. It does not mean every entry succeeded. Inspect request_counts and the individual results to distinguish successful, errored, canceled, and expired entries. A report can therefore have a finished batch and still lack required findings.
Polling only observes these states. It cannot reserve an earlier processing slot or convert expired work into successful output. A deadline-sensitive workflow needs a delivery policy that handles missing results, not merely a faster status-check loop.
Distinguish client tools from server tools
Client tools run in your application. Claude returns tool_use content and stop_reason: "tool_use"; your code executes the requested operation and supplies a tool_result in a subsequent request. A batch entry does not keep an interactive connection open for that application-controlled round trip.
You can retrieve the entry’s message, execute the client tool, and submit a follow-up message request containing its result. That follow-up is a separate request, either synchronous or batched. It is not execution injected into the original batch entry. The orchestration must account for another processing stage before it has a final answer.
Server tools run on Anthropic’s infrastructure. The batch documentation explicitly supports all server tools and describes a server-side agentic loop. Their execution does not require your application to send client tool_result blocks during the entry. This is why “batch requests cannot use tools” is too broad.
A server-tool turn can still return stop_reason: "pause_turn". The documented continuation is to append the paused assistant content to messages and submit a follow-up request. Even server-side execution does not justify assuming that every returned message finishes the business task. Inspect the message’s stop reason as well as the batch result type.
A client tool’s result travels in a separate request, while a server tool’s loop runs inside the batch entry.
Key distinctions and trade-offs
The contract separates four questions:
| Question | Documented boundary | Consequence |
|---|---|---|
| What does usage cost? | 50% of standard API prices | Compare equivalent usage, then include reruns |
| How long can work remain pending? | 24-hour expiration window | Some entries can expire without a message |
| Is an earlier finish guaranteed? | No completion guarantee follows from typical timing | Plan recovery for delivery targets |
| Who executes a tool? | Application for client tools; Anthropic for server tools | Client round trips require another request |
Supplying existing multi-turn conversation history in params.messages is also different from executing an interactive client-tool exchange inside one batch request. Batches support conversation inputs. That support means the history is accepted as input, not that the batch invites your application into the middle of execution.
The economic advantage is strongest when each entry can produce useful output from its supplied context and supported server-side work. Every necessary follow-up adds another stage whose timing and cost belong in the workflow estimate.
Architecture / decision scenario
A weekly research service proposes batching document analyses. Its estimate assumes half-price token usage, publication exactly 24 hours after submission, and a private client tool that retrieves missing source documents during analysis.
Accept the pricing basis for equivalent usage, but revise the delivery assumption. Record expires_at, inspect terminal results, and allocate recovery as described in 4.5.3. A batch that ends with expired entries has not delivered every analysis.
For the private retrieval tool, fetch the required documents before submission or orchestrate a separate follow-up after receiving tool_use. Do not expect the original entry to pause for your application’s response. If the design instead uses an Anthropic server tool, the batch can execute its supported server-side loop. The consumer must still recognize pause_turn and continue when necessary.
Finally, include quality reruns in the estimate. Half-price generation remains useful, but neither the discount nor a succeeded entry proves that the report is complete and fit to publish.
Common exam traps
- Treating 24 hours as guaranteed successful completion.
- Treating
endedas evidence that every request succeeded. - Pricing a workflow as exactly half-cost while ignoring repeated successful generations.
- Assuming that providing
toolsmakes application code execute inside a batch entry. - Rejecting server tools because client-tool round trips need separate requests.
- Confusing supplied conversation history with live interaction during processing.
Where the exam guide differs
The guide says the batch API “does not support multi-turn tool calling within a single request.” Read this as the application-controlled client-tool round trip. Product documentation supports server tools and their server-side loop in batch requests. For an exam item about executing your code and returning tool results mid-request, the limitation applies; it does not imply that all server-tool execution is unavailable.
What to remember
Batch usage receives a 50% discount, while the 24-hour window ends in expiration for unprocessed entries rather than guaranteed answers. Separate the batch state, each entry’s result, and the message’s stop reason. Client tools require application-controlled follow-up requests; server tools can execute within the batch’s server-side loop.
Knowledge check
A cost estimate for a weekly research batch makes four assumptions. Which one does the Message Batches contract support?
cache_control prefixes provide a cache hit for each entryexpired without a message; cache hits in a batch are best-effort, so a shared cache_control prefix may still miss; and a client tool needs your application to run it and send the result in a separate request.A deferred research analysis can tolerate delayed results and needs current web information. It must use Message Batches if the required tool is supported. A reviewer argues that the analysis must move to synchronous Messages because “batch requests cannot use tools”. What is the better response?
pause_turnpause_turn , which the consumer continues with a follow-up request.A batch reaches processing_status: "ended", and the report job immediately marks all 2,000 analyses as delivered. What is wrong with this step?
custom_id checks, which determine whether each request produced a messageended is the batch’s terminal processing state and the signal that results are ready, not evidence that each entry succeeded. The individual results, and request_counts in aggregate, show which entries succeeded and which errored, were canceled or expired. Results become available when processing ends or after 24 hours, whichever comes first.A batch run ended with 50 expired entries and 30 succeeded entries whose answers failed the team’s review. The team re-runs both groups. How does recovery affect the bill?
errored , canceled or expired are not billed, so resubmitting expired work pays only for its new processing. A succeeded entry produced a message and was billed even if the answer is unusable, so regenerating it adds usage. That is why a workflow is not exactly half-cost once quality reruns are counted.References
- Anthropic, Batch processing
- Anthropic, Tool use overview
- Anthropic, Server tools
- Anthropic, Claude Certified Architect – Foundations Exam Guide