Runway waitForTaskOutput timeout does not cancel the task
Runway's waitForTaskOutput gives up after ten minutes but the task keeps running and billing. How to cancel on timeout, and the same rule on Sume jobs.

Runway's SDK helper waitForTaskOutput waits ten minutes by default and then throws a timeout error, but the page is explicit that hitting the timeout, or triggering the abort signal, does not cancel the task. You must call the cancellation endpoint yourself. A Sume client has the same trap: stopping your wait does not stop the job, so call cancel.
What Runway says
The Node page says the default is ten minutes, null waits forever and that is not recommended because your server can hang if the project hits its concurrency limit or Runway has an outage. In a web handler it recommends an abort signal tied to the request. The Python page repeats the same: the default timeout is ten minutes, and on timeout the task will not be cancelled.
| Event | Task state afterwards |
|---|---|
| Default timeout reached (10 min) | Task keeps running |
| Abort signal fired | Task keeps running |
| Cancellation endpoint called | Task canceled |
The same trap on Sume
Sume's Jobs API has POST /v1/jobs/{id}/cancel, and the job states include canceled. Dropping an HTTP connection, ending a polling loop or closing a browser tab does not cancel anything. If you want a job to stop, send the cancel request and then read the final state.
A safe timeout handler
Write the timeout handler once and use it in both integrations:
- On timeout, send the cancel request before you return an error.
- Read the job once more: it may have finished while you were canceling.
- Store the task or job id so a later sweep can cancel orphans.
- Do not disable the timeout to make an error go away.
Races are normal
A cancel on a task that already finished is a normal race, not an incident. Treat the final state you read as the truth, and bill and deliver from that.
Sources
Related posts
More in Developers
- Feed scraped product copy to a Format run: input, not instruction
Putting a supplier's text into a Format's instruction lets it steer the run. Sume's input field is treated as data, with a 64-key and 2 MiB limit.
- script_run budgets: call, paid-call and timeout limits on MCP
script_run caps a Sume MCP program by timeout (5-55 s), max_calls and max_paid_calls, and stops with a named error code. Defaults, ceilings and what to do next.
- Seedance 2.5 60 FPS on Dreamina: is there a frame-rate field?
Dreamina's plan page lists frame-rate improvements up to 60 FPS and resolution upgrades. Sume's video request has no fps field; here is what it takes instead.
- Seedance 2.5 first frame plus references in one request: 400
On Sume's Video Router, image_url plus reference_*_urls returns 400 for seedance-2.5. Pick image-to-video or reference-to-video; /v1/videos lets frames win.
Written by Sume