TikTok PULL_FROM_URL times out after one hour: keep the URL live
TikTok pulls a PULL_FROM_URL file at up to 100 Mbps and times out one hour after it starts. The URL must stay live; a Sume durable URL has no expiry.

With PULL_FROM_URL, TikTok's server downloads your file, and the media transfer guide says its ingress bandwidth can reach 100 Mbps and that the download times out one hour after it is initiated. The URL must stay accessible for that whole time. A Sume durable media.sume.com URL has a null expires_at, so it does not expire; a signed URL might. Expiry is only half of it: TikTok also requires you to have verified the host, which a media.sume.com URL cannot be.
TikTok's numbers are from its media transfer guide; Sume's URL facts from Structured output and Video generation, read 2026-10-01. Note that TikTok must also verify URL ownership, covered in url_ownership_unverified.
What are the one-hour rules?
| Item | Rule |
|---|---|
| PULL_FROM_URL download | Times out one hour after the task is initiated |
| URL availability | Must stay accessible for the whole download |
| Ingress bandwidth | Can reach 100 Mbps |
FILE_UPLOAD upload_url | Valid for one hour after issuance |
| URL scheme | https, no redirect |
Can a Sume URL expire mid-download?
The structured output docs say expires_at is null for durable media.sume.com URLs, which is the normal case, and is populated only when a signed URL is returned. The files are served as public, max-age=31536000, immutable and do not expire. The video job status also returns unsigned_urls, which the video docs use as the download source. If you ever hold a signed URL with an expires_at, check that it is later than your start time plus an hour.
Is one hour enough for my file?
At the 100 Mbps ceiling TikTok quotes, an hour is far more than a short clip needs, so the real risk is an unreachable URL, not size. Time is lost to slow or rate-limited hosts, so use a host that serves the file steadily for the whole window. TikTok says the limit is the ceiling; your host speed may be lower.
When should I use FILE_UPLOAD instead?
Pick FILE_UPLOAD when you cannot verify the domain or want to avoid the hosting dependency. Its upload_url is valid for one hour after issuance, and you must finish the upload in that range. Download the video from the Sume job first, then upload in chunks as in TikTok chunk sizes.
Sources
Related posts
More in Developers
- Fade out music at the end of a video: two fades, two caps
In Timeline 1.0, soundtrack.fade_out_seconds fades only the music bed (max 10 s). output.fade_out_seconds fades the whole render (0 to 5 s). Which to use.
- Crossfade longer than 1 second: the Timeline transition limit
Timeline 1.0 transitions are capped at 1 second and 50 percent of the shorter neighbouring clip. Longer ones return transition_too_long. What to do instead.
- Cancelling a Trigger.dev run does not cancel the Sume job
Trigger.dev cancel stops the task and its child runs. A Sume job that already started generating cannot be cancelled, and still bills. Store the job id.
- Trigger.dev public tokens show Sume progress without the API key
Hand the browser a Trigger.dev read-only public token for one run while the task holds the Sume key. The Sume key never leaves the server.
Written by Sume