Cancel a queued H3 Max Recast job: when you get a 409
You can cancel a Sume job only before generation starts. A queued Recast cancels cleanly; one already running returns 409 job_generation_already_started.

Cancel works only before the work starts
Sume's Jobs and results page says cancellation succeeds only before generation work starts. Once generation has started, POST /v1/jobs/{id}/cancel returns 409 job_generation_already_started with details.cancelable: false, and the job runs to completion. Cancelling a job that is already canceled returns the same canceled job.
For Recast that matters because the price is per second of source video: fal's page, read 2026-10-03, lists $0.30 at 768p and $0.45 at 1080p.
When a job is still cancellable
A paid job is queued when your workspace is at its processing limit. The Generation admission page says processing concurrency is 1 on Free, 4 on Pro, 8 on Startup, 20 on Scale, and queue capacity defaults to the greater of 3 or five times the concurrency limit. A queued job has not started, so a cancel can still succeed. Check the dashboard value rather than the table, since overrides exist.
Only the member who created the job can cancel it.
curl -X POST https://api.sume.com/v1/jobs/job_123/cancel \
-H "Authorization: Bearer $SUME_API_KEY"Handling the 409
- Treat
job_generation_already_startedas information, not an error to retry. The job continues and will bill. - Stop polling is not canceling: a client-side timeout leaves the job running.
- Store the job id at submit so you can cancel or read the result later.
- A cancel before generation starts is the only way to avoid the charge. Preview the cost before submitting a long clip.
A safer pattern for long clips
Check the price before you submit a 25 or 30 second clip, not after. Trim to the part that needs the swap: Recast bills by source seconds and keeps the source length, so a shorter source is a smaller charge. If you must submit first and decide later, submit async and read the status straight away; a status of queued is the window in which cancel can still work.
Remember that a cancel is a request that the platform evaluates at the moment it arrives. Your client cannot know whether the worker has just picked the job up, so handle both outcomes: a canceled job, and a 409 that tells you to wait for the result.
Sources
Related posts
More in Developers
- Cancel a queued music take: only before generation starts
Sume cancels a queued music job, but once generation starts the API returns 409 job_generation_already_started and the job runs on. Who can cancel it.
- Cancel a Sume schedule run: actions:write, idempotent, 200 on terminal
POST /v1/action-runs/{run_id}/cancel needs actions:write and is idempotent: canceling a finished run returns its terminal receipt. What happens to spend.
- Cancel a Sume video job twice: the second call returns the same job
POST /v1/jobs/{id}/cancel is idempotent for a canceled job and returns 409 once generation has started. How to write a cancel that is safe to retry.
- Caption a folder of videos in Python: thread pool, one key per file
Submit caption jobs from a Python thread pool without double billing: one Idempotency-Key per file, poll with next_poll_after_seconds, and the two 429s.
Written by Sume