tools

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.

Written by Mara at Sig · Nov 3, 2026

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

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.