Concatenate audio files by API: parts, and no top-level url
Sume Timeline audio concat needs a parts array and refuses a top-level url or ranges. Each operation accepts its own keys; mixing them returns a stable code.

To concatenate audio with Sume, send operation: "concat" and a parts[] array of 1 to 20 ordered parts. Put no url or ranges at the top level: those are split fields and are refused as audio_concat_takes_no_url and audio_concat_takes_no_ranges.
This is from the Timeline audio docs, read 2026-10-01. HeyGen's Speech Cleanup post describes stitching remaining footage into one take; this API joins audio files you already hold.
Which keys belong to which operation?
Concat and split share an endpoint, POST /v1/timeline-1.0/audio, but not their fields.
| Request | Code |
|---|---|
Concat without parts | audio_concat_requires_parts |
Concat plus top-level url | audio_concat_takes_no_url |
Concat plus top-level ranges | audio_concat_takes_no_ranges |
What does a valid concat look like?
Each part is { url, source_in?, duration? }. All URLs must already be on this workspace's media.sume.com. Parts must share one channel layout, or the worker returns audio_parts_channel_mismatch.
The join is sample-domain, so no re-synthesis and no silence at the seams. More in the channel mismatch post.
curl -X POST https://api.sume.com/v1/timeline-1.0/audio \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: audio-concat-001" \
-d '{
"operation": "concat",
"parts": [
{ "url": "https://media.sume.com/artifacts/artf_demo/line1.wav" },
{ "url": "https://media.sume.com/artifacts/artf_demo/line2.wav" }
]
}'How do I trim a part before joining?
Use source_in and duration on the part itself, not a top-level range. A trim belongs to the part; ranges belongs to split.
Sources
Related posts
More in Developers
- Split audio into segments by timestamps: url and ranges
Sume Timeline audio split needs a top-level url and 1 to 20 ranges. A range with end at or before start is refused; each segment gets its own audio_url.
- Image over video longer than the clip: compose's 300 s ceiling
Sume Timeline compose length comes from the video layer, capped at 300 seconds. Asking for more than the file clamps with a warning and the job still succeeds.
- compose_image_not_still and compose_video_not_video: the fix
Sume Timeline compose probes both URLs: image.url must be a still, video.url a video. Failing either refuses the request; off-host URLs need an import first.
- Image above video, or left and right: compose image_region axes
In Sume Timeline compose a horizontal split takes top or bottom and a vertical split takes left or right; a mismatch is a 400, compose_image_region_wrong_axis.
Written by Sume