No charge for failed generations
Makernice does not charge for failed AI video or image generations. Creating a generation holds the quoted price from your prepaid balance. The hold is converted to a charge when the run completes. If a run fails or times out, the hold is released in full. Input-moderation rejections before generation and queued cancellations also release the hold in full. The one exception: if a finished output is blocked by output moderation for a policy violation, the run is still charged; you can contact support for a manual review.
Applies to all 16 models on one API key. Source: Refund Policy §2 · API docs: Pricing & billing. Last checked: October 21, 2026.
Prices as of October 22, 2026 (price list v5).
How it works: quote → hold → charge or release
- Quote.
POST /v1/generations/quotereturns the exact amount for your model, mode, resolution and duration (video is priced per second, images per image). The price is locked for 12 minutes (expires_at). Quoting is free and holds nothing. - Hold.
POST /v1/generationswith thequote_idputs that amount on hold; only now is any balance held, and it is settled when the generation reaches a final state. The generation starts withstatus: "queued"andbilling: "held". The money stays in your balance; it is only reserved. - Charge on completion. When the generation reaches
succeeded, the held amount is charged (billing: "charged"); once the output passes moderation, the file is ready to download. - Release on failure. If it ends as
failedorcanceled, the hold is released in full (billing: "released"). There is nothing to claim and nothing to request: it happens automatically.
| Final status | billing | What happens to your money |
|---|---|---|
queued / generating / moderating | held | Reserved, not charged |
succeeded | charged | The quoted amount is charged when the run succeeds |
failed | released | The full hold returns to your balance |
canceled (only possible while queued) | released | The full hold returns to your balance |
succeeded, output state: "blocked" (finished output failed output moderation) | charged | Charged; no file URL. Contact support@makernice.com for a manual review |
checking | held | Stays held while we confirm the result; charged only if the generation is confirmed to have succeeded |
A released hold is not a refund. The money never left your balance, so there is no refund request, no waiting period and no payment-provider round trip.
What counts as a failed generation?
From our Refund Policy (§2) and the API docs:
| What happened | Charged? | What you see in the API |
|---|---|---|
| The model provider reports that the generation failed | No, hold released | status: "failed", error.code e.g. generation_failed or upstream_unavailable |
| The task runs past its maximum run time | No, hold released | status: "failed", error.code: "timeout" |
| An internal error on our side stops the task | No, hold released | status: "failed" |
| Input moderation rejects the prompt or an input image before generation | No, hold released (or nothing held) | error.code: "content_rejected", error.reason = prompt, input_image or model |
| An input image can't be used (not reachable, too large, wrong format) | No, hold released | error.code: "invalid_request", error.input names the image |
You cancel while the generation is still queued | No, hold released | status: "canceled" |
| The request is rejected before a task exists (bad key, invalid body, missing fields, insufficient balance, rate limit, quote mismatch) | No, nothing is ever held | HTTP 4xx, e.g. 401 invalid_api_key, 400 invalid_request, 402 insufficient_balance, 429 rate_limited |
| The outcome is unclear (for example, the provider doesn't respond) | Only if confirmed successful | status: "checking", billing: "held" |
| The output is generated but blocked by output moderation | Yes, charged (refunds only after a manual review by support) | billing: "charged", output state: "blocked", empty file URL |
| The generation succeeds but you don't like the result | Yes | status: "succeeded", billing: "charged" |
Quality is not a failure condition: a delivered video or image is charged, whatever you think of it. That's why every model page shows the cost of a short, low-resolution test run first.
Examples (price list v5, October 22, 2026)
Amounts in the API are strings in micro-USD (1,000,000 = $1.00).
1 · A 10-second Seedance 2.5 clip at 720p that times out
- Quote: $0.2592/s × 10 s = $2.59 →
"amount": "2592000" - Create →
billing: "held". Your available balance shows $2.59 less while it runs. - The task runs past its maximum time →
status: "failed",error.code: "timeout",billing: "released". - Net cost: $0.00. The
/eventstimeline ends withfailed_refunded.
{
"id": "gen_…",
"model": "seedance-2.5",
"status": "failed",
"amount": "2592000",
"billing": "released",
"outputs": [],
"error": { "code": "timeout", "message": "…" }
}2 · A 5-second Kling 3.0 Pro clip that succeeds
- Quote: $0.1612/s × 5 s = $0.81 →
"amount": "806400". - Create → held →
succeeded→billing: "charged". Net cost: $0.81, exactly the quoted amount, even if prices changed while it ran.
3 · A 5-second MiniMax H3 Max Turbo draft at 480p you no longer need
- Quote: $0.03/s × 5 s = $0.15. You cancel while it is still
queued→POST /v1/generations/{id}/cancel→status: "canceled",billing: "released". Net cost: $0.00. - If it had already started (
generating), cancel returns409 not_cancelableand the run continues to its normal outcome.
4 · A prompt blocked by moderation
- If the prompt is blocked when you submit it, you get
422 content_rejectedand nothing is held. If the provider's safety policy rejects it later, the generation endsfailedwitherror.code: "content_rejected"and the hold is released. Either way: $0.00. - If the video is generated but the finished output is blocked by output moderation, the run is charged (
billing: "charged", outputstate: "blocked", no file URL). Email support@makernice.com to request a review.
Handle it in code (Python)
import time, requests
def wait_for(gen_id, headers, api="https://api.makernice.com/v1"):
while True:
gen = requests.get(f"{api}/generations/{gen_id}", headers=headers).json()
if gen["status"] == "succeeded":
return gen # billing == "charged"
if gen["status"] in ("failed", "canceled"):
# billing == "released": the full hold is already back in your balance
raise RuntimeError(f"{gen['status']}: {gen.get('error')}")
time.sleep(5) # queued / generating / moderating / checkingPrefer webhooks? generation.failed and generation.canceled are sent after the held amount was released; generation.succeeded after it was charged. See Webhooks.
Two more safeguards that protect your balance
- No double charges on retries.
POST /v1/generationsrequires anIdempotency-Key. Repeating the request with the same key, quote and input returns the original generation and does not charge again. (Idempotency) - Per-key spend limits. Each API key can have a spend limit and an expiry date. A request that would push a key over its limit is rejected with
402 key_spend_limit_reachedbefore anything is held. Failed and canceled generations don't count toward a key's spend. (Authentication)
What to check with any AI video API before you build
Questions to ask any AI video API before you build on it:
- Is a failed or timed-out run charged, partly charged, or free?
- Is money charged at submit time or when the run completes?
- Does a content-moderation rejection cost anything, before and after generation?
- Can you cancel a queued job, and is the money returned?
- Is the price locked before you run, or calculated afterwards?
- Are retries idempotent, so a network error can't charge you twice?
On Makernice the answers are: free · when the run completes · not before generation (a blocked finished output is charged) · yes, in full · locked by a quote for 12 minutes · yes.
Frequently asked questions
Does Makernice charge for failed AI video generations?
No. Makernice holds the quoted amount when you create a generation. The hold is converted to a charge when the run completes. If a run fails or times out, the hold is released in full. Input-moderation rejections before generation also release the hold. The one exception: if a finished output is blocked by output moderation for a policy violation, the run is still charged; you can contact support for a manual review. This applies to all 16 video and image models.
What counts as a failed generation?
A generation is treated as failed when the model provider reports a failure, the task exceeds its maximum run time, an internal error stops it, input moderation rejects the prompt or an input image before generation, or an input image can't be used. In every case the hold is released in full.
How fast does a released hold come back to my balance?
Released holds are typically reflected in your balance as soon as the task ends. Because the money was only held, not charged, there is no refund request to file and no payment-provider delay.
Do I pay if I don't like the result?
Yes. A generation that succeeds is charged the quoted amount, whatever the quality, style or relevance of the output. To limit that risk, test a short clip at a low resolution first and use the quote to see the exact price before you run.
Can I cancel a generation and get my money back?
Yes, while it is still queued: cancel it with POST /v1/generations/{id}/cancel and the hold is released in full. Once a generation is generating it can't be stopped, and cancel returns 409 not_cancelable.
What happens if the model provider doesn't respond?
The generation shows the status checking and the amount stays held while we confirm the result. You are charged only if the generation is confirmed to have succeeded; otherwise the hold is released.
Can a retry charge me twice?
No. Creating a generation requires an Idempotency-Key header. Repeating the request with the same key, quote and input returns the original generation and does not charge again.
Is unused balance refundable?
Unused balance is, in principle, not refundable, but it never expires. Duplicate or mistaken top-ups can be reviewed: email support@makernice.com (English or Chinese). Failed generations never need a refund, because they are never charged.
What if my output is blocked by moderation?
If input moderation rejects your prompt or image before generation, the generation fails and you are not charged. If the video is generated and the finished output is then blocked by output moderation, the run is charged and no file is delivered. Email support@makernice.com and we will review it.
Related
- Pricing — live unit prices, top up from $15 (to $1,000), no subscription
- How AI video API pricing works — price = unit price × seconds, quote locks for 12 minutes
- API docs: Pricing & billing · Check status · Cancel · Idempotency
- Video API best practices: idempotency, 429s and polling
- Refund Policy
- All 16 models
Pay for pixels, not failures.
Prepaid in US dollars by card (including Apple Pay and Google Pay) or crypto. Each top-up is $15 to $1,000 and your balance never expires.