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:
| Leaf | Output | Extra fields |
|---|---|---|
static-ads | Catalog stills (Images Ad) | formatIds (≤4; one variant each) |
ads-catalog-video | Catalog 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).
| Token | Source |
|---|---|
{{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 DCO engage path. (Hook variant batteries are live on the directed video path: pass hookVariants 2–5 on a General Video engage to get that many first-scene hooks against one shared body.)
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, 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.
Hook variants are a partial exception: DCO-engage hook rotation is absent, but the directed video path supports hookVariants (2–5) — several first-scene hooks against one shared body, in a single engage.