Tech and industry (Software and SaaS), Feature launch 1.0.0
| Template | Tech and industry (Software and SaaS), tpl_fe11839b9ed7 |
|---|---|
| Variant | Feature launch |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 13 seconds |
Example video
The 1x1 cut of this version, drawn from its own worked example. Open the video on its own.
What it accepts
A feature launch in a bento of rounded tiles: the feature, what it does and where it is available on a tile of your colour, your product's screen in a browser or a phone, one to three benefits lit in turn and a measured result as a big figure with how it was measured. Then the button and your presenter. The small print stays throughout. Seven seconds, 1.8 more a benefit. metaData is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: the section, the feature and what it does, the benefits, the measured result, the product's screen, the availability, the call to action and the small print. | |
clipData.section | text | up to 28 characters | Section: What the post is about, on a chip at the end of the header, such as Product update or What's new. | |
clipData.chip | text | up to 16 characters | Kind of news: On a chip with a pulsing dot above the feature's name, such as New, Beta or Improved. | |
clipData.version | text | up to 20 characters | Version: A version or a release, beside the chip in your monospace face (or your body face where your brand has none), such as v4.2. | |
clipData.feature | text | yes | up to 48 characters | Feature: The feature's name, the headline of the post. |
clipData.summary | text | up to 140 characters | What it does: What it does for the people who use it, in a sentence, the benefit first. | |
clipData.benefits | list | yes | at least 1, up to 3 | Benefits: One to three benefits, each on a tile of its own with an icon, a few words and a sentence, lit one after another. Where a frame is short of room, the tiles show their words and the one being read opens to its sentence. |
clipData.benefits[] | group | Benefit | ||
clipData.benefits[].title | text | yes | up to 36 characters | Benefit: The benefit in a few words. |
clipData.benefits[].detail | text | up to 100 characters | Sentence: What it means, in a sentence. | |
clipData.benefits[].icon | enum | zap, sparkles, rocket, workflow, puzzle, layers, boxes, plug-zap, code, cpu, database, server, cloud, bot, lock, key-round, shield-check, eye, gauge, timer, clock, calendar, bell, users, user, message-circle, mail, globe, smartphone, laptop, settings, wrench, chart-line, chart-column, chart-pie, trending-up, target, list-checks, clipboard-check, circle-check, file-text, credit-card, wallet, receipt, lightbulb, star, thumbs-up, share-2, palette, accessibility, leaf | Icon: A line icon on the benefit's small tile. Left out, the tile holds the benefit's number. | |
clipData.stat | group | Measured result: One result as a big figure on a tile of its own, counting up to exactly what you send, with how it was measured under it. A figure is never shown without how it was measured. | ||
clipData.stat.value | number | yes | 4 decimals | Figure: The figure, drawn exactly as sent with the decimals it was sent with. |
clipData.stat.unit | text | up to 16 characters | Unit: After the figure, such as hours, % or x. A unit starting with % or x stays on the figure. | |
clipData.stat.label | text | yes | up to 56 characters | What it is: What the figure is, in a few words. |
clipData.stat.basis | text | yes | up to 120 characters | How it was measured: The test or the data behind the figure and its period, such as Median of 1,240 beta workspaces, July to September 2026. |
clipData.screen | group | Product screen: Your product's own screen, shown in a browser window or a phone. Left out, a product drawn in shapes stands in, without words or figures. | ||
clipData.screen.picture | image | media:// file from the media library, alt text up to 120 characters | Screenshot: A screenshot of the feature, filling the screen from its top. A wide one for the browser, a tall one for the phone. | |
clipData.screen.device | enum | browser, phone | Device: What the screenshot is shown in. | |
clipData.screen.address | text | up to 48 characters | Address: The address in the browser's bar, such as app.flowbase.example. Not shown on a phone. | |
clipData.screen.closeUp | group | Close-up: A part of the screenshot to go in on while the benefits are read, in percent of the screenshot: where it starts from the left and the top, and how wide and tall it is. | ||
clipData.screen.closeUp.x | number | yes | from 0, to 100, 1 decimals | From the left: Where the part starts, in percent of the screenshot's width. |
clipData.screen.closeUp.y | number | yes | from 0, to 100, 1 decimals | From the top: Where the part starts, in percent of the screenshot's height. |
clipData.screen.closeUp.width | number | yes | from 1, to 100, 1 decimals | Width: How wide the part is, in percent of the screenshot's width. |
clipData.screen.closeUp.height | number | yes | from 1, to 100, 1 decimals | Height: How tall the part is, in percent of the screenshot's height. |
clipData.availability | text | up to 64 characters | Availability: Who can use it and from when, beside a tick under the sentence and on a chip at the end. Say what limits it here: the plans, a beta, an add-on. | |
clipData.cta | group | Call 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.label | text | yes | up to 28 characters | Button: What the button says. |
clipData.cta.detail | text | up to 48 characters | Line under it: An address, a handle, an app, a phone number. | |
clipData.footnote | text | up to 300 characters | Small print: What must be said with the post, shown from the first frame to the last above your brand's footer line: trademarks, whether prices include tax, the conditions of a figure. A long one is set smaller, never cut. | |
clipData.look | group | Look: How the clip looks and moves. The same six switches in every format (theme, pace, corners, alignment, logo, logo size). Leave any out for the package's default: the brand's colours, standard pace, round corners, text at the start. | ||
clipData.look.theme | enum | brand, light, dark, bold | Theme: 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.pace | enum | calm, standard, punchy | Pace: How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts. | |
clipData.look.corners | enum | square, soft, round | Corners: The shape of cards, pictures and buttons. | |
clipData.look.align | enum | start, centre | Text alignment: Where the text lines up. | |
clipData.look.logo | enum | auto, free | Logo: The style's own: the logo on a small plate 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. | |
clipData.look.logoSize | enum | auto, small, large | Logo size: Standard is the style's own size. Small draws the logo a fifth smaller, with its plate. Large draws it a quarter larger wherever the style has room for it, and at the standard size where it has none. | |
metaData | group | Meta 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.title | text | up to 100 characters | Title: 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.captionTiny | text | up to 200 characters | Tiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionShort | text | up to 500 characters | Short description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionMedium | text | up to 1500 characters | Medium 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.captionLong | text | up to 4000 characters | Long description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.hashtags | list | up to 15 | Hashtags: Written without the #. Up to 15, which every platform takes. | |
metaData.hashtags[] | text | up to 60 characters | Hashtag |
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 400
schema_validation error that names the field.
The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"section": {
"type": "string",
"maxLength": 28,
"title": "Section",
"description": "What the post is about, on a chip at the end of the header, such as Product update or What's new."
},
"chip": {
"type": "string",
"maxLength": 16,
"title": "Kind of news",
"description": "On a chip with a pulsing dot above the feature's name, such as New, Beta or Improved."
},
"version": {
"type": "string",
"maxLength": 20,
"title": "Version",
"description": "A version or a release, beside the chip in your monospace face (or your body face where your brand has none), such as v4.2."
},
"feature": {
"type": "string",
"maxLength": 48,
"title": "Feature",
"description": "The feature's name, the headline of the post."
},
"summary": {
"type": "string",
"maxLength": 140,
"title": "What it does",
"description": "What it does for the people who use it, in a sentence, the benefit first."
},
"benefits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 36,
"title": "Benefit",
"description": "The benefit in a few words."
},
"detail": {
"type": "string",
"maxLength": 100,
"title": "Sentence",
"description": "What it means, in a sentence."
},
"icon": {
"type": "string",
"enum": [
"zap",
"sparkles",
"rocket",
"workflow",
"puzzle",
"layers",
"boxes",
"plug-zap",
"code",
"cpu",
"database",
"server",
"cloud",
"bot",
"lock",
"key-round",
"shield-check",
"eye",
"gauge",
"timer",
"clock",
"calendar",
"bell",
"users",
"user",
"message-circle",
"mail",
"globe",
"smartphone",
"laptop",
"settings",
"wrench",
"chart-line",
"chart-column",
"chart-pie",
"trending-up",
"target",
"list-checks",
"clipboard-check",
"circle-check",
"file-text",
"credit-card",
"wallet",
"receipt",
"lightbulb",
"star",
"thumbs-up",
"share-2",
"palette",
"accessibility",
"leaf"
],
"title": "Icon",
"description": "A line icon on the benefit's small tile. Left out, the tile holds the benefit's number.",
"enumNames": [
"Zap",
"Sparkles",
"Rocket",
"Workflow",
"Puzzle",
"Layers",
"Boxes",
"Plug zap",
"Code",
"Cpu",
"Database",
"Server",
"Cloud",
"Bot",
"Lock",
"Key round",
"Shield check",
"Eye",
"Gauge",
"Timer",
"Clock",
"Calendar",
"Bell",
"Users",
"User",
"Message circle",
"Mail",
"Globe",
"Smartphone",
"Laptop",
"Settings",
"Wrench",
"Chart line",
"Chart column",
"Chart pie",
"Trending up",
"Target",
"List checks",
"Clipboard check",
"Circle check",
"File text",
"Credit card",
"Wallet",
"Receipt",
"Lightbulb",
"Star",
"Thumbs up",
"Share 2",
"Palette",
"Accessibility",
"Leaf"
]
}
},
"required": [
"title"
],
"additionalProperties": false,
"title": "Benefit"
},
"minItems": 1,
"maxItems": 3,
"title": "Benefits",
"description": "One to three benefits, each on a tile of its own with an icon, a few words and a sentence, lit one after another. Where a frame is short of room, the tiles show their words and the one being read opens to its sentence."
},
"stat": {
"type": "object",
"properties": {
"value": {
"type": "number",
"title": "Figure",
"description": "The figure, drawn exactly as sent with the decimals it was sent with."
},
"unit": {
"type": "string",
"maxLength": 16,
"title": "Unit",
"description": "After the figure, such as hours, % or x. A unit starting with % or x stays on the figure."
},
"label": {
"type": "string",
"maxLength": 56,
"title": "What it is",
"description": "What the figure is, in a few words."
},
"basis": {
"type": "string",
"maxLength": 120,
"title": "How it was measured",
"description": "The test or the data behind the figure and its period, such as Median of 1,240 beta workspaces, July to September 2026."
}
},
"required": [
"value",
"label",
"basis"
],
"additionalProperties": false,
"title": "Measured result",
"description": "One result as a big figure on a tile of its own, counting up to exactly what you send, with how it was measured under it. A figure is never shown without how it was measured."
},
"screen": {
"type": "object",
"properties": {
"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": "Screenshot",
"description": "A screenshot of the feature, filling the screen from its top. A wide one for the browser, a tall one for the phone."
},
"device": {
"type": "string",
"enum": [
"browser",
"phone"
],
"title": "Device",
"description": "What the screenshot is shown in.",
"enumNames": [
"Browser window",
"Phone"
]
},
"address": {
"type": "string",
"maxLength": 48,
"title": "Address",
"description": "The address in the browser's bar, such as app.flowbase.example. Not shown on a phone."
},
"closeUp": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "From the left",
"description": "Where the part starts, in percent of the screenshot's width."
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "From the top",
"description": "Where the part starts, in percent of the screenshot's height."
},
"width": {
"type": "number",
"minimum": 1,
"maximum": 100,
"title": "Width",
"description": "How wide the part is, in percent of the screenshot's width."
},
"height": {
"type": "number",
"minimum": 1,
"maximum": 100,
"title": "Height",
"description": "How tall the part is, in percent of the screenshot's height."
}
},
"required": [
"x",
"y",
"width",
"height"
],
"additionalProperties": false,
"title": "Close-up",
"description": "A part of the screenshot to go in on while the benefits are read, in percent of the screenshot: where it starts from the left and the top, and how wide and tall it is."
}
},
"additionalProperties": false,
"title": "Product screen",
"description": "Your product's own screen, shown in a browser window or a phone. Left out, a product drawn in shapes stands in, without words or figures."
},
"availability": {
"type": "string",
"maxLength": 64,
"title": "Availability",
"description": "Who can use it and from when, beside a tick under the sentence and on a chip at the end. Say what limits it here: the plans, a beta, an add-on."
},
"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, an app, 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."
},
"footnote": {
"type": "string",
"maxLength": 300,
"title": "Small print",
"description": "What must be said with the post, shown from the first frame to the last above your brand's footer line: trademarks, whether prices include tax, the conditions of a figure. A long one is set smaller, never cut."
},
"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"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on a small plate 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"
]
},
"logoSize": {
"type": "string",
"enum": [
"auto",
"small",
"large"
],
"title": "Logo size",
"description": "Standard is the style's own size. Small draws the logo a fifth smaller, with its plate. Large draws it a quarter larger wherever the style has room for it, and at the standard size where it has none.",
"enumNames": [
"Standard",
"Small",
"Large"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves. The same six switches in every format (theme, pace, corners, alignment, logo, logo size). Leave any out for the package's default: the brand's colours, standard pace, round corners, text at the start."
}
},
"required": [
"feature",
"benefits"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the feature and what it does, the benefits, the measured result, the product's screen, the availability, the call to action and the small print."
},
"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": {
"section": {
"type": "string",
"maxLength": 28,
"title": "Section",
"description": "What the post is about, on a chip at the end of the header, such as Product update or What's new."
},
"chip": {
"type": "string",
"maxLength": 16,
"title": "Kind of news",
"description": "On a chip with a pulsing dot above the feature's name, such as New, Beta or Improved."
},
"version": {
"type": "string",
"maxLength": 20,
"title": "Version",
"description": "A version or a release, beside the chip in your monospace face (or your body face where your brand has none), such as v4.2."
},
"feature": {
"type": "string",
"maxLength": 48,
"title": "Feature",
"description": "The feature's name, the headline of the post."
},
"summary": {
"type": "string",
"maxLength": 140,
"title": "What it does",
"description": "What it does for the people who use it, in a sentence, the benefit first."
},
"benefits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 36,
"title": "Benefit",
"description": "The benefit in a few words."
},
"detail": {
"type": "string",
"maxLength": 100,
"title": "Sentence",
"description": "What it means, in a sentence."
},
"icon": {
"type": "string",
"enum": [
"zap",
"sparkles",
"rocket",
"workflow",
"puzzle",
"layers",
"boxes",
"plug-zap",
"code",
"cpu",
"database",
"server",
"cloud",
"bot",
"lock",
"key-round",
"shield-check",
"eye",
"gauge",
"timer",
"clock",
"calendar",
"bell",
"users",
"user",
"message-circle",
"mail",
"globe",
"smartphone",
"laptop",
"settings",
"wrench",
"chart-line",
"chart-column",
"chart-pie",
"trending-up",
"target",
"list-checks",
"clipboard-check",
"circle-check",
"file-text",
"credit-card",
"wallet",
"receipt",
"lightbulb",
"star",
"thumbs-up",
"share-2",
"palette",
"accessibility",
"leaf"
],
"title": "Icon",
"description": "A line icon on the benefit's small tile. Left out, the tile holds the benefit's number.",
"enumNames": [
"Zap",
"Sparkles",
"Rocket",
"Workflow",
"Puzzle",
"Layers",
"Boxes",
"Plug zap",
"Code",
"Cpu",
"Database",
"Server",
"Cloud",
"Bot",
"Lock",
"Key round",
"Shield check",
"Eye",
"Gauge",
"Timer",
"Clock",
"Calendar",
"Bell",
"Users",
"User",
"Message circle",
"Mail",
"Globe",
"Smartphone",
"Laptop",
"Settings",
"Wrench",
"Chart line",
"Chart column",
"Chart pie",
"Trending up",
"Target",
"List checks",
"Clipboard check",
"Circle check",
"File text",
"Credit card",
"Wallet",
"Receipt",
"Lightbulb",
"Star",
"Thumbs up",
"Share 2",
"Palette",
"Accessibility",
"Leaf"
]
}
},
"required": [
"title"
],
"additionalProperties": false,
"title": "Benefit"
},
"minItems": 1,
"maxItems": 3,
"title": "Benefits",
"description": "One to three benefits, each on a tile of its own with an icon, a few words and a sentence, lit one after another. Where a frame is short of room, the tiles show their words and the one being read opens to its sentence."
},
"stat": {
"type": "object",
"properties": {
"value": {
"type": "number",
"title": "Figure",
"description": "The figure, drawn exactly as sent with the decimals it was sent with."
},
"unit": {
"type": "string",
"maxLength": 16,
"title": "Unit",
"description": "After the figure, such as hours, % or x. A unit starting with % or x stays on the figure."
},
"label": {
"type": "string",
"maxLength": 56,
"title": "What it is",
"description": "What the figure is, in a few words."
},
"basis": {
"type": "string",
"maxLength": 120,
"title": "How it was measured",
"description": "The test or the data behind the figure and its period, such as Median of 1,240 beta workspaces, July to September 2026."
}
},
"additionalProperties": false,
"title": "Measured result",
"description": "One result as a big figure on a tile of its own, counting up to exactly what you send, with how it was measured under it. A figure is never shown without how it was measured."
},
"screen": {
"type": "object",
"properties": {
"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": "Screenshot",
"description": "A screenshot of the feature, filling the screen from its top. A wide one for the browser, a tall one for the phone."
},
"device": {
"type": "string",
"enum": [
"browser",
"phone"
],
"title": "Device",
"description": "What the screenshot is shown in.",
"enumNames": [
"Browser window",
"Phone"
]
},
"address": {
"type": "string",
"maxLength": 48,
"title": "Address",
"description": "The address in the browser's bar, such as app.flowbase.example. Not shown on a phone."
},
"closeUp": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "From the left",
"description": "Where the part starts, in percent of the screenshot's width."
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "From the top",
"description": "Where the part starts, in percent of the screenshot's height."
},
"width": {
"type": "number",
"minimum": 1,
"maximum": 100,
"title": "Width",
"description": "How wide the part is, in percent of the screenshot's width."
},
"height": {
"type": "number",
"minimum": 1,
"maximum": 100,
"title": "Height",
"description": "How tall the part is, in percent of the screenshot's height."
}
},
"additionalProperties": false,
"title": "Close-up",
"description": "A part of the screenshot to go in on while the benefits are read, in percent of the screenshot: where it starts from the left and the top, and how wide and tall it is."
}
},
"additionalProperties": false,
"title": "Product screen",
"description": "Your product's own screen, shown in a browser window or a phone. Left out, a product drawn in shapes stands in, without words or figures."
},
"availability": {
"type": "string",
"maxLength": 64,
"title": "Availability",
"description": "Who can use it and from when, beside a tick under the sentence and on a chip at the end. Say what limits it here: the plans, a beta, an add-on."
},
"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, an app, 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."
},
"footnote": {
"type": "string",
"maxLength": 300,
"title": "Small print",
"description": "What must be said with the post, shown from the first frame to the last above your brand's footer line: trademarks, whether prices include tax, the conditions of a figure. A long one is set smaller, never cut."
},
"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"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on a small plate 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"
]
},
"logoSize": {
"type": "string",
"enum": [
"auto",
"small",
"large"
],
"title": "Logo size",
"description": "Standard is the style's own size. Small draws the logo a fifth smaller, with its plate. Large draws it a quarter larger wherever the style has room for it, and at the standard size where it has none.",
"enumNames": [
"Standard",
"Small",
"Large"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves. The same six switches in every format (theme, pace, corners, alignment, logo, logo size). Leave any out for the package's default: the brand's colours, standard pace, round corners, text at the start."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the feature and what it does, the benefits, the measured result, the product's screen, the availability, the call to action and the small print."
},
"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_fe11839b9ed7?variant=Feature%20launch&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": {
"section": "Product update",
"chip": "New",
"version": "v4.2",
"feature": "Workflow automations",
"summary": "Turn the steps your team repeats every day into rules that run on their own, in every project.",
"benefits": [
{
"icon": "zap",
"title": "Set up in minutes",
"detail": "Pick a trigger, add conditions and choose what happens. No code needed."
},
{
"icon": "workflow",
"title": "Works across your tools",
"detail": "Start a rule from email, chat or a form, and act in Slack, GitHub or Jira."
},
{
"icon": "shield-check",
"title": "Safe by default",
"detail": "Every run is logged, and admins decide who can build and switch on rules."
}
],
"stat": {
"unit": "hours",
"basis": "Median across 1,240 beta workspaces, July to September 2026",
"label": "saved per person every week",
"value": 6
},
"screen": {
"device": "browser",
"address": "app.flowbase.example/automations",
"picture": {
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
}
},
"availability": "Available today on the Pro and Business plans",
"cta": {
"label": "Try automations",
"detail": "flowbase.example/automations"
},
"footnote": "Flowbase is a trademark of Flowbase Inc. Automations are included in the Pro and Business plans. Prices exclude VAT.",
"look": {
"logo": "auto",
"pace": "standard",
"align": "start",
"theme": "brand",
"corners": "round",
"logoSize": "auto"
}
},
"metaData": {
"title": "New in Flowbase: workflow automations",
"captionTiny": "New in Flowbase v4.2: workflow automations. Turn the steps your team repeats into rules that run on their own.",
"captionShort": "New in Flowbase v4.2: workflow automations. Pick a trigger, add conditions and choose what happens, with no code. Rules start from email, chat or a form and act in Slack, GitHub or Jira, and every run is logged. Available today on the Pro and Business plans.",
"captionMedium": "New in Flowbase v4.2: workflow automations. Turn the steps your team repeats every day into rules that run on their own, in every project. Pick a trigger, add conditions and choose what happens, with no code needed. Rules start from email, chat or a form and act in the tools you already use, such as Slack, GitHub or Jira. Every run is logged, and admins decide who can build and switch on rules. In our beta, people saved a median of 6 hours a week (1,240 workspaces, July to September 2026). Available today on the Pro and Business plans.",
"captionLong": "New in Flowbase v4.2: workflow automations. Turn the steps your team repeats every day into rules that run on their own, in every project. Pick a trigger, add conditions and choose what happens, with no code needed: triage new tickets, escalate the ones that wait too long, or thank a customer who left five stars. Rules start from email, chat or a form and act in the tools you already use, such as Slack, GitHub or Jira. Every run is logged, so you can see what a rule did and why, and admins decide who can build and switch on rules. In our beta, people saved a median of 6 hours a week (1,240 workspaces, July to September 2026). Automations are available today on the Pro and Business plans; open Automations in the sidebar to build your first rule, or start from one of the templates. Prices exclude VAT.",
"hashtags": [
"productupdate",
"automation",
"saas",
"nocode",
"productivity"
]
}
}
}
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.