Which field holds the file URL in a Sume media job result

Sume media jobs return different result keys: audio_url for detach, video_url for trim and filter, frames for stills. A field map for no-code steps.

4 min readSume
All posts

Every Sume media tool submits to its own route but finishes the same way: you read GET /v1/jobs/:id/result and take the output from the result. The key differs by tool. In a no-code flow, mapping the wrong key leaves the next step with an empty URL, so it is worth a table.

Audio detach, video trim and video filter have no GET /v1/<tool>/:id of their own, so you poll the job envelope with GET /v1/jobs/:id/status and read the result when it is result_ready.

The map

From the Sume model docs, read 2026-10-05
Toolresult kindWhere the output isDefault mode
Audio detachaudio_detachaudio_urlasync
Video trimvideo_trimvideo_urlasync
Video filtervideo_filtervideo_urlasync
Video inspectvideo_inspectprobe, frames[].url, transcriptsync
Video framesvideo_framesframes[].urlasync, always 202
Video captionsvideo_captionvideo_url / artifactsper request

Rules that help in a flow

  • The output URL is a new artf_ artifact on media.sume.com, never the source file.
  • Chain by passing the output URL as the next tool's video_url, since every Sume media tool wants a media.sume.com file.
  • A sync submit that exceeds 30 seconds returns 202, so a flow must handle both a 200 and a 202.

Reading it in code

def output_url(result):
    kind = result.get("kind")
    if kind == "audio_detach":
        return result["audio_url"]
    if kind in ("video_trim", "video_filter"):
        return result["video_url"]
    raise ValueError(f"no single file url for {kind}")

print(output_url({"kind": "video_trim", "video_url": "https://media.sume.com/artifacts/a.mp4"}))

For the video captions row, read the resource at GET /v1/video-captions/:id, which returns the captioned video_url.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume