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.

To skip polling on a Wan 3.0 job, add callback_url to the POST /v1/videos body. It must be an HTTPS URL; when the job reaches a terminal state Sume POSTs to it with a signed JSON body, and you then fetch the clip from the job.
Wan 3.0 clips run up to 30 seconds, and the docs say video generation can take from 30 seconds to several minutes, so a callback fits. The fields come from the Video generation and Webhooks docs, read 2026-09-29.
How do I set the callback?
curl -X POST https://api.sume.com/v1/videos \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: wan-callback-001" \
-d '{
"model": "wan-3.0",
"prompt": "A time-lapse of clouds crossing a mountain lake",
"duration": 20,
"resolution": "720p",
"callback_url": "https://example.com/hooks/sume-video"
}'What does Sume send to my endpoint?
Sume's standard job webhook envelope, not OpenRouter's video.generation.* events. It signs the raw JSON body and adds two headers.
| Header | Use |
|---|---|
x-sume-webhook-timestamp | Signed timestamp; reject stale ones |
x-sume-webhook-signature | sume-v1= signature over <timestamp>.<raw_body> |
x-sume-webhook-secret-fingerprint | Which signing secret was used |
How do I verify it?
Compute an HMAC SHA 256 of <timestamp>.<raw_body> with your signing secret and compare it with the sume-v1= entry, using the raw bytes, not a re-serialized body. Refuse to verify at all when the secret is empty. The Webhooks docs have a full verifier; read them before you ship one.
What if the callback never arrives?
Keep the job id and poll GET /v1/videos/{jobId} as a backstop, and send an Idempotency-Key on submit so a retry returns the original job rather than a second billed clip. A failed job carries an error field to read.
Sources
Related posts
More in Developers
- 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 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.
- Which MCP server lets Claude Code or Cursor generate video and images?
MCP servers that let Claude Code and Cursor make video and images: Sume, fal, Replicate, Runway, Higgsfield. Endpoints, sign-in, billing, setup.
- 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.
Written by Sume