Claude's Messages API can now hold a conversation server-side, so agents send only the new turn
Message threads is in public beta on every Claude model. Anthropic says median time to first token drops about 35% on 500K to 1M token requests in Claude Code, where it's already on for most users. Prices and rate limits don't change.
Anthropic opened a public beta of message threads in the Messages API. Today every turn of an agent loop uploads the whole conversation again, and the API validates and tokenizes all of it again. With a thread, you send the full conversation once (with system and tools) and add "thread": {"type": "create"}. On each later turn you send only the new messages plus "thread": {"type": "continue", "previous_message_id": "msg_..."}, and you leave system and tools out.
Anthropic's own number comes from Claude Code, where threads are on by default for most users: on requests between 500K and 1M tokens, median time to first token fell about 35%. Token usage stays the same, because Claude still reads the full conversation every turn. Only the upload shrinks.
The rules are strict. Every request needs the beta header message-threads-2026-08-12. A thread expires 5 minutes after its last request and is deleted within an hour of its last use. Threads are append-only, each response id can be continued once, and fields like model, thinking and tool_choice have to match the create request or you get a 400 with thread_fingerprint_mismatch. When a continue call returns a 404 (thread_not_found), you replay the full conversation in a new create request, so your app still keeps its own copy. The SDK helper, client.beta.messages.thread(...), does that replay for you.
Threads don't work with Message Batches, token counting or on-demand compaction, and zero data retention doesn't cover them. You can use them on the Claude API, Claude Platform on AWS, Claude on Google Cloud (Anthropic managed) and Microsoft Foundry.
Why it matters for builders
If your agent's context grows into the hundreds of thousands of tokens, most of the wait before each reply is your own upload. Threads cut that without touching your bill, but you have to build the replay path from day one.
Try this
In the Python SDK, wrap one long agent loop in client.beta.messages.thread(model=..., max_tokens=..., cache_control={"type": "ephemeral"}, system=...) and call thread.send() each turn. Log time to first token for a week next to your current loop before you move the rest.
Sources
Get stories like this every Monday
One tested AI workflow with the prompts, plus 3 news items that matter if you build. Free.
More AI news
- Trajectory raises $45M led by Sequoia to keep retraining open models on feedback from your app
- NorthCUA puts three open computer-use models on Hugging Face under Apache 2.0, from 9B to 397B
- Meituan releases LongCat-2.5, a 1.6T-parameter agent model trained on Chinese chips, API only for now
- Claude Code 2.1.317 lets a failing Agent SDK hook block the action, and asks before your email leaves the machine