Holiday ad creative by phase: four videos, one bulk run
Meta splits the holidays into discovery, deals, gifting and fresh start. Queue one video per phase as a single Sume bulk run with a spend cap on each.

Meta's holiday guide names four phases, each with its own creative: discovery (October to early November), deals (Black Friday and Cyber Monday), gifting (December) and fresh start (late December and New Year). With Sume you can write one brief per phase and send all four as a single bulk run of one Format, each item with its own generation_spend_cap_usd.
Phase details are from Meta for Business (published 2026-08-11), read 2026-09-30. Sume details are from Bulk runs, the Format catalog and Calling a Format.
What does Meta recommend for each phase?
The guide's strategy line is "Repurpose first, produce second, refresh throughout". Mapped to one video brief each:
| Phase | Window | Creative Meta names |
|---|---|---|
| Discovery | October to early November | Short-form reels showcasing product inspiration |
| Deal | Black Friday / Cyber Monday | Carousel comparisons with prices; Stories with countdown timers and CTAs |
| Gifting | December | Emotional videos, gift guides, Stories showing real reactions |
| Fresh start | Late December / New Year | Aspirational reels; retargeting cart abandoners |
How do I queue four phases as one request?
A bulk request is a server-side queue of ordinary runs of one Format, up to 100 items, with concurrency from 1 to 16. The catalog lists sume-product-commercial and sume-slideshow as callable at the sume handle; the second suits turning existing product photos into a video, which matches Meta's "repurpose first". Each item needs at least one of instruction, input, previous_run_id or attachments.
const phases = ["discovery reel", "deal", "gift", "fresh start"];
const res = await fetch(
"https://api.sume.com/v1/formats/sume/sume-product-commercial/bulk-runs",
{
method: "POST",
headers: {
Authorization: "Bearer " + process.env.SUME_API_KEY,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
concurrency: 2,
items: phases.map((phase) => ({
instruction: "9:16 holiday product video for the " + phase + " phase",
generation_spend_cap_usd: 25,
})),
}),
},
);
console.log(res.status, await res.json());How do I keep each run from overspending?
Set generation_spend_cap_usd on each item. The docs say a run can never spend past its own effective cap, and 0 is rejected. A queue has no webhook of its own; poll the queue at GET /v1/format-run-queues/{queue_id}, and read each child run for its hosted MP4 (content_type: "video/mp4"). Mint a fresh Idempotency-Key per batch, since a replayed spent key returns the old queue.
A queue holds one Format. If the deal phase needs a different Format than the gifting phase, send two queues. For per-run caps in more depth, see Format run generation spend cap, and for the queue itself see Format bulk runs.
Sources
Related posts
- Sume Format bulk runs: queue up to 100 renders in one request
- Cap what one Format run can spend with generation_spend_cap_usd
- Demand Gen video specs: sizes, lengths, and the 4:5 cut
- Facebook Feed video captions: burn them onto a clip with no speech
- Cut one product video into feed cutdowns with the video-trim API
More in Use cases
- India's synthetic-media label rule: does routine editing count?
India's amended IT rules exclude routine editing, formatting and compression from synthetic media, and require a prominent label on the rest. What Sume offers.
- Instagram API: JPEG only, no MPO or JPS. Stills from a video frame
Meta's publishing guide says JPEG is the only image format and MPO and JPS are not supported. Sume video-frames returns jpeg by default, or png.
- Instagram carousel limit of 10: make 10 stills from one video
Meta's guide limits carousels to 10 images, videos or a mix, and 100 API posts per 24 hours. Sume video-frames takes up to 24 times per call, so pick 10.
- Instagram carousel crops to the first image: crop stills to match
Meta says carousel images are cropped based on the first image, default 1:1. Sume video-filter crop, then video-frames, gives stills that share one shape.
Written by Sume