Preflight a 90-second voiceover timeline free before the render
Sume's Timeline 1.0 plan endpoint compiles your request, returns duration and billable minutes, and charges nothing. Use it before the $0.20 render.

Yes, you can check a voiceover timeline for free: POST /v1/timeline-1.0/plan validates the request, compiles it and returns the duration, segment count, billable minutes and an estimated cost, without creating a job or reserving credit. For a 90-second video it should show 2 billable minutes before you pay the $0.20 render.
What plan does and does not do
Per the Timeline page, plan runs schema validation, checks that URLs are on Sume hosts and runs the pure compiler. It returns object: timeline_plan with duration_seconds, segment_count, billable_minutes, estimated_cost_usd_micros and a filtergraph_summary. It does not download media, so it cannot tell you whether the files are readable. An Idempotency-Key is not required.
One limit matters for voiceover work: a plan cannot predict short-source pad or loop warnings. If a clip is shorter than its slot, the render may pad or loop it, and the plan will not say so.
| Plan | Render | |
|---|---|---|
| Endpoint | POST /v1/timeline-1.0/plan | POST /v1/timeline-1.0/render |
| Cost | Unbilled | $0.10 per ceil output minute |
| Creates a job | No | Yes |
| Downloads media | No | Yes |
| Idempotency-Key | Not required | Required |
| 90-second output | Shows billable minutes | Billed as 2 minutes, $0.20 |
What a plan catches before you pay
- A slot count over the 200-slot limit, or an
audio.duration_secondsoutside 1 to 1,800. - A URL that is not a media.sume.com artifact or asset, which means you forgot a media import.
- A duration that rounds up to an extra minute. A 121-second timeline bills 3 minutes, and trimming one second saves $0.10.
A plan request
Use the same body you intend to render, then compare the answer with your budget. Start from the audio length: the voice file you already generated tells you audio.duration_seconds.
curl -X POST https://api.sume.com/v1/timeline-1.0/plan \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"audio": { "url": "https://media.sume.com/artifacts/artf_demo/voice.wav",
"duration_seconds": 90 },
"video": [
{ "source_url": "https://media.sume.com/artifacts/artf_demo/a.mp4", "start": 0, "duration": 45 },
{ "source_url": "https://media.sume.com/artifacts/artf_demo/b.mp4", "start": 45, "duration": 45 }
]
}'Where this sits in the workflow
The order that wastes the least money is: generate the voice, listen to it, plan the timeline, then render. The voice costs cents, the plan costs nothing, and only the render, at $0.20 for 90 seconds, is the real spend. Because the plan is free, run it every time the voice length changes. A retake that moves a 118-second voice to 121 seconds also moves the render from 2 billable minutes to 3, which is $0.10 more, and the plan shows that before you pay it.
Each video slot takes source_url, start and duration, as in the render example on the Timeline page. The default output is 1080 by 1920 MP4, and the plan is the quick way to learn that a slot list does not add up to the audio length, since the compiler rejects what it cannot place.
Reading the answer
Compare three fields with what you expect. duration_seconds should equal the voice length. segment_count should equal the slots you wrote. billable_minutes times $0.10 should match your budget, and estimated_cost_usd_micros is the same number in millionths of a dollar. If any of them surprises you, fix the request while it is still free.
Keep the plan response next to the render job id in your logs. When a finance question arrives a month later, the plan shows what you expected to pay and the job shows what you did pay.
When the plan is not enough
The plan cannot see media. A slot that points at a clip shorter than its duration will only warn at render time that the source was padded or looped, and that soft warning does not fail the job. After the first real render, read warnings[] in the result and fix the clip, not the plan.
Treat the plan as part of the script that builds the video, not as a manual step. A build that fails on a plan error costs nothing, and a build that reaches the render has already passed the cheap checks.
Sources
Related posts
More in Developers
- Check durations, frames and references against the Sume video catalog
Read supported_durations, supported_resolutions, supported_frame_images and supported_input_references from /v1/videos/models and refuse bad requests early.
- Presigned URL expiry for image edit references on Sume
Sume downloads reference images from a public HTTPS URL. A presigned link that expires mid-queue gives input_media_unreachable. How to set a safe expiry.
- Preview a 3-minute Short with 24 stills, one every 7.5 seconds
Video frames returns up to 24 stills per call, which spaces a 180-second Short at 7.5 seconds. Build the at[] list in Python and submit it to /v1/video-frames.
- Price a multi-shot Wan 3.0 job first: Timeline plan is unbilled
Before you pay to join Wan 3.0 shots, call POST /v1/timeline-1.0/plan: it compiles the timeline and returns segment count, billable minutes and an estimate.
Written by Sume