Wan 3.0 video URL purged after 24 hours: what Sume returns
Alibaba keeps Wan 3.0 task ids and video URLs for 24 hours. Sume returns media.sume.com artifacts instead. What to store and when to download.

Alibaba says a Wan 3.0 task id is valid for 24 hours and the generated video is purged after the same window, so a direct integration has one day to download. Through Sume you do not hold Alibaba's URL at all: a completed job returns a Sume-hosted artifact on media.sume.com, and the job id is your durable handle. I still recommend downloading and keeping your own copy.
Alibaba's figures come from its Wan3.0 Video Generation API Reference, read on 2026-10-02. Sume's come from Video generation, Jobs and results and Sume basics.
What does Alibaba delete after 24 hours?
On Alibaba's page, two things carry a 24-hour validity: the task id you poll with, and the output video, which is automatically purged afterwards. The flow is asynchronous only, you create a task, then poll, with a recommended 15-second interval and PENDING, RUNNING, SUCCEEDED or FAILED states.
The practical consequence is a deadline. If your worker crashes, a webhook is missed, or a batch finishes overnight and nobody looks until the next day, a direct integration can lose both the status and the file.
What does Sume return instead?
Sume jobs are durable: the docs say to store the job id from the submit response so your integration can recover work after a process restart. A completed /v1/videos job lists unsigned_urls, and GET /v1/videos/{jobId}/content?index=0 streams the file. The Sume basics page describes media.sume.com as the public artifact contract for generated outputs.
What I could not find in the pages I read is a stated retention period for video artifacts. So the claim here is narrow: you are not racing a documented 24-hour upstream purge, and you should still treat artifact URLs as opaque and keep your own copy of anything you ship.
| Item | Wan 3.0 on Alibaba | Wan 3.0 on Sume |
|---|---|---|
| Handle you poll | task id, valid 24 hours | job id, durable, readable at /v1/jobs/{id} |
| Output file | purged after 24 hours | Sume-hosted artifact on media.sume.com |
| Documented retention | 24 hours | none stated in the pages read |
| Poll interval advice | 15 seconds | 30 seconds in the video guide |
How should I download and keep the file?
Poll the job, then fetch the content endpoint with your API key and write it to your own storage. This sketch stops on terminal states and does not resubmit a paid request after a failure.
import os, time, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
job = requests.post("https://api.sume.com/v1/videos", headers={**H, "Idempotency-Key": "wan-keep-001"},
json={"model": "wan-3.0", "prompt": "A paper boat crossing a puddle", "duration": 5}).json()
while True:
s = requests.get(job["polling_url"], headers=H).json()
if s["status"] in ("completed", "failed", "cancelled"):
break
time.sleep(30)
if s["status"] == "completed":
data = requests.get(f"https://api.sume.com/v1/videos/{job['id']}/content?index=0", headers=H).content
open("boat.mp4", "wb").write(data)
else:
print(s.get("error"))Should I still add a webhook?
Yes, with polling as the backup. Sume's webhook mode stores the callback and delivers terminal events only, and its docs tell you to keep polling alongside it. The Alibaba clock is the reason a direct integration needs both; on Sume the reason is simply that callbacks can fail like any HTTP delivery. See sweeping pending jobs when the webhook never arrives.
What about reading the cost?
The poll response carries usage.cost, the Sume billable amount, which is the provider list price times 1.25. Log it next to the saved file path so a month-end reconciliation can find each clip. Sume does not claim to mirror Alibaba's task id, so keep the Sume job id as your key.
Sources
Related posts
More in Developers
- WaveSpeed API v3 predictions/result vs Sume /v1/jobs/status/result
Porting from WaveSpeed's api/v3 submit and predictions/{id}/result to Sume: base URLs, Bearer auth, idempotency keys, status and result routes side by side.
- WaveSpeed polls at 2 seconds minimum; Sume: next_poll_after_seconds
WaveSpeed says start polling near 2 seconds and back off to 5-10. Sume returns next_poll_after_seconds so the server sets the pace. A runnable loop for each.
- Webhook handler slower than 10 seconds: duplicate Sume deliveries
Sume gives each webhook attempt 10 seconds, then retries up to 10 times, 30s apart. A slow handler that succeeds late still gets duplicates. Ack first.
- Webhook returns a 301: Stripe, OpenAI and Sume count it as failed
A redirecting webhook URL never delivers on Stripe, OpenAI or Sume run webhooks. Register the final URL, and check http to https and trailing slashes first.
Written by Sume