Meta ads bulk upload: push AI videos to your ad account

Bulk upload videos to Meta Ads by API: POST each file_url to the ad account's advideos edge, wait for status ready, then use the video_id in ads.

5 min readSume
All posts

To bulk upload videos to Meta Ads by API, send one POST /act_{ad_account_id}/advideos request per video to Meta's Marketing API, either with a file_url that Meta fetches or with the file itself as source. Each call returns a video ID. Wait until the video's status is ready, then use that ID as video_id in your ad creatives. Graph API batch requests can group up to 50 of these calls.

The Meta details come from its Ad Videos reference, Video Status and Batch Requests pages, read on 2026-09-28. This post covers the Marketing API route, not the Ads Manager screens. Sume has no Meta Ads connector: the steps below are plain HTTPS calls from your own script, and the Sume side comes from Format runs.

How do I upload a video to a Meta ad account by API?

Posting to the ad account's advideos edge creates a video in that account's library. The parameters that matter for a bulk upload:

From Meta's Ad Videos reference, read 2026-09-28.
Parameter or codeWhat it means
file_urlA URL Meta downloads the video from
sourceThe video itself, encoded as form data
upload_phasestart, transfer, finish or cancel, used during a chunked upload
nameThe name of the video in the library
titleThe name of the video being uploaded; under 255 characters
Error 389Unable to fetch video file from URL
Error 352The video file is in a format Meta doesn't support
curl -X POST "https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/advideos" \
  -F "file_url=https://media.sume.com/artifacts/..." \
  -F "name=hook-variant-01" \
  -F "access_token=$META_ACCESS_TOKEN"

How do I get the video upload status?

Meta processes each video after upload. Its Video API docs read the status with GET /{video-id}?fields=status. Wait for video_status to be ready before you build a creative; processing means it isn't ready yet, and error means processing failed. The Video Status object also carries processing_progress, a percentage from 0 to 100.

How do I upload many videos at once?

Loop over your files and call advideos once per video, or group the calls in Graph API batch requests:

  • A batch holds at most 50 requests, and each call inside it counts separately toward rate limits.
  • A large batch can time out and return partial results: successful requests answer 200, the rest come back null, and you can retry those.
  • Meta's Ad Videos reference lists error 80004 for too many calls to one ad account: wait a bit and try again.
  • Keep your Meta access token and your Sume API key on a server, never in browser code. Sume's docs say browser and mobile clients should call your backend, which attaches the key.

Can file_url point at a Sume video?

It can point at a Format run's files. Sume's docs describe them as durable media.sume.com HTTPS URLs that do not expire and are public to anyone holding the URL, so fetching them needs no Sume key. A bulk run takes 1 to 100 items at a concurrency of 1 to 16, and each finished child lists its files in artifacts, so each URL can go to Meta once that child completes.

Don't hand Meta a GET /v1/videos/{jobId}/content URL: it needs your Sume API key, and in current code it answers with a 302 redirect to the file. Pass the file URL the redirect points to instead; Download a generated video from the Sume API shows how. Whether Meta accepts a given file for a placement depends on its ad specs, covered in Meta video ad specs.

How do I use the uploaded video in an ad?

In the creative's video data, video_id takes the ID of a video in the ad account's video library, and image_url can set a thumbnail, which Meta saves into the ad account's image library (Ad Creative Video Data). Making the ad variants themselves is covered in UGC-style video ads for products at scale.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume