Instagram Live Ads promo: make a 9:16 teaser clip with Sume

Instagram Live Ads started a general rollout on 2026-09-29. Make the 9:16 teaser that sends people to the stream with POST /v1/videos, 3 to 10 seconds.

5 min readSume
All posts

To promote an Instagram Live with a teaser, generate a vertical clip with POST /v1/videos using model: "sume/auto", aspect_ratio: "9:16" and a duration between 3 and 10 seconds. A trade tracker lists Instagram Live Ads as rolling out to everyone from 2026-09-29 (read 2026-10-06), so a short announcement clip is a sensible first asset. This post does not cover Meta's creative rules for the format, so check them on Meta's side before you upload; this post covers only what Sume produces.

Sume facts: Video generation: the /v1/videos API. Platform date: Social media platform updates, October 2026 (read 2026-10-06).

What does sume/auto give you?

sume/auto keeps to one fixed envelope, and Sume does not name the model behind it. It takes text, first-frame images or reference images, with 3 to 10 seconds per clip (8 by default), 360p, 720p, 1080p or 4K, in 16:9 or 9:16, and native synced audio that is always on. Sending generate_audio: false fails, so leave the field out. Anything outside those limits fails closed with 400 unsupported_capability instead of being quietly routed elsewhere.

That fits a teaser well. It is short, vertical and has sound. It does not fit a 15-second or 30-second announcement in one clip; for those, name a catalog model whose supported_durations allow it, which GET /v1/videos/models lists, or join two clips with Timeline.

The request

Submit, then poll. The submit returns 202 with an id; poll GET /v1/videos/{id} until it is completed, then read GET /v1/videos/{id}/content, which redirects to the file. Be specific in the prompt about what is on screen at second 1: this is a thumb-stopper, not a trailer.

import json, os, time, urllib.request

H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
     "Content-Type": "application/json"}

def call(method, url, body=None):
    data = json.dumps(body).encode() if body else None
    req = urllib.request.Request(url, data=data, headers=H, method=method)
    with urllib.request.urlopen(req) as r:
        return json.load(r)

job = call("POST", "https://api.sume.com/v1/videos", {
    "model": "sume/auto",
    "prompt": "Handheld phone shot of a host smiling at a counter of "
              "ceramic mugs, quick push-in, warm light, 'Going live' energy",
    "aspect_ratio": "9:16",
    "duration": 6,
    "resolution": "720p",
})
while job["status"] not in ("completed", "failed", "cancelled"):
    time.sleep(5)
    job = call("GET", "https://api.sume.com/v1/videos/" + job["id"])
print(job["status"])

What should the teaser say?

Keep the clip about when and what, and put the exact time and handle in the post copy and overlay, not in generated text. Generated video text is the weakest part of any model, so add words afterwards: the caption cues path burns authored text at set times with no speech to text, which is covered in Instagram Live ad clip: add an offer line with caption cues. If you already have a product photo, pin it as a frame_images first frame rather than describing the product in words.

sume/auto limits from Sume's video generation page, read 2026-10-06.
SettingAllowedDefault
duration3 to 10 seconds8
resolution360p, 720p, 1080p, 4K720p
aspect_ratio16:9 or 9:16Set 9:16 for a teaser
generate_audioAlways on; false is rejectedLeave unset
Image inputsfirst frame, last frame, referencesNone

Before you publish

Watch it with the sound on and off. If the audio carries a line you need, caption it. If the clip looks like a stock ad rather than your host, switch to references of the real set or person instead of describing them. A teaser that does not look like your Live will lose the viewer on arrival.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume