Skip to main content

Retail, Single product 1.0.0

TemplateRetail, tpl_5bbd0ae3e79a
VariantSingle product
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length12 seconds

Example video​

The 1x1 cut of this version, drawn from its own worked example. Open the video on its own.

What it accepts​

One product as an ad: its name and picture, up to four benefits with icons, the price with an optional old price and the saving, and a call to action. A fixed twelve seconds. metaData is the post's title, descriptions and hashtags and is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the product, why it is worth having, what it costs and where to get it.
clipData.kickertextup to 32 charactersKicker: A short line above the name, such as New on our shelves.
clipData.headlinetextyesup to 48 charactersProduct: The product's name, the first thing read.
clipData.sublinetextup to 80 charactersLine under it: One line about it: what kind, where from, how much.
clipData.badgetextup to 14 charactersSticker: A short word on a round sticker on the product, such as Organic or Local.
clipData.pictureimagemedia:// file from the media library, alt text up to 120 charactersPicture: The product. Cut out or on a plain background stands on a stage; a photo fills a frame (see Look). Any shape works.
clipData.benefitslistat least 1, up to 4Benefits: One to four reasons to buy it, each with an icon, shown one after another.
clipData.benefits[]groupBenefit
clipData.benefits[].iconenumcheck, circle-check, x, arrow-right, arrow-up-right, plus, star, heart, thumbs-up, sparkles, zap, clock, calendar, map-pin, info, triangle-alert, lightbulb, target, award, crown, gem, flame, timer, list-checks, clipboard-check, badge-check, hand-heart, rocket, trophy, megaphone, bell, qr-code, ticket, gift, key-round, book-open, graduation-cap, house, phone, mail, globe, users, user, shopping-cart, shopping-bag, tag, truck, store, apple, coffee, croissant, carrot, fish, wine, pizza, utensils, baby, shirt, scissors, package, circle-percent, sprout, cake-sliceIcon: The benefit's icon. Left out, a tick.
clipData.benefits[].texttextyesup to 44 charactersBenefit: The benefit in a few words.
clipData.pricenumberyes2 decimalsPrice: What it costs, drawn on a hanging price tag.
clipData.oldPricenumber2 decimalsOld price: The usual price, struck through. The saving is worked out from the two: the percent rounded down, the amount exact.
clipData.unittextup to 20 charactersUnit: What the price is for, such as 450 g jar or per kg.
clipData.savingLabeltextup to 16 charactersSaving label: A word or two above the saving, such as You save.
clipData.currencytextup to 3 charactersCurrency: The ISO code prices are in, such as EUR, GBP, USD or CHF.
clipData.validitytextup to 48 charactersValid: How long the price holds, as it should be read.
clipData.ctagroupCall to action: The button at the end and the line under it, such as a web address, a handle or a phone number.
clipData.cta.labeltextyesup to 28 charactersButton: What the button says.
clipData.cta.detailtextup to 48 charactersLine under it: An address, a handle, a phone number.
clipData.disclaimertextup to 120 charactersSmall print: Terms that must be shown with the offer.
clipData.lookgroupLook: How the clip looks and moves. The same five switches in every format (theme, pace, corners, alignment, logo), plus this format's own. Leave any out for the format's default.
clipData.look.themeenumbrand, light, dark, boldTheme: Brand: your brand's own colours and background. Light or dark: a page tinted with your brand colour. Bold: your brand colour as the page.
clipData.look.paceenumcalm, standard, punchyPace: How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts.
clipData.look.cornersenumsquare, soft, roundCorners: The shape of cards, pictures and buttons.
clipData.look.alignenumstart, centreText alignment: Where the text lines up.
clipData.look.pictureStyleenumcutout, photoPicture: Cut out: the product stands on a stage of your brand colour. Photo: the picture fills a frame of its own, cropped to fit.
clipData.look.savingenumpercent, amount, noneSaving: How the saving is shown on the price tag where an old price is sent: in percent, as an amount, or not at all.
clipData.look.logoenumauto, freeLogo: The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.
metaDatagroupMeta data: Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data.
metaData.titletextup to 100 charactersTitle: Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes.
metaData.captionTinytextup to 200 charactersTiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionShorttextup to 500 charactersShort description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionMediumtextup to 1500 charactersMedium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok): Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionLongtextup to 4000 charactersLong description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.hashtagslistup to 15Hashtags: Written without the #. Up to 15, which every platform takes.
metaData.hashtags[]textup to 60 charactersHashtag

locales carries other languages: under each language code, the parts of clipData and metaData that differ, laid over the default, so a language with no copy still renders.

A picture is always a file from your media library: media:// followed by its id or its name. Anything the table does not list is refused, and so is anything over its limit, with a 422 that names the field.

The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"kicker": {
"type": "string",
"maxLength": 32,
"title": "Kicker",
"description": "A short line above the name, such as New on our shelves."
},
"headline": {
"type": "string",
"maxLength": 48,
"title": "Product",
"description": "The product's name, the first thing read."
},
"subline": {
"type": "string",
"maxLength": 80,
"title": "Line under it",
"description": "One line about it: what kind, where from, how much."
},
"badge": {
"type": "string",
"maxLength": 14,
"title": "Sticker",
"description": "A short word on a round sticker on the product, such as Organic or Local."
},
"picture": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Picture",
"description": "A file from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 120,
"title": "Alt text",
"description": "What the picture shows, for anyone who cannot see it."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Picture",
"description": "The product. Cut out or on a plain background stands on a stage; a photo fills a frame (see Look). Any shape works."
},
"benefits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"icon": {
"type": "string",
"enum": [
"check",
"circle-check",
"x",
"arrow-right",
"arrow-up-right",
"plus",
"star",
"heart",
"thumbs-up",
"sparkles",
"zap",
"clock",
"calendar",
"map-pin",
"info",
"triangle-alert",
"lightbulb",
"target",
"award",
"crown",
"gem",
"flame",
"timer",
"list-checks",
"clipboard-check",
"badge-check",
"hand-heart",
"rocket",
"trophy",
"megaphone",
"bell",
"qr-code",
"ticket",
"gift",
"key-round",
"book-open",
"graduation-cap",
"house",
"phone",
"mail",
"globe",
"users",
"user",
"shopping-cart",
"shopping-bag",
"tag",
"truck",
"store",
"apple",
"coffee",
"croissant",
"carrot",
"fish",
"wine",
"pizza",
"utensils",
"baby",
"shirt",
"scissors",
"package",
"circle-percent",
"sprout",
"cake-slice"
],
"title": "Icon",
"description": "The benefit's icon. Left out, a tick.",
"enumNames": [
"Check",
"Circle check",
"X",
"Arrow right",
"Arrow up right",
"Plus",
"Star",
"Heart",
"Thumbs up",
"Sparkles",
"Zap",
"Clock",
"Calendar",
"Map pin",
"Info",
"Triangle alert",
"Lightbulb",
"Target",
"Award",
"Crown",
"Gem",
"Flame",
"Timer",
"List checks",
"Clipboard check",
"Badge check",
"Hand heart",
"Rocket",
"Trophy",
"Megaphone",
"Bell",
"Qr code",
"Ticket",
"Gift",
"Key round",
"Book open",
"Graduation cap",
"House",
"Phone",
"Mail",
"Globe",
"Users",
"User",
"Shopping cart",
"Shopping bag",
"Tag",
"Truck",
"Store",
"Apple",
"Coffee",
"Croissant",
"Carrot",
"Fish",
"Wine",
"Pizza",
"Utensils",
"Baby",
"Shirt",
"Scissors",
"Package",
"Circle percent",
"Sprout",
"Cake slice"
]
},
"text": {
"type": "string",
"maxLength": 44,
"title": "Benefit",
"description": "The benefit in a few words."
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Benefit"
},
"minItems": 1,
"maxItems": 4,
"title": "Benefits",
"description": "One to four reasons to buy it, each with an icon, shown one after another."
},
"price": {
"type": "number",
"title": "Price",
"description": "What it costs, drawn on a hanging price tag."
},
"oldPrice": {
"type": "number",
"title": "Old price",
"description": "The usual price, struck through. The saving is worked out from the two: the percent rounded down, the amount exact."
},
"unit": {
"type": "string",
"maxLength": 20,
"title": "Unit",
"description": "What the price is for, such as 450 g jar or per kg."
},
"savingLabel": {
"type": "string",
"maxLength": 16,
"title": "Saving label",
"description": "A word or two above the saving, such as You save."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The ISO code prices are in, such as EUR, GBP, USD or CHF."
},
"validity": {
"type": "string",
"maxLength": 48,
"title": "Valid",
"description": "How long the price holds, as it should be read."
},
"cta": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 28,
"title": "Button",
"description": "What the button says."
},
"detail": {
"type": "string",
"maxLength": 48,
"title": "Line under it",
"description": "An address, a handle, a phone number."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Call to action",
"description": "The button at the end and the line under it, such as a web address, a handle or a phone number."
},
"disclaimer": {
"type": "string",
"maxLength": 120,
"title": "Small print",
"description": "Terms that must be shown with the offer."
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "Brand: your brand's own colours and background. Light or dark: a page tinted with your brand colour. Bold: your brand colour as the page.",
"enumNames": [
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts.",
"enumNames": [
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, pictures and buttons.",
"enumNames": [
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"At the start of the line",
"Centred"
]
},
"pictureStyle": {
"type": "string",
"enum": [
"cutout",
"photo"
],
"title": "Picture",
"description": "Cut out: the product stands on a stage of your brand colour. Photo: the picture fills a frame of its own, cropped to fit.",
"enumNames": [
"Cut out, on a stage",
"Photo, in a frame"
]
},
"saving": {
"type": "string",
"enum": [
"percent",
"amount",
"none"
],
"title": "Saving",
"description": "How the saving is shown on the price tag where an old price is sent: in percent, as an amount, or not at all.",
"enumNames": [
"In percent",
"As an amount",
"Not shown"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.",
"enumNames": [
"The style's own",
"As it is, no plate or crop"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves. The same five switches in every format (theme, pace, corners, alignment, logo), plus this format's own. Leave any out for the format's default."
}
},
"required": [
"headline",
"price"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the product, why it is worth having, what it costs and where to get it."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
},
"locales": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"kicker": {
"type": "string",
"maxLength": 32,
"title": "Kicker",
"description": "A short line above the name, such as New on our shelves."
},
"headline": {
"type": "string",
"maxLength": 48,
"title": "Product",
"description": "The product's name, the first thing read."
},
"subline": {
"type": "string",
"maxLength": 80,
"title": "Line under it",
"description": "One line about it: what kind, where from, how much."
},
"badge": {
"type": "string",
"maxLength": 14,
"title": "Sticker",
"description": "A short word on a round sticker on the product, such as Organic or Local."
},
"picture": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Picture",
"description": "A file from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 120,
"title": "Alt text",
"description": "What the picture shows, for anyone who cannot see it."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Picture",
"description": "The product. Cut out or on a plain background stands on a stage; a photo fills a frame (see Look). Any shape works."
},
"benefits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"icon": {
"type": "string",
"enum": [
"check",
"circle-check",
"x",
"arrow-right",
"arrow-up-right",
"plus",
"star",
"heart",
"thumbs-up",
"sparkles",
"zap",
"clock",
"calendar",
"map-pin",
"info",
"triangle-alert",
"lightbulb",
"target",
"award",
"crown",
"gem",
"flame",
"timer",
"list-checks",
"clipboard-check",
"badge-check",
"hand-heart",
"rocket",
"trophy",
"megaphone",
"bell",
"qr-code",
"ticket",
"gift",
"key-round",
"book-open",
"graduation-cap",
"house",
"phone",
"mail",
"globe",
"users",
"user",
"shopping-cart",
"shopping-bag",
"tag",
"truck",
"store",
"apple",
"coffee",
"croissant",
"carrot",
"fish",
"wine",
"pizza",
"utensils",
"baby",
"shirt",
"scissors",
"package",
"circle-percent",
"sprout",
"cake-slice"
],
"title": "Icon",
"description": "The benefit's icon. Left out, a tick.",
"enumNames": [
"Check",
"Circle check",
"X",
"Arrow right",
"Arrow up right",
"Plus",
"Star",
"Heart",
"Thumbs up",
"Sparkles",
"Zap",
"Clock",
"Calendar",
"Map pin",
"Info",
"Triangle alert",
"Lightbulb",
"Target",
"Award",
"Crown",
"Gem",
"Flame",
"Timer",
"List checks",
"Clipboard check",
"Badge check",
"Hand heart",
"Rocket",
"Trophy",
"Megaphone",
"Bell",
"Qr code",
"Ticket",
"Gift",
"Key round",
"Book open",
"Graduation cap",
"House",
"Phone",
"Mail",
"Globe",
"Users",
"User",
"Shopping cart",
"Shopping bag",
"Tag",
"Truck",
"Store",
"Apple",
"Coffee",
"Croissant",
"Carrot",
"Fish",
"Wine",
"Pizza",
"Utensils",
"Baby",
"Shirt",
"Scissors",
"Package",
"Circle percent",
"Sprout",
"Cake slice"
]
},
"text": {
"type": "string",
"maxLength": 44,
"title": "Benefit",
"description": "The benefit in a few words."
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Benefit"
},
"minItems": 1,
"maxItems": 4,
"title": "Benefits",
"description": "One to four reasons to buy it, each with an icon, shown one after another."
},
"price": {
"type": "number",
"title": "Price",
"description": "What it costs, drawn on a hanging price tag."
},
"oldPrice": {
"type": "number",
"title": "Old price",
"description": "The usual price, struck through. The saving is worked out from the two: the percent rounded down, the amount exact."
},
"unit": {
"type": "string",
"maxLength": 20,
"title": "Unit",
"description": "What the price is for, such as 450 g jar or per kg."
},
"savingLabel": {
"type": "string",
"maxLength": 16,
"title": "Saving label",
"description": "A word or two above the saving, such as You save."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The ISO code prices are in, such as EUR, GBP, USD or CHF."
},
"validity": {
"type": "string",
"maxLength": 48,
"title": "Valid",
"description": "How long the price holds, as it should be read."
},
"cta": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 28,
"title": "Button",
"description": "What the button says."
},
"detail": {
"type": "string",
"maxLength": 48,
"title": "Line under it",
"description": "An address, a handle, a phone number."
}
},
"additionalProperties": false,
"title": "Call to action",
"description": "The button at the end and the line under it, such as a web address, a handle or a phone number."
},
"disclaimer": {
"type": "string",
"maxLength": 120,
"title": "Small print",
"description": "Terms that must be shown with the offer."
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "Brand: your brand's own colours and background. Light or dark: a page tinted with your brand colour. Bold: your brand colour as the page.",
"enumNames": [
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts.",
"enumNames": [
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, pictures and buttons.",
"enumNames": [
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"At the start of the line",
"Centred"
]
},
"pictureStyle": {
"type": "string",
"enum": [
"cutout",
"photo"
],
"title": "Picture",
"description": "Cut out: the product stands on a stage of your brand colour. Photo: the picture fills a frame of its own, cropped to fit.",
"enumNames": [
"Cut out, on a stage",
"Photo, in a frame"
]
},
"saving": {
"type": "string",
"enum": [
"percent",
"amount",
"none"
],
"title": "Saving",
"description": "How the saving is shown on the price tag where an old price is sent: in percent, as an amount, or not at all.",
"enumNames": [
"In percent",
"As an amount",
"Not shown"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.",
"enumNames": [
"The style's own",
"As it is, no plate or crop"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves. The same five switches in every format (theme, pace, corners, alignment, logo), plus this format's own. Leave any out for the format's default."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the product, why it is worth having, what it costs and where to get it."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
}
},
"additionalProperties": false
},
"propertyNames": {
"enum": [
"aa",
"ab",
"ae",
"af",
"ak",
"am",
"an",
"ar",
"as",
"av",
"ay",
"az",
"ba",
"be",
"bg",
"bi",
"bm",
"bn",
"bo",
"br",
"bs",
"ca",
"ce",
"ch",
"co",
"cr",
"cs",
"cu",
"cv",
"cy",
"da",
"de",
"dv",
"dz",
"ee",
"el",
"en",
"eo",
"es",
"et",
"eu",
"fa",
"ff",
"fi",
"fj",
"fo",
"fr",
"fy",
"ga",
"gd",
"gl",
"gn",
"gu",
"gv",
"ha",
"he",
"hi",
"ho",
"hr",
"ht",
"hu",
"hy",
"hz",
"ia",
"id",
"ie",
"ig",
"ii",
"ik",
"io",
"is",
"it",
"iu",
"ja",
"jv",
"ka",
"kg",
"ki",
"kj",
"kk",
"kl",
"km",
"kn",
"ko",
"kr",
"ks",
"ku",
"kv",
"kw",
"ky",
"la",
"lb",
"lg",
"li",
"ln",
"lo",
"lt",
"lu",
"lv",
"mg",
"mh",
"mi",
"mk",
"ml",
"mn",
"mr",
"ms",
"mt",
"my",
"na",
"nb",
"nd",
"ne",
"ng",
"nl",
"nn",
"no",
"nr",
"nv",
"ny",
"oc",
"oj",
"om",
"or",
"os",
"pa",
"pi",
"pl",
"ps",
"pt",
"qu",
"rm",
"rn",
"ro",
"ru",
"rw",
"sa",
"sc",
"sd",
"se",
"sg",
"si",
"sk",
"sl",
"sm",
"sn",
"so",
"sq",
"sr",
"ss",
"st",
"su",
"sv",
"sw",
"ta",
"te",
"tg",
"th",
"ti",
"tk",
"tl",
"tn",
"to",
"tr",
"ts",
"tt",
"tw",
"ty",
"ug",
"uk",
"ur",
"uz",
"ve",
"vi",
"vo",
"wa",
"wo",
"xh",
"yi",
"yo",
"za",
"zh",
"zu",
"zh-CN",
"zh-TW",
"pt-BR"
]
}
}
},
"required": [
"clipData"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}

