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
- Durable Object waitUntil keep-alive and a Sume job poll
Pending I/O now keeps a Durable Object alive without a client, but a Sume video job is better tracked by job id, status_url polling or a webhook.
- Edit a transcript with an AI instruction: Sume's STT flow
ElevenLabs STT accepts an edit instruction and returns edited_transcript. Sume's STT has no such field: it returns text and word timings to edit yourself.
- ElevenLabs per-key concurrency caps vs Sume's plan limit
ElevenLabs lets enterprise service account keys carry TTS, music and dubbing concurrency limits. Sume has one plan-based limit and no per-key setting.
- 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.
Written by Sume