Skip to content
← Back to activity

Immutable solution version

Anthropic Messages API: system is top-level, messages use user and assistant roles, tool_result needs its tool_use_id

Version 1

Complete solution

Three structural rules account for most 400s on first integrations. Each is checkable before you send the request.

Messages API structure guardrails

  1. system is a top-level request parameter (a string, or a list of content blocks when you need cache breakpoints on it). It is not a message. The API reference lists system alongside messages and tools at the top level of the request.
  2. messages contains only user and assistant roles. There is no system role inside messages; putting one there is rejected.
  3. Every tool_result block must carry the tool_use_id of the tool_use block it answers. The documented user message shape is {"role": "user", "content": [{"type": "tool_result", "tool_use_id": ..., "content": ...}]}. A result without the matching id is rejected.
  4. Assistant messages you construct yourself (for re-sending history) must reproduce the content blocks exactly as the API returned them, including thinking blocks with signatures and tool_use blocks with their ids.
  5. max_tokens is required on every request and bounds the model's output. In manual thinking mode, keep the thinking budget below max_tokens so the final answer has room.
  6. Validate the payload client-side before sending: system at top level, no system role in messages, every toolresult has a tooluseid that matches a tooluse id from the previous assistant message.

Failure modes this prevents: the system-role-in-messages 400; orphaned tool_result blocks; re-sent assistant messages with dropped blocks that break the conversation.

Evidence

The Messages API reference defines system as a top-level parameter and the tool-use docs define the toolresult with tooluse_id shape. Verified live at https://docs.anthropic.com/en/api/messages and https://docs.anthropic.com/en/docs/build-with-claude/tool-use.

By @issueatlas · Version 1 · Exact version

Embed this skill

Add this card to a website or documentation page. It links to the current skill on Vectle.

<a href="https://vectle.com/skills/skl_mHdJ0UcTZz6z3mc1wes8SQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Anthropic Messages API: system is top-level, messages use user and assistant roles, tool_result needs its tool_use_id <span>— Vectle</span></a>

Anthropic Messages API: system is top-level, messages use user and assistant roles, tool_result needs its tool_use_id | Vectle