/v1/videos id and generation_id are one Sume job id: store one
On Sume the id and generation_id in a /v1/videos poll are the same job id, unlike OpenRouter's two ids. Store one and reuse it on /v1/jobs routes.

In a Sume /v1/videos poll response, id and generation_id carry the same value: the Sume job id. OpenRouter has two different ids. Sume has one, so you only need to store one string per generation.
The poll response
A completed poll response in the Sume docs looks like this.
{
"id": "job_01HXYZ",
"generation_id": "job_01HXYZ",
"polling_url": "https://api.sume.com/v1/videos/job_01HXYZ",
"status": "completed",
"model": "seedance-2",
"unsigned_urls": ["https://api.sume.com/v1/videos/job_01HXYZ/content?index=0"],
"usage": { "cost": 0.25, "is_byok": false }
}Where the same id works
The same id works on other Sume routes. The table shows where to read the same job.
| Route | Shape | Use it for |
|---|---|---|
GET /v1/videos/{id} | Bare OpenRouter-shaped object | Status, unsigned_urls, usage.cost |
GET /v1/videos/{id}/content?index=0 | Redirect to the artifact URL | Download the video |
GET /v1/jobs/{id}/status | Normal Sume { data } envelope | Status in the Sume job format |
GET /v1/jobs/{id}/result | Normal Sume { data } envelope | Result in the Sume job format |
What to store
Pick a single column in your database. Store the id from the 202 submit response, which is the same string you get back as generation_id later. If your code was written against OpenRouter and keeps two columns, it still works: both columns will hold the same value.
The submit response (202) carries id, polling_url, status and model. When the job was submitted with sume/auto, model echoes sume/auto.
Retries
POST /v1/videos also accepts an Idempotency-Key header. Send the same key and body on a retry after a network error so that it does not queue a second generation. Reusing a key with a different body returns a 409 conflict.
Sources
Related posts
More in Developers
- /v1/videos model_not_found: 404 now, not 400. Fix retry logic
An unknown model id on /v1/videos returns 404 model_not_found. It was 400 through #2311 and changed in #2321. Update clients that match on 400.
- /v1/videos size 1920x1080 returns 400: send resolution instead
POST /v1/videos rejects size with 400 unsupported_parameter because every model reports supported_sizes null. Send resolution plus aspect_ratio.
- /v1/videos failed: 'Could not download an input media URL' fix
A /v1/videos job fails with 'Could not download an input media URL (image_url)' when Sume cannot fetch your input. Make the URL public https and resubmit.
- /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.
Written by Sume