Makernice

No charge for failed generations

How Makernice holds, charges and releases money for every AI video and image generation.

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

  1. Quote. POST /v1/generations/quote returns 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.
  2. Hold. POST /v1/generations with the quote_id puts that amount on hold; only now is any balance held, and it is settled when the generation reaches a final state. The generation starts with status: "queued" and billing: "held". The money stays in your balance; it is only reserved.
  3. 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.
  4. Release on failure. If it ends as failed or canceled, the hold is released in full (billing: "released"). There is nothing to claim and nothing to request: it happens automatically.
Final status
Final statusbillingWhat happens to your money
queued / generating / moderatingheldReserved, not charged
succeededchargedThe quoted amount is charged when the run succeeds
failedreleasedThe full hold returns to your balance
canceled (only possible while queued)releasedThe full hold returns to your balance
succeeded, output state: "blocked" (finished output failed output moderation)chargedCharged; no file URL. Contact support@makernice.com for a manual review
checkingheldStays 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 counts as a failed generation?
What happenedCharged?What you see in the API
The model provider reports that the generation failedNo, hold releasedstatus: "failed", error.code e.g. generation_failed or upstream_unavailable
The task runs past its maximum run timeNo, hold releasedstatus: "failed", error.code: "timeout"
An internal error on our side stops the taskNo, hold releasedstatus: "failed"
Input moderation rejects the prompt or an input image before generationNo, 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 releasederror.code: "invalid_request", error.input names the image
You cancel while the generation is still queuedNo, hold releasedstatus: "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 heldHTTP 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 successfulstatus: "checking", billing: "held"
The output is generated but blocked by output moderationYes, 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 resultYesstatus: "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 /events timeline ends with failed_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 returns 409 not_cancelable and 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_rejected and nothing is held. If the provider's safety policy rejects it later, the generation ends failed with error.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", output state: "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 / checking

Prefer 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

What to check with any AI video API before you build

Questions to ask any AI video API before you build on it:

  1. Is a failed or timed-out run charged, partly charged, or free?
  2. Is money charged at submit time or when the run completes?
  3. Does a content-moderation rejection cost anything, before and after generation?
  4. Can you cancel a queued job, and is the money returned?
  5. Is the price locked before you run, or calculated afterwards?
  6. 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

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.