Kling motion control 402: a 30 s reference needs $4.725 in credits

402 insufficient_credits on Kling motion control means your balance is below the reserve for the declared length. 30 s is $4.725. Trim, then retry.

5 min readSume
All posts

If a Kling motion control submit returns 402 insufficient_credits, your balance is lower than the reserve for the length you declared. The reserve is ceil(duration_seconds) x $0.1575, so a 30-second reference needs $4.725 available and a 12-second one needs $1.89. Nothing was started, and nothing was charged.

Why the check happens first

Sume uses admit, reserve, capture and refund. The reserve is taken when the job is admitted, and a job without enough credit is refused at the door. That is the right place for the check, because the provider has not been called and there is nothing to undo.

The amount is the whole declared length, since the output length is set by the reference and the API cannot know it better than you declare it. When the job completes, the reserve becomes the charge. If the job fails, the reserve returns to your balance.

What to do on a 402

There are three fixes, and the cheapest is usually the first.

  • Shorten the reference. A trim to the part that you need cuts the reserve in proportion, and the trim is $0.02.
  • Top up the balance by at least the shortfall, then resubmit with the same body and the same Idempotency-Key.
  • Split a long job into two shorter ones, which each reserve less, if the balance is low but not empty.

Reserve by declared length

Credits needed to admit a motion control job, USD (read 2026-10-05)
duration_secondsReserveRemaining after a 5 USD balance
50.78754.2125
121.893.11
203.151.85
304.7250.275

Retrying correctly

A 402 does not create a job, so a resubmit with the same key is a normal first submit, not a replay. Keep the key stable between the failed and the retried call so that a client that retries twice by accident does not pay twice. If you change the body, for example by trimming the reference, use a new key, since a changed body with an old key is a 409 idempotency_conflict.

Do not loop on a 402. It is not a transient fault like 429 queue_full. It stays until the balance changes, so your code should stop and surface the shortfall to a person or to a top-up flow. The generation admission page lists the other submit errors and which of them are safe to retry.

Check the balance before you submit

Sume's admission preview (POST /v1/generation/admission-preview) exists to answer the question before a real submit, and it accepts the public id kling/3.0/motion-control. It is not a published part of the public OpenAPI document, so treat it as an aid for your own tooling, not a contract.

A simpler guard is to keep your own copy of the formula, ceil(seconds) x 0.1575, and compare it with the balance that your account page shows. When a shortfall is known in advance, you can send the person to a top-up page instead of a failed request.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume