/v1/videos poll status: pending, in_progress, and the Sume job state
On /v1/videos, a Sume job reads queued as pending, processing as in_progress, canceled as cancelled. The full status mapping, and why expired never appears.

If you wrote a client from OpenRouter's video generation docs and point it at Sume, the status strings you see on GET /v1/videos/{job_id} are not the same as the ones on GET /v1/jobs/{id}/status. Both read the same job. The mapping is fixed in Sume's implementation contract.
The mapping
Note the spelling: Sume says canceled on its own job endpoints and cancelled on the OpenRouter-shaped route. A strict string match on one will miss the other.
| Sume job.status | /v1/videos status |
|---|---|
| queued | pending |
| processing | in_progress |
| completed | completed |
| failed | failed |
| canceled | cancelled |
Two things that surprise people
expiredis in the enum for wire compatibility, but Sume does not expire jobs, so you will never see it.- Submit and poll return bare OpenRouter-shaped objects, not Sume's usual
{ "data": ... }envelope.idandgeneration_idare the same Sume job id.
A poll loop that handles both names
This loop stops on any terminal name from either surface. It uses the polling URL from the 202 response and the key from the environment.
import os
import time
import requests
TERMINAL = {"completed", "failed", "cancelled", "canceled"}
HEADERS = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
def wait(polling_url, every=5, limit=900):
waited = 0
while waited < limit:
job = requests.get(polling_url, headers=HEADERS, timeout=30).json()
if job["status"] in TERMINAL:
return job
time.sleep(every)
waited += every
raise TimeoutError(polling_url)
When a job fails, read error on the poll response; it is the same public remap as the jobs endpoint. A GET .../content after failure answers 409 job_failed, which is not retryable, while job_not_completed is. See the Video generation docs for the full error table.
Sources
Related posts
More in Developers
- /v1/videos provider.options returns 400: no passthrough in v1
Non-empty provider.options on /v1/videos returns 400 unsupported_parameter: every model lists allowed_passthrough_parameters as empty. seed and size fail too.
- Veo 3.1 Lite: no 4K, no extension. Checklist before Oct 22
Veo 3.1 Lite has no 4K and cannot extend clips, and all three Veo 3.1 preview ids shut down October 22, 2026. Google points to gemini-omni-1.1-flash.
- Veo 3.1 preview ids vs gemini-omni-1.1-flash vs Sume's Omni id
Three Veo 3.1 preview ids end October 22, 2026 and Google names gemini-omni-1.1-flash as the replacement. Sume spells its id gemini-omni-flash-1.1.
- Veo 3.1 deletes clips after 2 days: archive them, and the Sume path
Google keeps Veo 3.1 videos on its server for 2 days, and extending a clip resets the timer. Download on completion. Veo 3.1 is not in the Sume catalog.
Written by Sume