Every video model runs its own content review. When a job comes back rejected, the question you actually care about is: did that cost me anything?
On most platforms you find out by watching your balance. Here is our rule, and the measurements it is built on.
Rejections happen in two completely different places
We run about two dozen video models. When we started logging what upstreams return on a rejected job, they split cleanly into two architectures.
| Input-side review | Output-side review | |
|---|---|---|
| When it rejects | before the model runs | after the model has produced the clip |
| Time to failure | ~6.5 seconds | 17–18 seconds |
| What the upstream reports | executionTime: 0, no charge | executionTime: 0, but a price |
| Who eats the cost | nobody | the platform — unless that model carries the panel notice, in which case it is passed to you |
Two things are worth pausing on.
First, executionTime: 0 appears on both. It is not a reliable signal for anything — an upstream can report zero execution time and still bill you, because the billing and the timer are measuring different things.
Second, the wall-clock time is the real tell. A rejection that comes back in about six seconds never reached the model. A rejection that takes seventeen means the clip was generated, then reviewed, then thrown away — and somebody paid for those seventeen seconds of compute.
MiniMax H3 is an input-side model: it rejects with an error naming the input, in roughly six and a half seconds, and reports no charge. Grok Imagine 1.5 is an output-side model: it fails at seventeen to eighteen seconds and returns a price anyway.
Our rule is "were we actually billed", not "which model"
This is the part that matters, because it is the part most platforms get wrong in the direction that costs you money.
We never decide refunds by reading the error text — that is a guess. A rejection is non-refundable only when both of these are true: the model carries the panel notice, and the upstream actually charged us for this failed job. Miss either one and you are refunded.
- Upstream reports a charge → that attempt is not refunded, and you were told before you pressed generate.
- Upstream reports no charge → refunded in full.
- We cannot parse the response, the field is missing, the type is wrong, or it turns out not to be that kind of failure → refunded.
That last line is the one we care most about. When we are unsure, the money goes back to you. We would rather absorb a cost that was ours to absorb than keep credits we cannot prove we spent. There is a test in our codebase whose entire job is to assert that a failure which looks like a policy rejection but isn't still gets refunded.
Right now, one video model out of about twenty is non-refundable
Only Grok Imagine 1.5 sits on that list, because it is the one where the upstream bills us for rejected work.
And it is not a footnote in the terms of service. If you select that model, a notice appears at the bottom of the generation panel, in both English and Chinese, before you spend anything. The panel notice and the refund gate call the same function on the same list, so they cannot drift apart; a check in our test suite additionally pins that list to a single model.
That constraint exists for a specific reason. Other models on the platform would also return a price on failure. It would have been easy to skip refunds for all of them. But those models have no notice on their panel, and taking credits from someone who was never told is not a policy — it is just taking their credits.
Every other video model in the canvas refunds a content rejection in full.
What this means when you are working
- A job that fails in about six seconds was stopped at the door. Your credits are already on their way back.
- A job that fails after roughly twenty seconds was generated and then rejected. On every canvas video model but one, you are still refunded.
- If a model can charge you for a rejection, the panel says so before you generate. In the canvas, no notice means you get refunded.
- You never need to check your balance to find out which happened.
We would rather publish the rule than have you discover it.