402 on a 30-second 1080p Wan 3.0 job: your balance must cover $7.50
A 30-second Wan 3.0 job at 1080p reserves $7.50 on Sume. If the balance is lower you get 402 insufficient_credits. Reserve table and handler.

Sume reserves the job price at submit, captures on completion and refunds on failure. A balance below the reserve returns 402 insufficient_credits. Wan 3.0 defaults to 1080p when you omit the field, so a 30-second job with no resolution reserves $7.50. Prices are Sume billable rates (provider list x 1.25, rounded up to the cent per job), read 2026-10-07.
Reserve by resolution
| Resolution | Reserve |
|---|---|
| 480p | $1.88 |
| 720p | $3.75 |
| 1080p | $7.50 |
A handler that reads status codes without assuming a body shape:
def explain(status):
if status == 402:
return "top up: balance below the reserve"
if status == 409:
return "job_not_completed: keep polling"
if 200 <= status < 300:
return "ok"
return "error " + str(status)
for s in (202, 402, 409, 500):
print(s, explain(s))Sources
Related posts
More in Developers
- A 429 from the Sume API: read budget, write budget or queue_full?
Three different 429s share a status. Read error.code and error.details.scope to tell read, write and queue_full apart, then retry each the right way.
- A lost response on a 30 s Kling motion control submit: reuse the key
If a network timeout hides the reply to a 30-second Kling motion control submit, a new Idempotency-Key reserves $4.725 again. Reuse the key. Python retry loop.
- Use your ad variant id as the Idempotency-Key on Sume
Name each ad variant once and send that name as the Idempotency-Key. Retries do not double-bill, and the receipt echoes it back so results map to your ad names.
- Add an object to a set spot in a photo: box to words in Python
Sume has no bounding-box field. Turn a 0-1000 box into placement words for an Ideogram 4.5 edit, and into pixels for a mask, with a short Python helper.
Written by Sume