Plugin API — clearer, safer error details on failed jobs

Failed jobs now report a specific error code, a translated message and a link to the matching documentation page, on both the job endpoint and the webhook.

When a job fails, the Plugin API now tells you what went wrong in a form you can act on. GET /jobs/{id} and the outgoing webhook both return the same error object, and both were improved in the same way.

What changed

  • code is now specific to the cause. A rejected prompt reports content_policy_violation, a missing source file reports source_asset_unavailable, a provider rate limit reports rate_limit_exceeded. Every value is one already listed in the published enum, so existing handling keeps working.
  • Failures that happened while a job was running additionally carry category — the underlying failure class the code is derived from.
  • message_i18n is always available in both English and Polish, and doc_url always links to the documentation page for that code.
  • retryable now reflects whether the job will be retried, so a value of false means resubmitting the same request cannot help.

What to check in your integration

message_i18n.en previously repeated the raw message our image provider returned. It now contains our own wording, written for a person to read. If you were storing, matching on or parsing that text, switch to code — it is the documented field to branch on, and it is stable. Raw provider text is no longer sent outside our systems.

Failures recorded before this change do not have a category; they continue to report generation_failed.

The full list of codes, and the table showing which category produces which code, is in the Plugin API error reference.