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.

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
| duration_seconds | Reserve | Remaining after a 5 USD balance |
|---|---|---|
| 5 | 0.7875 | 4.2125 |
| 12 | 1.89 | 3.11 |
| 20 | 3.15 | 1.85 |
| 30 | 4.725 | 0.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
- Kling motion control: output length follows the motion video
In Sume's Kling 3.0 motion control, duration_seconds (1-30) only sets the reservation. The motion video sets the output length. Price: $0.1575 a second.
- Kling motion control prompt: appearance only, what to write
On Sume's Kling motion control the prompt steers appearance only. The reference video sets all the motion. Write outfit, light and style, not actions.
- Kling motion control price in usage.billable_amount_usd_micros
The Sume motion control submit response returns usage.billable_amount_usd_micros. Divide by 1,000,000 to log the reserve: 30 s is 4,725,000 micros, or $4.725.
- Kling motion control webhook_url: a Python receiver that verifies
Send mode async plus webhook_url on a Kling motion control submit, then verify x-sume-webhook-signature (HMAC SHA-256 over timestamp.body) in Python.
Written by Sume