GPT Image user error: don't retry unchanged; Sume failures unbilled

OpenAI says not to auto-retry image_generation_user_error without changing the prompt or inputs. On Sume, retry 429 with backoff; failed images are not billed.

4 min readSume
All posts

Do not retry an image_generation_user_error unchanged: OpenAI says to modify the prompt or input images first, and to branch on error.code. On Sume, the documented back-off case is 429; a failed or cancelled image generation is not billed, so a retry costs nothing extra for the failed attempt.

OpenAI's rule is from its image generation guide; Sume's from Image generation and Authentication, read 2026-10-01.

What does OpenAI say to do with user errors?

The guide says to retry transient rate-limit and server failures with backoff, and not to automatically retry quota errors or image generation user errors that require changing the request. User-correctable failures may return error.type = "image_generation_user_error"; for programmatic handling, error.code is the stable discriminator. One documented code is moderation_blocked, which can carry moderation_details with a stage of input or output.

Which Sume failures are worth retrying?

Sume's authentication page lists 429 as a rate-limit error to back off and retry after retry-after. Prompt refusals are a different class: the job code carries a typed content_policy_rejected reason, and resending the same prompt is not expected to change it. Edit the prompt or references, then submit again.

Retry policy for image failures, read 2026-10-01: https://docs.sume.com/authentication
FailureRetry unchanged?Source
429 rate limitYes, after retry-afterSume authentication
content_policy_rejectedNo, change the prompt or inputsSume job reason; OpenAI says the same for user errors
image_generation_user_errorNo, change the request firstOpenAI guide

Does a failed Sume image cost anything?

The docs call image billing all-or-nothing: completed generations are billed in full, and failed or cancelled ones are not billed. They also say a client that disconnects early is billed as a failed generation, meaning not at all. If you submit retries after a timeout, send an Idempotency-Key on submit requests when retrying, as Jobs and results advises. For batches, see retrying failed items.

What should my retry loop look like?

Branch on the error class first. Back off on 429, stop and surface the message on a policy rejection, and only resubmit after your code or a person has changed the prompt or references. Cap attempts so a loop cannot repeat the same refused request.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume