Sume audio_url_and_parts_exclusive: pick one spine for a VO Short

Sume timeline rejects audio.url together with audio.parts. Send a single url spine, or up to 20 parts[], never both; the hint is use_audio_url_or_audio_parts.

4 min readSume
All posts

audio_url_and_parts_exclusive means your Timeline 1.0 audio object has both url and parts[]. Keep exactly one: url for one finished voice track, parts for up to 20 gapless slices that Sume joins inside the render. The next_action hint is use_audio_url_or_audio_parts.

This tends to appear when a script merges a pre-joined voice file with the original slices it came from. For a Short capped at 3 minutes (YouTube Help, read 2026-10-05), voice slices are common: a hook line, three beats and a call to action, each recorded or generated separately.

Choosing url or parts

Per the Timeline 1.0 docs, parts[] takes at most 20 slices, each a url plus optional source_in and duration, joined in the sample domain with no re-generation of speech. A single url is simpler when the file is already whole. If you need the joined file as a reusable asset, the timeline audio route concatenates parts into a wav or mp3 for $0.01 per job.

url spine vs parts spine (Sume docs read 2026-10-05)
Questionaudio.urlaudio.parts[]
How many files11 to 20
In-pointaudio.source_inper-part source_in
Sum shorter than outputnot applicableaudio_parts_shorter_than_duration
Reusable joined filenouse timeline-audio concat

A valid parts body

This renders a 20 second output from two voice slices. Declared part lengths must add up to at least duration_seconds, otherwise the schema returns audio_parts_shorter_than_duration when every part declares its length.

{
  "audio": {
    "parts": [
      { "url": "https://media.sume.com/artifacts/artf_demo/hook.wav", "duration": 8 },
      { "url": "https://media.sume.com/artifacts/artf_demo/body.wav", "duration": 12 }
    ],
    "duration_seconds": 20
  },
  "video": [
    { "source_url": "https://media.sume.com/artifacts/artf_demo/a.mp4", "start": 0, "duration": 8 },
    { "source_url": "https://media.sume.com/artifacts/artf_demo/b.mp4", "start": 8, "duration": 12 }
  ]
}

Check before you pay

Send the same body to POST /v1/timeline-1.0/plan. It runs the schema and the compiler without creating a job or reserving credits, and it needs no Idempotency-Key. The render itself needs one. A plan cannot predict short-source pad or loop warnings, so expect those only from the real render result.

How the error is raised

The check lives in the request schema, so it fires at admit time, before any media is downloaded and before credits are reserved. The same refusal is returned by /plan and by render, with the field path pointing at audio.parts. That makes it safe to wrap in a test: a unit test that posts the two-field body to /plan and expects a 400 with this code is cheap and never bills.

Two neighbouring rules are worth knowing. With parts, a top-level audio.source_in is refused as audio_source_in_requires_single_spine, because it would be unclear which slice it seeks into. And with url, there is no per-slice length check, since there are no slices.

A quick audit of an existing builder

If a pipeline builds the audio object in several steps, search for the code path that sets parts after url has already been filled. The simplest repair is to build the object from one decision: if there is more than one voice file, set parts; otherwise set url. Never set both and then delete one downstream, because the intermediate object is what ends up in logs and retries.

When not to use parts

If you only want to cut one long voice file, do not slice it into parts; use a single url with audio.source_in. The in-point is allowed only in that single-spine form, which is the subject of a different error code, audio_source_in_requires_single_spine.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume