Templates & slots

Campaign templates are a published leaf plus a {{slot}} prompt — static-ads stills or ads-catalog-video — not Template Studio.

Last updated August 12, 2026

A campaign template is JSON on POST /campaigns/engage, not a Template Studio master.

{
  "baseSlug": "static-ads",
  "prompt": "Packshot of {{title}} — {{price}}. Clean seamless background.",
  "formatIds": ["square_11", "story_916"],
  "styleId": "ims_example"
}

Or video:

{
  "baseSlug": "ads-catalog-video",
  "prompt": "UGC-style clip of {{title}} on a kitchen counter. {{description}}",
  "aspectRatio": "9:16"
}

baseSlug is one of:

LeafOutputExtra fields
static-adsCatalog stills (Images Ad)formatIds (≤4; one variant each)
ads-catalog-videoCatalog video (Gemini→Kling)aspectRatio: 16:9 / 9:16 / 1:1

Optional styleId pins a Discover style (ims_*) on stills.

Slots

Tokens in prompt resolve at engage to literals on the stamped graph (self-contained members — no live feed lookup later).

TokenSource
{{id}}SKU
{{title}}title
{{description}}description (empty if omitted)
{{price}}verbatim price string
{{custom_label_0}}{{custom_label_4}}custom labels

Unknown tokens → campaign_unknown_slots (fail closed). There is no {?sale_price} conditional language, spoken formatter, or hook-variant rotation on this path.

Seeds

Members diversify Seedream/image seeds (FANOUT_SEED_STRIDE) so variants do not share one seed.

What is not here

AI Template Studio pitches, automatic slot extraction, robustness probes, hook variants, and template versioning were legacy kernel DCO. They are not on platform-api. Pick a Discover leaf and write the prompt template yourself — or generate one SKU in chat and copy the working brief into prompt with slots.