Why Your AI Video Generation Failed: Reading the Rejection
Content-policy rejections, silent no-ops, timeouts and bad-input errors all look like 'it didn't work'. How to tell them apart, which ones you were billed for, and what to change.
Failures in this category are unusually opaque: a generic message, sometimes a charge, rarely an explanation. But they fall into four groups, and each has a different response.
1. Content-policy rejection
The request is refused before generation. Usually a generic "content policy" message with no specifics.
The most common cause by a wide margin is a real human face fed to a model that refuses them. Seedance and Veo both reject real likenesses, and — this is the part that costs people days — the filter lives in the model vendor's inference layer, not in the API wrapper. Switching to a different reseller of the same model reproduces the rejection exactly. We tested this across multiple hosts and endpoints, including the image endpoints, and got the same result everywhere.
The fix is not a workaround, it is a different model. HappyHorse, Kling, Wan and MiniMax all accept real faces, with the caveat that Kling still enforces public-figure likeness restrictions.
Billing: platform-level rejections that fire before generation are typically non-billable, and on fal, failed motion-control jobs are auto-refunded.
2. The silent no-op
The worst category, because nothing fails. The job succeeds, you are billed, and the output ignores the thing you configured.
The canonical example: Kling 3.0 Motion Control with character_orientation set to image. In that mode the elements entry that binds your face does nothing at all. No warning, no error, full charge, drifting identity. Set it to video.
The general lesson is that a parameter can be accepted and ignored. When output ignores an input you supplied, check whether that input is conditional on another setting before assuming the model is bad.
3. Bad input
Rejections that are actually about the file. Duration outside the accepted window is the usual one — Wan 2.7 edit-video takes 2–10 second inputs; Kling motion control wants a 3–30 second reference. Others: unsupported aspect ratio, resolution above the endpoint's ceiling, a corrupt or partial download.
These are cheap to fix and cheap to avoid: probe the file's duration and dimensions before submitting.
4. Timeout and queue failures
The job is accepted and never returns, or returns after your own timeout. Usually transient. The thing worth knowing is which endpoints bill by compute second rather than output second — those charge for GPU time, so a slow queue costs more for identical output, and you cannot know the price in advance. We keep them out of production paths for that reason.
A diagnostic order
- Does the input contain a real human face, and does this model accept those? Most rejections stop here.
- Is the input duration inside the endpoint's window?
- Did the job succeed but ignore a parameter? Check that parameter's preconditions.
- Was anything actually billed? Check before re-running — a refunded failure and a billed one call for different levels of caution.
- Only then, re-run.
What not to do
Re-submitting an identical request after a policy rejection. Policy is deterministic; the second attempt fails the same way. And bypasses circulated publicly have an observed lifetime of about a month — every image-layer trick we tested was patched within weeks, and the ones that worked degraded output enough to be useless anyway.