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.

4 min readSume
All posts

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.

Where the file lives after each Sume media job (https://docs.sume.com/models/timeline, read 2026-09-30)
RouteResult kindFile field
timeline-1.0 rendertimeline_rendervideo_url
video-trimvideo_trimvideo_url
video-filtervideo_filtervideo_url
audio-detachaudio_detachaudio_url

Sources

Related posts

More in Developers

All Developers posts

Written by Sume