Seedance video URL: 24 hours, 100 downloads, and Sume artifacts
BytePlus keeps a Seedance 2.5 video URL for 24 hours, at most 100 downloads. What that means, and how to read and save a Sume job's hosted video artifact.

Calling Seedance 2.5 directly on BytePlus, the video URL is retained for 24 hours and can be downloaded at most 100 times, so download or transfer it promptly. On Sume, a completed job returns a Sume-hosted artifact URL. The docs tell you to treat it as opaque, and to save the file you need rather than depend on a URL you cannot inspect.
BytePlus numbers are from its Seedance 2.5 tutorial, read 2026-10-01. For whether Sume URLs expire, see do Sume video URLs expire.
What are the BytePlus retention rules?
The tutorial lists: task records retained for 7 days; video URL retained for 24 hours (inaccessible after timeout); a maximum of 100 downloads. It says to download or transfer in a timely manner. A separate Draft task ID is valid for seven days from its created_at timestamp.
| Item | As written |
|---|---|
| Task records | Retained for 7 days |
| Video URL | Retained for 24 hours; inaccessible after timeout |
| Downloads | Maximum of 100 |
| Draft task ID | Valid for seven days from created_at |
Where does a Sume job's video live?
Completed Video 1.0 jobs return Sume-hosted video artifacts, with an artifacts entry whose url is on media.sume.com. For the generic video endpoint the docs read the finished file from the status payload: status["unsigned_urls"][0]. Treat artifact URLs as opaque: do not parse paths for workspace, job, or provider identifiers.
import requests
def save_video(polling_url: str, headers: dict, path: str) -> None:
status = requests.get(polling_url, headers=headers).json()
if status["status"] != "completed":
raise RuntimeError("job not finished: " + status["status"])
content_url = status["unsigned_urls"][0]
with open(path, "wb") as f:
f.write(requests.get(content_url).content)What should I save from a job?
Keep the job id and the downloaded file. Copy the video to storage you control when it completes, as you would with a short-lived provider URL, and use the job id to read the result again. This post makes no claim about how long a Sume URL stays valid beyond what the docs state; the expiry post covers that question directly.
Sources
Related posts
More in Developers
- Shopify Catalog media filter: video and model_3d (Sept 2026)
Shopify's Catalog API can now filter by media type: image, video or model_3d. A product only matches video if it has one, so render a product clip.
- Show only what moved between frames: tblend in difference mode
Sume's video filter allowlists tblend. In difference mode each frame is blended with the previous one so static areas go dark and movement lights up.
- Add a soft glow to video by API: split, gblur, screen blend
Sume's video filter allowlists split, gblur and blend, enough for a dreamy glow: blur a copy, then screen it over the original at partial opacity.
- Soften skin in video by API with smartblur (whole-frame)
Sume video filter allowlists smartblur, which blurs but keeps outlines. No face detection, so it softens the whole frame; tune radius, strength threshold.
Written by Sume