60 clips on hosted MCP: three jobs_wait batches of 20, 3 calls total
jobs_wait takes 1 to 20 job_ids. For 60 clips that is three batch waits instead of 60. Add include_results to skip the separate result reads too.

Why batch
After a parallel fan-out on hosted MCP, prefer one batch jobs_wait to many single waits. jobs_wait accepts a single job_id, or job_ids with 1 to 20 ids and an optional wait_for of all (the default) or any. The batch response is object: "job_wait_batch" with a status snapshot for each id.
Sixty clips is three groups of 20. The call count comparison is simple arithmetic from that ceiling.
| Approach | Wait calls | Result calls | Total |
|---|---|---|---|
| Single wait, single read per job | 60 | 60 | 120 |
| Batch wait of 20, batch jobs_result of 20 | 3 | 3 | 6 |
| Batch wait of 20 with include_results | 3 | 0 to 3 | 3 to 6 |
The request
Each call still holds at most 55 seconds, with a default of 50. When it runs out, the outcome is wait_slice_expired. Retry the same ids. The remaining jobs continue and still bill, so never resubmit the paid creates. With wait_for: "any", the response still reports every id.
{
"job_ids": ["job_a", "job_b", "job_c"],
"wait_for": "all",
"include_results": true,
"timeout_seconds": 55
}include_results and what it leaves out
With include_results: true, each completed id comes back with its jobs_result answer in results[], so the wave needs no separate read. Some results do not fit in one answer. results_omitted.job_ids names those, and you read them with one batch jobs_result.
jobs_result also takes job_ids with the same 1 to 20 ceiling. The response is job_result_batch, with results[] in request order. Each entry has ok and either a value or a typed error. Partial success is normal: an id still running comes back job_not_completed, and partial_failure.failed_job_ids names exactly the ids that need a second read.
Mistakes that cost money
Unknown ids and ids from another workspace make the whole call fail, so a typo in one id of twenty fails all twenty. Validate ids before you batch them.
Do not treat wait_slice_expired as a failure of the job, and do not call the create tool again to recover. Store the job ids from the creates, because they are the only way to rejoin the work after a restart.
- Group ids in 20s. Two groups of 30 are not allowed.
- Keep each paid create's
idempotency_keystable on retry, so a repeated create returns the original job. - Report
media.sume.comids and URLs in logs, not signed URLs or tokens.
Order of operations for a wave
Create all 60 jobs first, each with its own stable idempotency_key, and write every returned job id to your own store. Then split the ids into three lists of 20 and wait on each list in turn. Because each wait returns when its slice ends, the second and third waits often return at once, since those jobs finished while you were waiting on the first.
When a list comes back with some ids still running, wait on just those ids. Shrinking the list keeps responses small and keeps results_omitted rare.
Logging the wave
Log one line per batch: the number of ids, the wait_for value, how many came back terminal, and the ids named in results_omitted. Do not log signed URLs or tokens. That is enough to explain a slow wave later without storing private data.
Sources
Related posts
More in Developers
- 720x1280 vs 1080x1920 for a 60 s Short: 40 MB vs 63 MB
YouTube lists 5 Mbps for 720p and 8 Mbps for 1080p. A 60 second Short is 40.38 MB vs 62.88 MB with audio. Set output.width and height in Sume Timeline.
- A 12-minute video job costs 24 status reads at 30 s and 360 at 2 s
Poll cadence arithmetic for Sume video jobs: 30-second polls, the 2-second SDK floor, and the 20-minute client deadline, with a runnable calculation.
- A 16-second single take breaks the Recast shot rule: $6.00 to split
H3 Max Recast allows no shot over 15 seconds. Split a 16-second take in two: at 768p that is two 8-second jobs at $3.00 each, $6.00 on Sume.
- A 20 s 9:16 clip: only Wan 3.0 and Seedance 2.5, $2.50 vs $11.56
Only Wan 3.0 and Seedance 2.5 take a 20 s prompt-driven clip on Sume. At 720p, 9:16 that is $2.50 on Wan and $11.56 on 2.5. A Python filter finds them.
Written by Sume