Synthesia video.completed webhook: the download URL is time-limited

Synthesia sends video.completed and video.failed, and its download URL is time-limited. Sume sends job.completed, job.failed and job.canceled with durable URLs.

4 min readSume
All posts

Synthesia's webhook has two event types, video.completed and video.failed, and the download field in the payload is a time-limited URL, available only when the status is complete. So copy the file to your own storage when the event arrives. Sume sends terminal events named job.completed, job.failed and job.canceled, and its media URLs do not expire.

Synthesia details are from its webhook events page, read 2026-10-01. Sume details are from the OpenAPI document, Format runs and Structured output.

What does the Synthesia payload contain?

The envelope has a type and a data object. The page lists status values in_progress, complete, error and rejected. The captions and thumbnail objects also carry time-limited URLs. The page does not give a lifetime for them, so do not assume one.

Webhook events and URL lifetime as documented, read 2026-10-01.
SynthesiaSume
Eventsvideo.completed, video.failedjob.completed, job.failed, job.canceled
Result URLTime-limited downloadDurable media.sume.com URL, does not expire
Expiry fieldNot given a lifetimeexpires_at is null for durable URLs
Progress callbacksOnly the two events listedNone; terminal-only, keep polling as backup

What does a Sume webhook delivery guarantee?

The OpenAPI description says delivery is terminal-only, with no progress or partial callbacks, and that you should keep status_url polling available as a backup. Handle a missed callback by polling, not by waiting. Retry behavior is in the webhook retry schedule.

Do Sume media URLs expire?

No. The docs say media URLs are durable media.sume.com HTTPS URLs that do not expire, are public to anyone holding the URL, and are served as public, max-age=31536000, immutable. You can store the URL against your own record. If you need per-customer access control, proxy or copy the file.

What should I store from each?

For Synthesia, store the video id and copy the file out of the time-limited URL promptly. For Sume, store the job id and the result URL. In both cases, make the handler idempotent: assume an event can arrive more than once, so a retry should not create a second record.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume