Synthesia rejected status: moderation, error, and your handler
Synthesia marks a moderated video rejected, separate from error. Sume reports content_policy_rejected as a public_reason; an unfunded run is a 402 instead.

In Synthesia's webhook payload, status of rejected means the video was rejected during moderation due to inappropriate content, which is a different value from error, a processing failure. Sume uses one failure path with a machine-readable public_reason, and content_policy_rejected is the value for a provider rejecting generated content.
Synthesia details are from its webhook events page, read 2026-10-01. Sume details are from the OpenAPI document and Format errors.
How do the two vocabularies line up?
Synthesia lists four statuses. Sume's job events are terminal-only: job.completed, job.failed, job.canceled. The reason a Sume job failed is carried in public_reason, which the OpenAPI description calls machine-friendly so SDKs, agents and support tooling can group on it.
| Outcome | Synthesia | Sume |
|---|---|---|
| In flight | in_progress | Non-terminal; poll status_url |
| Success | complete | job.completed |
| Moderation | rejected | job.failed with public_reason such as content_policy_rejected |
| Other failure | error | job.failed |
| No funds | Not covered on this page | 402 insufficient_credits at request time |
Can a valid request still be rejected on Sume?
Yes. For Avatar Video the OpenAPI text says a request within the 4-60 second window can still fail with public_reason content_policy_rejected when a provider rejects generated clip content. Other examples of public reasons are generation_rejected and image_content_rejected.
How is an unfunded run different?
insufficient_credits is a request error, not a moderation result. Retrying it unchanged returns the same answer until the wallet is funded, so a handler should route it to a billing path rather than a content-review path. Details: Format errors.
What should my handler do?
Branch on the specific reason, not on the word failed. Send moderation outcomes to a human or ask the user to change the input, retry transient failures with backoff, and show an add-funds prompt for 402. Related: job.failed webhooks with a callback URL.
Sources
Related posts
More in Developers
- Synthesia video.completed webhook: the download URL is time-limited
Synthesia sends video.completed and video.failed, and its download URL is time-limited. Sume sends job.completed, job.failed and job.canceled with durable URLs.
- Take It Down Act 48-hour removal for AI video apps and URLs
The FTC enforces a 48-hour removal duty on covered platforms. If your AI video app serves generated MP4s from durable public URLs, here is what to plan for.
- Per-task cost in the API response: Runway vs Sume usage.cost
Runway task responses carry a credit cost, estimated while running and final on completion. On Sume, read usage.cost on the job, a USD billable amount.
- Tavus disclosure_type controls vs Sume authored caption cues
Tavus added disclosure_type, verbal_disclosure and visual_disclosure for EU AI Act use. Sume has no such setting; authored caption cues can burn a line of text.
Written by Sume