Sume cancel returns 409 job_generation_already_started: what now?
POST /v1/jobs/{id}/cancel works only before generation starts. After that, 409 with details.cancelable false and the job runs to completion.

POST /v1/jobs/{id}/cancel succeeds only before generation work starts. After that, Sume returns 409 job_generation_already_started with details.cancelable: false, and the job runs to completion. Cancel early, or accept the result. Canceling a job that is already canceled is idempotent and returns the same canceled job.
What each answer means
Three outcomes are possible, and each one has a distinct handler.
| Response | Meaning | Your move |
|---|---|---|
| 200 canceled job | Cancel landed before generation | Done |
| 409 job_generation_already_started | Provider work began | Keep polling; use the result |
| 409 job_not_cancelable | Job is in a state that cannot be canceled | Read the job record |
Cancel as soon as you know
The window is early, while a job is queued. Because paid jobs can sit as queued when workspace concurrency is busy, a queued job is the best candidate to cancel. Only the member whose key created a job can cancel it.
Do not rely on client timeouts
A client-side timeout does not cancel anything. The job continues to run and bill. If you stop waiting, store the id and either read it later or cancel explicitly.
curl -X POST https://api.sume.com/v1/jobs/job_123/cancel \
-H "Authorization: Bearer $SUME_API_KEY"
# 409 + details.cancelable=false -> let it finish, then read /resultFail-safe pattern
On a 409, switch from canceling to waiting. Poll status, fetch the result, and discard it in your own code if you no longer need it. Treat the spend as incurred, and fix the upstream decision that produced a job you wanted to cancel late.
Related posts
More in Developers
- Cancel video jobs still queued after 10 minutes: handle the 409
A Python sweeper that cancels Sume video jobs queued too long. POST /v1/jobs/{id}/cancel works only before generation starts; the 409 means keep waiting.
- canceled vs cancelled: one letter that breaks video status checks
Sume native jobs say canceled and send job.canceled. The OpenRouter-shaped /v1/videos response says cancelled. Normalize the spelling before you branch.
- Sume 501 capability_not_configured: no job started, no credits spent
501 capability_not_configured means that feature is not connected on the platform. No job starts and nothing is charged. Do not retry; contact support.
- Caption 40 clips in six languages with no language hint: $8
Leave `language` off and Sume's caption job detects it. Forty clips of up to 60 seconds cost $8.00 at $0.20 each; here is the loop and the style trap.
Written by Sume