Ask Reelwire for the same document yourself, without signing in:

curl "http://localhost:4000/v1/formats/template/tpl_5bbd0ae3e79a?variant=Single%20product&version=1.0.0"

Delivery JSON​

Your own system sends this to one of your streams, POST /v1/stream, and every channel listening to that stream draws it with its template. data is the document described above; a stream with an empty field map passes it to the template unchanged. Try it first on POST /v1/stream/validate, which answers the same without publishing anything. Streams and feeds explains the rest, including how to map a document of your own shape instead.

{
"streamId": "st_your_stream_id",
"eventId": "01M2SQMKK3G1NVFXV31DCBVB95",
"occurredAt": "2026-09-23T07:00:00Z",
"locale": "en",
"data": {
"clipData": {
"kicker": "New on our shelves",
"headline": "Wildflower honey from the river meadows",
"subline": "Cold-extracted and never heated, from twelve family beekeepers",
"badge": "Organic",
"picture": {
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
},
"benefits": [
{
"icon": "sprout",
"text": "Cold-extracted, never heated"
},
{
"icon": "hand-heart",
"text": "From twelve family beekeepers"
},
{
"icon": "award",
"text": "Gold at the regional honey fair"
}
],
"price": 5.99,
"oldPrice": 7.49,
"unit": "450 g jar",
"savingLabel": "You save",
"currency": "EUR",
"validity": "Until Saturday 11 October",
"cta": {
"label": "Find it in store",
"detail": "greenleaf.example/honey"
},
"disclaimer": "While stocks last. Price per 450 g jar, 13.31 EUR per kg.",
"look": {
"theme": "brand",
"pace": "standard",
"corners": "round",
"align": "start",
"pictureStyle": "cutout",
"saving": "percent",
"logo": "auto"
}
},
"metaData": {
"title": "Wildflower honey from the river meadows, new at Greenleaf Market",
"captionTiny": "New on our shelves: cold-extracted wildflower honey from twelve family beekeepers, now 5.99 EUR a jar.",
"captionShort": "New on our shelves: wildflower honey from the river meadows, cold-extracted and never heated, from twelve family beekeepers. Gold at the regional honey fair, and 5.99 EUR a jar until Saturday 11 October, while stocks last.",
"captionMedium": "New on our shelves: wildflower honey from the river meadows. It is cold-extracted and never heated, so it keeps the taste of the meadows it comes from, and it is made by twelve family beekeepers from the region. It took gold at this year's regional honey fair. Until Saturday 11 October a 450 g jar is 5.99 EUR instead of 7.49 EUR, while stocks last. Find it in your Greenleaf Market.",
"captionLong": "New on our shelves: wildflower honey from the river meadows. It is cold-extracted and never heated, so it keeps the taste of the meadows it comes from, and it is made by twelve family beekeepers from the region, who bring it to our stores themselves. It took gold at this year's regional honey fair. Until Saturday 11 October a 450 g jar is 5.99 EUR instead of 7.49 EUR, while stocks last. Find it in your Greenleaf Market, next to our other local honeys and spreads.",
"hashtags": [
"greenleafmarket",
"localhoney",
"newin",
"regionalfood"
]
}
}
}

The delivery names no version: which build draws it is the channel's choice, the newest of its variant or the one it is pinned to. eventId is a ULID you make once per event: sending the same one again changes nothing. occurredAt is when the thing happened, not when you sent it. locale is the language of the text in data, and data.locales carries other languages beside it.