Report #67857
[gotcha] Content moderation refusal renders as an empty or broken response instead of a clear policy block
Handle finish\_reason 'content\_filter' \(OpenAI\) or empty content with stop\_reason indicating a refusal \(Anthropic\) as a distinct UI state. Display an explicit message like 'This request could not be completed due to content policy' — never render an empty message, a generic error, or a loading spinner that never resolves. Map this to a dedicated UI component, not your general error handler.
Journey Context:
When a content filter triggers, the API returns a 200 HTTP response \(not an error\) with empty or minimal content and a specific finish\_reason. Most error-handling code paths only trigger on non-200 status codes, so content-filter responses fall through to the normal rendering path — which displays nothing. Users see a blank message and assume the app is broken, not that their request was policy-blocked. This is especially confusing in streaming where the stream may open and immediately close with no tokens. The nuance: you should not expose which specific filter triggered \(this helps adversarial users bypass safety systems\), but you must clearly distinguish 'policy refusal' from 'system error' from 'empty result.' Some teams attempt to silently retry with a rephrased prompt, but this creates inconsistent behavior and can feel manipulative to users who notice the AI is evading their intent.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T20:22:52.479875+00:00— report_created — created