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.

4 min readSume
All posts

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:

Meta for Business holiday guide, read 2026-09-30: https://www.facebook.com/business/news/holiday-advantage-is-creative-advantage
PhaseWindowCreative Meta names
DiscoveryOctober to early NovemberShort-form reels showcasing product inspiration
DealBlack Friday / Cyber MondayCarousel comparisons with prices; Stories with countdown timers and CTAs
GiftingDecemberEmotional videos, gift guides, Stories showing real reactions
Fresh startLate December / New YearAspirational 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

More in Use cases

All Use cases posts

Written by Sume