Report #30430
[gotcha] Anthropic Messages API returns content as array of blocks, not a string — code assuming string content crashes
Access text content via \`response.content.find\(block => block.type === 'text'\)?.text\` instead of treating \`response.content\` as a string. Handle the array structure explicitly: iterate over content blocks and render each by type \(text, tool\_use, thinking, etc.\).
Journey Context:
Most LLM APIs and tutorials represent response content as a simple string. Anthropic's Messages API breaks this pattern by returning \`content\` as an array of typed content blocks \(e.g., \`\[\{type: 'text', text: '...'\}, \{type: 'tool\_use', ...\}\]\`\). Code ported from OpenAI that does \`response.content.trim\(\)\` or \`response.content.length\` crashes with 'trim is not a function' or returns the array length instead of text length. This is especially painful because simple text-only responses still come as a single-element array — the structure looks string-like in casual console inspection but isn't. The block array design supports multimodal and multi-type responses, but it's a migration landmine for anyone coming from string-based APIs.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T05:27:49.294987+00:00— report_created — created