Get the rendered MP4 back from a video editing API job
Descript's API lists no rendered file download without publishing. In Sume, a finished timeline_render job result carries video_url; here is the poll flow.

With Sume you read the file straight from the job: when GET /v1/jobs/:id/result returns kind: timeline_render, it carries a video_url on media.sume.com, with no publish step in between. Sume's Timeline has no GET /v1/timeline-1.0/:id, so you poll the job envelope.
Descript's API page lists "No rendered file download without publishing" under known limitations. Everything about Sume below is from the Timeline 1.0 docs, read 2026-09-30.
How do I submit and poll?
Submit to POST /v1/timeline-1.0/render with an Idempotency-Key. The default mode is async; pass mode: "sync" to wait up to 30 seconds for a 200, or you get 202 and poll GET /v1/jobs/:id/status, then GET /v1/jobs/:id/result once it is result_ready.
curl -X POST https://api.sume.com/v1/timeline-1.0/render \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: render-download-001" \
-d '{
"mode": "sync",
"audio": { "url": "https://media.sume.com/artifacts/artf_demo/voice.wav", "duration_seconds": 24 },
"video": [
{ "source_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4", "start": 0, "duration": 24 }
]
}'What is in the result?
The result is kind: timeline_render with video_url, duration_seconds, segment_count, billable_minutes and optional warnings[]. Soft warnings such as padded or looped short sources are not failures. The same pattern holds for the other media routes: video-trim, video-filter, audio-detach and the compose and audio jobs all return their file URL in the job result.
Can a client run out of credits mid-flow?
Descript states that when either media minutes or AI credits run out, "API requests return a 402 error". Sume's docs list a public rate of $0.10 per ceil(output minute) for a render, and the reserve is ceil(audio.duration_seconds / 60) minutes. Call POST /v1/timeline-1.0/plan first: it is unbilled and reports billable_minutes.
| Route | Result kind | File field |
|---|---|---|
| timeline-1.0 render | timeline_render | video_url |
| video-trim | video_trim | video_url |
| video-filter | video_filter | video_url |
| audio-detach | audio_detach | audio_url |
Sources
Related posts
More in Developers
- 429 enforced_spend_limit_reached: why retrying never works
A 429 with no retry-after can be a monthly spend cap, not a rate limit. What Anthropic's page says, and how Sume separates 402, 429 rate_limited and queue_full.
- Face swap API: quality has no default, unlike avatar videos
Avatar videos default to plus when quality is omitted. Sume's Beta face swap has no default: quality is required and takes standard, plus or max.
- FLUX image URL expires after 10 minutes: what Sume returns
Black Forest Labs says generated FLUX image URLs expire after 10 minutes. Sume returns Sume-hosted signed URLs; here is how to fetch and keep the file.
- frame_images plus input_references in one request: which wins?
When a Sume video request carries both frame_images and input_references, frame_images wins and the job runs as image-to-video. What that means for references.
Written by Sume