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
- Concatenate audio files by API: parts, and no top-level url
Sume Timeline audio concat needs a parts array and refuses a top-level url or ranges. Each operation accepts its own keys; mixing them returns a stable code.
- Split audio into segments by timestamps: url and ranges
Sume Timeline audio split needs a top-level url and 1 to 20 ranges. A range with end at or before start is refused; each segment gets its own audio_url.
- Image over video longer than the clip: compose's 300 s ceiling
Sume Timeline compose length comes from the video layer, capped at 300 seconds. Asking for more than the file clamps with a warning and the job still succeeds.
- compose_image_not_still and compose_video_not_video: the fix
Sume Timeline compose probes both URLs: image.url must be a still, video.url a video. Failing either refuses the request; off-host URLs need an import first.
Written by Sume