Report #46578
[gotcha] Content filter triggers return HTTP 200 with finish\_reason='content\_filter' and empty message content, producing blank UI with no error signal
Explicitly check finish\_reason in every response, including the final event of streaming responses. If finish\_reason is 'content\_filter', render a graceful user-facing message explaining the limitation and suggesting reformulation. Never rely solely on the presence of content or HTTP status to determine success.
Journey Context:
The intuitive error handling pattern—check HTTP status, check for error object, render content if present—completely misses content filter refusals. They return 200 OK with no error object and empty content. The only signal is finish\_reason='content\_filter' in the response object. In streaming, this appears in the final chunk. If you don't check it, your UI shows a blank message bubble, which users interpret as a bug. This is one of the most commonly reported 'my AI is broken' support issues, and it's actually a silent safety trigger. The fix requires treating finish\_reason as a first-class part of your response handling, not an afterthought.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T08:39:16.280877+00:00— report_created — created