unsupported_media_source: why the media API rejects your video URL
unsupported_media_source means video_url is not on the Sume media host. Import the clip first; which Sume video endpoints need a hosted URL and which don't.

unsupported_media_source means the video_url you sent is not on Sume's media host. The trim, filter, audio detach, frames and inspect endpoints read only a media.sume.com artifact or asset in your workspace; they never fetch an arbitrary web URL. Import the clip first, then use the URL the import gives you.
The rule and the error list below come from the Video trim and Video inspect docs, read 2026-09-29.
Which endpoints need a hosted URL?
Not every video endpoint has the rule. Captions and face swap take a public HTTPS URL instead, per the Media inputs page.
| Endpoint | `video_url` must be |
|---|---|
/v1/video-trim | A workspace media.sume.com clip |
/v1/video-filter | A workspace media.sume.com clip |
/v1/audio-detach | A workspace media.sume.com clip |
/v1/video-frames | A workspace media.sume.com clip |
/v1/video-inspect | A workspace media.sume.com clip |
/v1/video-captions | A fetchable public HTTPS URL |
| Avatar face swap (Beta) | A fetchable public HTTPS URL |
How do I get the clip onto the media host?
Import it with POST /v1/media-imports; over MCP the tool is media-imports_create, with media-imports_get to read the result. The docs name this call as the way to bring a clip in before trim, filter, detach, frames or inspect. Read the request fields from the live OpenAPI at api.sume.com/reference, since they are not repeated in these pages.
A clip Sume generated is already on media.sume.com, so its result URL works directly.
What are the neighboring errors?
Two other codes look alike and mean different things.
source_not_found: the URL is on the media host but dead, or belongs to another workspace.unsupported_media_type: the HEAD check says the file is not a video.ffmpeg_fields_rejected: you sentvf,filter,ffmpeg,cmd,codecor similar; the server builds the ffmpeg command itself.
Does the check happen before I am billed?
The docs say off-host URLs are rejected at admit, that is when the request is accepted, so the rejection comes before a job runs. Other failures, such as a source longer than the limit, are raised by the worker after admit.
Sources
Related posts
More in Developers
- Wan 3.0 webhook: get notified when a 30-second clip finishes
Long Wan 3.0 clips take minutes. Pass callback_url on POST /v1/videos and Sume posts a signed webhook when the job ends, so you don't have to poll wan-3.0.
- Wan 3.0 Node.js example: generate a video with fetch
A short Node.js script that submits a Wan 3.0 job to POST /v1/videos, polls until it completes and saves the MP4, with no SDK. It uses the wan-3.0 model id.
- Wan 3.0 Python example: submit, poll and download a clip
A short async Python script that submits a Wan 3.0 job to POST /v1/videos, polls until it finishes, and saves the MP4. It uses httpx and the wan-3.0 model id.
- Wan 3.0 seed and size: why the API returns 400 unsupported_parameter
wan-3.0 on Sume rejects seed and size rather than ignoring them. Use resolution and aspect_ratio instead. Why the 400 happens and how to fix the request.
Written by Sume