Wan 3.0 polling every 15 seconds vs Sume's 30-second poll

Alibaba recommends polling Wan 3.0 every 15 seconds. Sume's video guide uses 30 seconds and a signed callback_url. Which to pick and why.

5 min readSume
All posts

Alibaba recommends polling a Wan 3.0 task every 15 seconds; Sume's video guide uses a 30-second wait between polls and also offers callback_url so you can skip polling. If you call wan-3.0 through Sume, a 30-second poll plus a callback is the documented pattern, and exponential backoff is what the jobs page asks for.

Alibaba's number is from its Wan3.0 Video Generation API Reference, read 2026-10-02. Sume's are from Video generation, Jobs and results and Webhooks.

Why do the two recommendations differ?

They answer different questions. Alibaba's 15 seconds is advice for hitting its own task endpoint, where the task id lives 24 hours. Sume's 30 seconds is advice from the video guide, which says video generation typically takes 30 seconds to several minutes and warns against excessive API calls. Neither is a hard limit, and I found no per-endpoint rate figure for the status route in the pages I read.

A 5-second Wan 3.0 clip and a 30-second one will not take the same time, so a fixed interval wastes calls on long jobs and delays short ones. That is why the jobs page says to use exponential backoff rather than a constant sleep.

Polling advice (read 2026-10-02)
SourceInterval adviceTerminal states
Alibaba, Wan 3.015 secondsSUCCEEDED, FAILED
Sume video guide30 seconds between pollscompleted, failed, cancelled
Sume jobs pageexponential backoffcompleted, failed, canceled

What does a sensible loop look like on Sume?

Start at 10 seconds, double up to a 60-second cap, and stop on a terminal status. Never resubmit the paid request because your own process timed out; the jobs page says so explicitly. Reuse the job id.

import os, time, requests

H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
j = requests.post("https://api.sume.com/v1/videos", headers={**H, "Idempotency-Key": "wan-poll-001"},
    json={"model": "wan-3.0", "prompt": "Rain on a neon street, 6 seconds", "duration": 6}).json()

delay = 10
while True:
    s = requests.get(j["polling_url"], headers=H).json()
    print(s["status"], delay)
    if s["status"] in ("completed", "failed", "cancelled"):
        break
    time.sleep(delay)
    delay = min(delay * 2, 60)

When should I use callback_url instead?

When a server can receive HTTPS. Pass callback_url on /v1/videos and Sume POSTs a terminal event, signed with HMAC SHA-256 over the timestamp and raw body in the x-sume-webhook-timestamp and x-sume-webhook-signature headers when signing is configured. The URL must be public HTTPS; localhost, private-network and non-HTTPS URLs are rejected. Sume sends terminal events only, no progress ticks.

Keep a polling job as backup. The webhooks page says the callback is stored, delivery can fail, and the polling fallback should stay in place. See Wan 3.0 callback URL for the receiving side.

Is there a polling difference for agents using MCP?

Yes. Remote MCP clients use jobs_wait, which holds for at most 55 seconds per call, default 50, and tells you to retry on wait_slice_expired. That is a held request, not a poll interval, and it is documented on the jobs page. The fixed numbers above apply to plain HTTP clients.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume