Skip to main content

Retail, Store event 1.0.0

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

Example video​

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

What it accepts​

An opening or an in-store event: a headline, the date, the time and the address, one to five things happening on the day, up to three giveaways, up to four pictures and a call to action. The clip is as long as the programme needs. metaData is the post's title, descriptions and hashtags and is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the invitation, when and where, the programme, the giveaways and the call to action.
clipData.kickertextup to 32 charactersKicker: A short line above the headline, such as Grand opening or Tasting evening.
clipData.headlinetextyesup to 60 charactersHeadline: What is happening, as the invitation says it.
clipData.sublinetextup to 100 charactersSubline: A sentence under the headline.
clipData.datetextup to 40 charactersDate: The day, as it should be read, such as Saturday 11 October.
clipData.timetextup to 32 charactersTime: When it starts and ends, as it should be read.
clipData.placetextup to 80 charactersAddress: Where it happens: the address, or the store and the town.
clipData.pictureslistat least 0, up to 4Pictures: Up to four pictures of the store or the event, any shape. They take turns behind the scenes; without any, the date is the picture.
clipData.pictures[]imagemedia:// file from the media library, alt text up to 120 charactersPicture: A picture of the store or the event.
clipData.programmeTitletextup to 32 charactersProgramme title: A heading over the programme, such as On the day. Left out, the programme has none.
clipData.activitieslistyesat least 1, up to 5Programme: One to five things happening, in order; the clip gets about a second and a half longer for each.
clipData.activities[]groupActivity
clipData.activities[].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: A line icon for it.
clipData.activities[].timetextup to 12 charactersTime: When it happens, such as 10:00 or All day.
clipData.activities[].titletextyesup to 40 charactersWhat: What happens.
clipData.activities[].detailtextup to 60 charactersDetail: One line more about it.
clipData.giveawaysTitletextup to 32 charactersGiveaways title: A heading over the giveaways, such as While stocks last.
clipData.giveawayslistat least 0, up to 3Giveaways: Up to three things guests get on the day. Left out, the clip goes from the programme straight to the call to action.
clipData.giveaways[]groupGiveaway
clipData.giveaways[].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: A line icon for it; a gift where none is chosen.
clipData.giveaways[].titletextyesup to 36 charactersWhat: What guests get.
clipData.giveaways[].detailtextup to 60 charactersDetail: Who gets it, or how.
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 invitation.
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.heroenumframed, fullPictures: Framed: the pictures in a frame beside or above the words. Full: the pictures fill the clip behind them.
clipData.look.ribbonbooleanRibbon cutting: A ribbon across the opening scene, cut as the clip begins: for an opening.
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 headline, such as Grand opening or Tasting evening."
},
"headline": {
"type": "string",
"maxLength": 60,
"title": "Headline",
"description": "What is happening, as the invitation says it."
},
"subline": {
"type": "string",
"maxLength": 100,
"title": "Subline",
"description": "A sentence under the headline."
},
"date": {
"type": "string",
"maxLength": 40,
"title": "Date",
"description": "The day, as it should be read, such as Saturday 11 October."
},
"time": {
"type": "string",
"maxLength": 32,
"title": "Time",
"description": "When it starts and ends, as it should be read."
},
"place": {
"type": "string",
"maxLength": 80,
"title": "Address",
"description": "Where it happens: the address, or the store and the town."
},
"pictures": {
"type": "array",
"items": {
"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": "A picture of the store or the event."
},
"minItems": 0,
"maxItems": 4,
"title": "Pictures",
"description": "Up to four pictures of the store or the event, any shape. They take turns behind the scenes; without any, the date is the picture."
},
"programmeTitle": {
"type": "string",
"maxLength": 32,
"title": "Programme title",
"description": "A heading over the programme, such as On the day. Left out, the programme has none."
},
"activities": {
"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": "A line icon for it.",
"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"
]
},
"time": {
"type": "string",
"maxLength": 12,
"title": "Time",
"description": "When it happens, such as 10:00 or All day."
},
"title": {
"type": "string",
"maxLength": 40,
"title": "What",
"description": "What happens."
},
"detail": {
"type": "string",
"maxLength": 60,
"title": "Detail",
"description": "One line more about it."
}
},
"required": [
"title"
],
"additionalProperties": false,
"title": "Activity"
},
"minItems": 1,
"maxItems": 5,
"title": "Programme",
"description": "One to five things happening, in order; the clip gets about a second and a half longer for each."
},
"giveawaysTitle": {
"type": "string",
"maxLength": 32,
"title": "Giveaways title",
"description": "A heading over the giveaways, such as While stocks last."
},
"giveaways": {
"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": "A line icon for it; a gift where none is chosen.",
"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"
]
},
"title": {
"type": "string",
"maxLength": 36,
"title": "What",
"description": "What guests get."
},
"detail": {
"type": "string",
"maxLength": 60,
"title": "Detail",
"description": "Who gets it, or how."
}
},
"required": [
"title"
],
"additionalProperties": false,
"title": "Giveaway"
},
"minItems": 0,
"maxItems": 3,
"title": "Giveaways",
"description": "Up to three things guests get on the day. Left out, the clip goes from the programme straight to the call to action."
},
"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 invitation."
},
"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"
]
},
"hero": {
"type": "string",
"enum": [
"framed",
"full"
],
"title": "Pictures",
"description": "Framed: the pictures in a frame beside or above the words. Full: the pictures fill the clip behind them.",
"enumNames": [
"In a frame",
"Filling the clip"
]
},
"ribbon": {
"type": "boolean",
"title": "Ribbon cutting",
"description": "A ribbon across the opening scene, cut as the clip begins: for an opening."
},
"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",
"activities"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the invitation, when and where, the programme, the giveaways and the call to action."
},
"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 headline, such as Grand opening or Tasting evening."
},
"headline": {
"type": "string",
"maxLength": 60,
"title": "Headline",
"description": "What is happening, as the invitation says it."
},
"subline": {
"type": "string",
"maxLength": 100,
"title": "Subline",
"description": "A sentence under the headline."
},
"date": {
"type": "string",
"maxLength": 40,
"title": "Date",
"description": "The day, as it should be read, such as Saturday 11 October."
},
"time": {
"type": "string",
"maxLength": 32,
"title": "Time",
"description": "When it starts and ends, as it should be read."
},
"place": {
"type": "string",
"maxLength": 80,
"title": "Address",
"description": "Where it happens: the address, or the store and the town."
},
"pictures": {
"type": "array",
"items": {
"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": "A picture of the store or the event."
},
"minItems": 0,
"maxItems": 4,
"title": "Pictures",
"description": "Up to four pictures of the store or the event, any shape. They take turns behind the scenes; without any, the date is the picture."
},
"programmeTitle": {
"type": "string",
"maxLength": 32,
"title": "Programme title",
"description": "A heading over the programme, such as On the day. Left out, the programme has none."
},
"activities": {
"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": "A line icon for it.",
"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"
]
},
"time": {
"type": "string",
"maxLength": 12,
"title": "Time",
"description": "When it happens, such as 10:00 or All day."
},
"title": {
"type": "string",
"maxLength": 40,
"title": "What",
"description": "What happens."
},
"detail": {
"type": "string",
"maxLength": 60,
"title": "Detail",
"description": "One line more about it."
}
},
"required": [
"title"
],
"additionalProperties": false,
"title": "Activity"
},
"minItems": 1,
"maxItems": 5,
"title": "Programme",
"description": "One to five things happening, in order; the clip gets about a second and a half longer for each."
},
"giveawaysTitle": {
"type": "string",
"maxLength": 32,
"title": "Giveaways title",
"description": "A heading over the giveaways, such as While stocks last."
},
"giveaways": {
"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": "A line icon for it; a gift where none is chosen.",
"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"
]
},
"title": {
"type": "string",
"maxLength": 36,
"title": "What",
"description": "What guests get."
},
"detail": {
"type": "string",
"maxLength": 60,
"title": "Detail",
"description": "Who gets it, or how."
}
},
"required": [
"title"
],
"additionalProperties": false,
"title": "Giveaway"
},
"minItems": 0,
"maxItems": 3,
"title": "Giveaways",
"description": "Up to three things guests get on the day. Left out, the clip goes from the programme straight to the call to action."
},
"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 invitation."
},
"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"
]
},
"hero": {
"type": "string",
"enum": [
"framed",
"full"
],
"title": "Pictures",
"description": "Framed: the pictures in a frame beside or above the words. Full: the pictures fill the clip behind them.",
"enumNames": [
"In a frame",
"Filling the clip"
]
},
"ribbon": {
"type": "boolean",
"title": "Ribbon cutting",
"description": "A ribbon across the opening scene, cut as the clip begins: for an opening."
},
"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 invitation, when and where, the programme, the giveaways and the call to action."
},
"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=Store%20event&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": "Grand opening",
"headline": "Our new Riverside market opens its doors this Saturday",
"subline": "A day of tastings, live music and treats for the whole family, with a few surprises at the till.",
"date": "Saturday 11 October",
"time": "8 am to 8 pm",
"place": "Harbour Street 24, Riverside, next to the ferry terminal",
"pictures": [
{
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
},
{
"alt": "Hills under an evening sky, drawn in layers",
"url": "media://example-image.svg"
},
{
"alt": "Clouds of red and blue ink in water",
"url": "media://example-image.png"
}
],
"programmeTitle": "On the day",
"activities": [
{
"icon": "store",
"time": "08:00",
"title": "Doors open with fresh coffee",
"detail": "The first hundred guests get a breakfast bag"
},
{
"icon": "utensils",
"time": "10:00",
"title": "Tastings at every counter",
"detail": "Local cheese, bread and fruit to try"
},
{
"icon": "croissant",
"time": "12:00",
"title": "Our bakers at work",
"detail": "See the sourdough made and shaped by hand"
},
{
"icon": "baby",
"time": "14:00",
"title": "Kids' corner with face painting",
"detail": "Crafts and games until four"
},
{
"icon": "ticket",
"time": "18:00",
"title": "The big prize draw",
"detail": "Win a year of weekly vegetable boxes"
}
],
"giveawaysTitle": "While stocks last",
"giveaways": [
{
"icon": "shopping-bag",
"title": "A free market tote bag",
"detail": "With every shop over 20 euros"
},
{
"icon": "sprout",
"title": "A herb pot for your kitchen",
"detail": "For the first two hundred shoppers"
},
{
"icon": "circle-percent",
"title": "10% off your next shop",
"detail": "A voucher for every guest at the door"
}
],
"cta": {
"label": "Plan your visit",
"detail": "greenleaf.example/riverside"
},
"disclaimer": "Giveaways while stocks last, one per household. The programme may change on the day.",
"look": {
"theme": "brand",
"pace": "standard",
"corners": "round",
"align": "start",
"hero": "framed",
"ribbon": true,
"logo": "auto"
}
},
"metaData": {
"title": "Grand opening of Greenleaf Market Riverside on Saturday",
"captionTiny": "Our new Riverside market opens on Saturday 11 October: tastings, bakers at work, a kids' corner and a prize draw. See you there!",
"captionShort": "Our new Riverside market opens its doors on Saturday 11 October, from 8 am to 8 pm. Come for fresh coffee at eight, tastings at every counter, our bakers at work, a kids' corner and the big prize draw at six. Free tote bags and herb pots while stocks last.",
"captionMedium": "Our new Riverside market opens its doors this Saturday, 11 October, from 8 am to 8 pm, on Harbour Street 24 next to the ferry terminal. Doors open at eight with fresh coffee and a breakfast bag for the first hundred guests. At ten there are tastings at every counter, at noon our bakers show how the sourdough is made, the kids' corner runs from two, and at six we draw the winner of a year of weekly vegetable boxes. Free tote bags, herb pots and vouchers while stocks last.",
"captionLong": "Our new Riverside market opens its doors this Saturday, 11 October, from 8 am to 8 pm, on Harbour Street 24 next to the ferry terminal. Doors open at eight with fresh coffee, and the first hundred guests get a breakfast bag. From ten there are tastings at every counter: local cheese, bread and fruit to try. At noon our bakers show how the sourdough is made and shaped by hand, the kids' corner with face painting, crafts and games runs from two until four, and at six we draw the winner of a year of weekly vegetable boxes. Every shop over 20 euros comes with a free market tote bag, the first two hundred shoppers take home a herb pot for the kitchen, and every guest gets a voucher for 10% off the next shop. Giveaways while stocks last, one per household. We look forward to meeting you.",
"hashtags": [
"grandopening",
"greenleafmarket",
"riverside",
"localfood"
]
}
}
}

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.