GPT Image moderation_blocked vs Sume content_policy_rejected

OpenAI returns moderation_blocked with moderation_details. On Sume, policy refusals are grouped under content_policy_rejected. What to read and when to retry.

4 min readSume
All posts

When OpenAI blocks a GPT Image request it returns error.code = "moderation_blocked", sometimes with error.moderation_details. Do not retry unchanged: edit the prompt or input images. On Sume, the matching refusal is grouped under the public reason content_policy_rejected, and the same advice applies.

The OpenAI side is from its image generation guide; Sume's from Image generation and the OpenAPI schema, read 2026-10-01.

What does OpenAI's error contain?

The guide shows error.type of image_generation_user_error, error.code of moderation_blocked, and an optional moderation_details object with a moderation_stage and coarse categories such as harassment. The stage is input when the prompt or request inputs were blocked, output when a generated image was, and unknown as a rare fallback. OpenAI says this gives coarse debugging context without internal classifier labels or scores, and recommends a generic end-user message.

What does Sume return?

Sume's OpenAPI describes a public_reason field as machine-friendly and groupable, with examples generation_rejected, image_content_rejected and content_policy_rejected. The job error carries content_policy_rejected when a provider rejection is classified as a content-policy refusal. I found no Sume field that mirrors moderation_stage or categories, so do not expect the input-versus-output split.

How do the two compare?

Moderation error handling, from the OpenAI guide and Sume docs read 2026-10-01.
QuestionOpenAI directSume
Stable discriminatorerror.code = moderation_blockedpublic_reason = content_policy_rejected
Stage and categoriesOptional moderation_detailsNot documented
Retry unchangedNo; change prompt or inputsNo; fix the input (next_action is a schema enum)
Billing on failureSee OpenAI pricingFailed or cancelled generations are not billed

What should my code do?

Branch on the public reason, not on message text. Show the user a generic message, log the request id and reason for support, and ask for a changed prompt or image before resubmitting. Sume's image docs state that failed generations are not billed, so a refused request does not leave a charge. The moderation setting itself is covered in GPT Image 2.5 moderation on Sume.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume