jobs_wait says status unknown, poll_count 0: is the job lost?
No. A jobs_wait with status unknown and poll_count 0 means the server was too busy to read the job. Wait again on the same ids; never resubmit a paid create.

No, the job is not lost. When Sume's MCP server is saturated, jobs_wait can return HTTP 200 with timed_out: true, an outcome of wait_slice_expired, a status of unknown and a poll_count of zero. That means the server never got to read the job. The job was submitted, may be running, and still bills as normal.
How to read the answer
The difference is only in whether the server managed to take one snapshot. The answer keeps all the ids you asked about, so you can send the same request again without rebuilding the list. For a single-id wait, the value is null in the busy case.
| Field | Busy server, no snapshot | Normal slice expiry |
|---|---|---|
| HTTP status | 200 | 200 |
| timed_out | true | true |
| Outcome | wait_slice_expired | wait_slice_expired |
| Job status | unknown | A real status such as processing |
| poll_count | 0 | One or more |
| Requested ids | All kept in the answer | All kept in the answer |
What to do next
Issue jobs_wait again on the same ids. The jobs and results page is clear that a wait which ends without a terminal state is not a job failure and that you must not submit the paid create again. If you want a second opinion, one jobs_status read gives you a snapshot of the same ids.
Waits and reads are answered at once when the server is saturated, instead of queuing, which is why this answer arrives fast. Other tools behave differently: they return a retryable wait_busy error with HTTP status 429, and you retry only that call.
- Treat
unknownas 'not observed', not as 'failed' or 'stuck'. - Keep the same
idempotency_keyon any retried submit, so a retry returns the original job. - Back off a second or two between retries; the server's own retry hint on a busy rejection is one second.
The tradeoff
Sume could have queued waits until a slot opened, but a queued wait is just another request held open at the edge, which is the failure the 55-second cap exists to avoid. Answering at once keeps the server responsive and puts the retry in your loop. The cost is that your loop must tell 'not observed' apart from 'observed and running', so check poll_count or the status rather than only timed_out.
Sources
Related posts
More in Developers
- Keep a series voice consistent: pin model, voice, speed and volume
A series sounds the same only if every episode sends the same TTS settings. Keep one profile in code, pin a model id, and send it with each Sume request.
- Same volume every Shorts episode: gain_db, duck_db, one music bed
Sume does not measure loudness. To keep a series consistent, pin audio.gain_db, soundtrack gain_db and duck_db in one function with one bed. Python plan loop.
- Kill switch for a Sume video batch: what it stops and what not
A stop file checked between Sume submits halts a batch, but jobs already accepted keep running and billing. A tested Python loop and the cancel limits.
- Ktor webhook route for an AI video job: receiveText and HMAC SHA-256
A Ktor route reads the raw body with call.receiveText(), checks Sume's sume-v1 HMAC over timestamp.body in Kotlin and returns 401 when the secret is empty.
Written by Sume