TikTok FILE_UPLOAD vs PULL_FROM_URL for a Sume video file

Use PULL_FROM_URL for server-side files on a domain you verified, FILE_UPLOAD for device files. A media.sume.com link is not your domain, so re-host or upload.

5 min readSume
All posts

Pick PULL_FROM_URL when your server holds the file and the URL sits on a domain or URL prefix you have verified in TikTok's developer dashboard. Pick FILE_UPLOAD when you have the bytes and want to send them in chunks. A Sume result link on media.sume.com is not a domain you verified, so download the file first and use one of those two paths.

The two methods differ in who moves the bytes, which limits apply, and what can go wrong.

What do the TikTok pages say about each?

The upload guide lists FILE_UPLOAD for local video files (MP4 with H.264) and PULL_FROM_URL for video on your verified domain. Photos only support URL-based upload. The Content Sharing Guidelines add: use PULL_FROM_URL for server-side content, and FILE_UPLOAD for content from the user's device only.

The Media Transfer Guide adds the rules for each.

FILE_UPLOAD vs PULL_FROM_URL (read 2026-10-02)
QuestionFILE_UPLOADPULL_FROM_URL
Intended forContent from the user's deviceServer-side content
Where the file livesYou send the bytes in chunksHTTPS URL on a verified domain or prefix
Chunks5 to 64 MB each, final up to 128 MB, 1 to 1000Not applicable
Time limitUpload URL valid for 1 hourURL must stay reachable up to one hour

Why can't I pull directly from media.sume.com?

You must verify ownership of the domain or URL prefix in the TikTok developer dashboard before using PULL_FROM_URL. You do not own media.sume.com, so you cannot verify it, and a pull pointing there fails the ownership check. Our post on the ownership error shows the symptom.

The way out is a copy step: when a Sume job finishes, read the result through jobs and results, download the MP4 on your server, and either serve it from your own verified host or push it with FILE_UPLOAD.

How do I plan the chunks for FILE_UPLOAD?

Sizes under 5 MB go as a single chunk. Otherwise each chunk is at least 5 MB and at most 64 MB, and the last one may reach 128 MB. The helper below takes 64 MB chunks and lets the final one absorb the remainder, which keeps it inside the 128 MB allowance. It returns the numbers you then place in TikTok's init request under the names its reference uses.

MB = 1024 * 1024

def chunk_plan(size):
    if size < 5 * MB:
        return size, 1
    n = max(1, size // (64 * MB))
    if n > 1000:
        raise ValueError("more than 1000 chunks")
    return 64 * MB, n

for s in (3 * MB, 40 * MB, 200 * MB):
    print(s // MB, "MB ->", chunk_plan(s))

Which should I choose for an AI-video pipeline?

If you already host files on a verified domain, PULL_FROM_URL is simpler: no chunking, and TikTok fetches the file. If you only have a worker with a downloaded MP4, FILE_UPLOAD avoids standing up a public host. Both keep Sume out of the TikTok conversation: Sume produces the file and your app owns the rest.

Remember the one-hour windows. Start the upload promptly after you create it, and keep a pulled URL alive for at least that long.

Checklist

Before choosing a method:

  • Is the file on a domain you verified? Then consider PULL_FROM_URL.
  • Is it only on media.sume.com? Download it first.
  • Is it a photo? Only URL-based upload is supported.
  • Is it larger than 64 MB? Plan multiple chunks.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume