Luma API video URL expires after 1 hour: what to do on Sume
Luma Agents API video URLs are presigned and expire after 1 hour. On Sume, a completed job is fetched with your API key from the /content endpoint.

Yes. Luma's Agents API delivers generated images and videos as presigned URLs that expire after 1 hour, so you must download promptly or poll GET /v1/generations/{id} for a fresh one. On Sume you do not hold an expiring link: a completed job is downloaded from /v1/videos/{jobId}/content with your API key in the Authorization header.
Luma facts are from its model guide; Sume facts from Video generation, both read 2026-10-01.
What exactly does Luma say about expiry?
The guide's "Presigned URL expiry" section says generated images and videos are delivered as presigned URLs that expire after 1 hour. Its remedy is to download promptly or request a fresh URL by polling the generation again. Anything that stores the URL itself, such as a database row or a CMS field, will hold a dead link after that hour.
How does a Sume completed job hand back the file?
When a Sume video job reports completed, its unsigned_urls array lists URLs for the generated content, and the docs also show the content endpoint directly. The request carries your key, and the optional index query parameter defaults to 0.
curl "https://api.sume.com/v1/videos/{jobId}/content?index=0" \
-H "Authorization: Bearer $SUME_API_KEY" \
--output video.mp4How do the two delivery models compare?
| Question | Luma Agents API | Sume |
|---|---|---|
| What do you get | A presigned URL | unsigned_urls plus a /content endpoint |
| What authorizes the download | The signature in the URL | Authorization: Bearer API key |
| Documented expiry | 1 hour | Not stated on the video page |
| Getting it again | Poll GET /v1/generations/{id} | Call /content again with the job id |
What should I store?
Store the job id, not a URL. If you must keep the file, copy the bytes into your own storage as soon as the job completes. For the Sume side, see do Sume video URLs expire and download a generated video from the API.
What if the job failed?
Nothing is left to download. The admission docs say failed jobs and failed queue admission release or refund the reservation where applicable, so a failed job is not a charge to chase.
Sources
Related posts
More in Developers
- Luma API X-Request-Id vs Sume x-sume-request-id
Luma's X-Request-Id echoes your header or is generated. Sume sends x-sume-request-id on every response; quote it, plus error.code, when you contact support.
- Luma Ray 3.2 extend with a generation id vs Sume per-clip jobs
Luma extends video from one prior generation id as start or end frame. Sume docs describe frame_images with first_frame or last_frame, a new job per clip.
- Ray 3.2 API for render farms: the Sume callback_url pattern
Luma pitches the Ray3.2 API for pipelines and render farms. On Sume, wire an async video job with callback_url, Idempotency-Key and a request id to log.
- Luma Ray 3.2 video edit ignores aspect_ratio: Sume video_url edit
On Luma Ray 3.2 a video edit takes its aspect ratio from the source and ignores the field; reframing needs a target. Sume edits through video_url.
Written by Sume