Sume API media URL rules: which URLs each endpoint accepts
Sume generation endpoints fetch public HTTPS media URLs. Trim, filter, frames, inspect, and Timeline take only your workspace's media.sume.com URLs.

The Sume API accepts two kinds of media URL. Most generation endpoints, captions, and Format or Agent attachments take a fetchable public HTTPS URL, while the media tools (trim, audio detach, filter, frames, inspect, and the Timeline routes) accept only media.sume.com URLs that already belong to your workspace, such as the output of an earlier Sume job.
The table comes from Sume's Media inputs page, each endpoint's docs page, and the OpenAPI reference, read on 2026-09-27. How the avatar, face-swap, and caption fields and Format attachments work is covered in Video API media inputs and outputs; this page is the endpoint-by-endpoint rule.
Which URL does each endpoint accept?
Public HTTPS means a fetchable HTTPS URL on the open internet. Workspace media.sume.com means an artifact or asset your workspace already has on that host; other hosts are refused. Each row links the post that covers that endpoint.
| Endpoint | URL fields | Accepts |
|---|---|---|
Image API: POST /v1/images | input_references, mask_url | Public HTTPS |
Video generation: POST /v1/videos | frame_images, input_references (image, video, audio) | Public HTTPS |
Avatar creation: POST /v1/avatar-1.0/generate | input.image_url | Public HTTPS |
Talking video: POST /v1/avatar-1.0/talking-video | product_image, scene.image_url, video_inputs[].background.url | Public HTTPS |
| Face swap (Beta) | video_url | Public HTTPS |
Captions: POST /v1/video-captions | video_url | Public HTTPS; provider task URLs are refused |
| Background removal and speech-to-text | image_url, audio_url | Public HTTPS; the reference says to prefer a Sume media URL |
| Image upscale and video upscale | image_url, video_url | Public HTTPS |
Motion control: POST /v1/kling/3.0/motion-control | image_url, motion_video_url | Public HTTPS; the motion video is at most 30 seconds |
Lip sync: POST /v1/veed/fabric-1.0, POST /v1/minimax/h3-max/lip-sync | image_url; audio_url | Image: public HTTPS. Audio: the Sume media host only, max 10 MB |
Music Router: POST /v1/music-router/generate | image_url (optional) | Public HTTPS |
| Format runs and Agent Completions | attachments[].image_url | Public HTTPS, fetched when you create the run |
Trim, detach, and filter: POST /v1/video-trim, /v1/audio-detach, /v1/video-filter | video_url | Workspace media.sume.com only |
Frames and inspect: POST /v1/video-frames, /v1/video-inspect | video_url | Workspace media.sume.com only |
| Timeline render and plan | audio.url, audio.parts[], video[].source_url, soundtrack.url | Workspace media.sume.com only |
| Compose and Timeline audio | image.url, video.url; url, parts[] | Workspace media.sume.com only |
What counts as a public HTTPS URL?
The docs call these fetchable public HTTPS URLs: the file has to load for an anonymous request from the open internet.
- Localhost, private-network, non-HTTPS, and signed or private URLs are rejected before generation submission, and so are mismatched content types.
- In current code, every URL field in the table except attachments also refuses embedded credentials, a port other than the default 443, and a host name ending in
.local,.internal, or.test, and caps the URL at 2,048 characters. - Format and Agent attachments are fetched when you create the run, so they must be reachable without auth. An unreachable host, hotlink protection, or a non-2xx answer fails the create with
502 attachment_fetch_failed.
Why do trim, frames, and Timeline refuse my URL?
The media tools have no open-internet fetch, so an off-host URL such as https://example.com/clip.mp4 is rejected at admit. These are the URL codes they return:
unsupported_media_source: the URL is not on the Sume media host.source_not_found: a dead or foreignmedia.sume.comURL.unsupported_media_type: on trim, detach, and filter, the file's HEAD response is not a video.- On
POST /v1/video-frames, avideo_urlthat is not onmedia.sume.comis a plain schema400.
Can I test a URL without paying?
Yes. POST /v1/video-filter/check runs the same Sume-host and HEAD preflight as a filter encode and returns diagnostics instead of a 400, without creating a job or reserving credits. POST /v1/timeline-1.0/plan runs the Sume-host URL checks for a whole timeline, also unbilled.
curl -X POST https://api.sume.com/v1/video-filter/check \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"ops": [{ "op": "dim", "amount": 0.45 }]
}'How do I get a file onto media.sume.com?
Start from an earlier Sume output. Sume mirrors generated outputs into Sume-owned media URLs before it exposes them in results, and completed jobs carry those files as artifacts under media.sume.com. A generated clip, a captioned video, or an earlier trim can feed the next media tool. For a POST /v1/videos clip, read the artifact from GET /v1/jobs/{id}/result, as chaining clips from the last frame shows.
- Sume's asset upload routes are implemented but hidden from the public OpenAPI, and the docs say not to treat them as public contract.
- Store the Sume URL, not a raw provider URL. Raw provider URLs and provider task URLs are not part of the public result contract.
Sources
Related posts
More in Developers
- Webhook URL rejected as invalid? Sume's webhook URL rules
Sume answers 400 invalid_request when a webhook URL is not public HTTPS. The rules for scheme, host, port, and credentials, and the check at delivery.
- Connect Claude Code, Cursor, or Codex to Sume with hosted MCP
Sume's hosted MCP server at mcp.sume.com/mcp lets coding agents generate images, video, audio, and avatars. Setup, OAuth scopes, and spend gates.
- Idempotency keys for AI video APIs: retry without paying twice
An idempotency key makes a retried create return the original run or job instead of a second paid one. How Sume's Idempotency-Key works on each API.
- Signed webhooks for Sume video runs: events, retries, verification
Sume sends one HMAC-SHA256 signed POST when a Format, Action, or Agent Completion run completes or fails. Verify the raw body and dedupe on request_id.
Written by Sume