Tech and industry (Software and SaaS), Release notes 1.0.0
| Template | Tech and industry (Software and SaaS), tpl_fe11839b9ed7 |
|---|---|
| Variant | Release notes |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 14 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 release as a changelog post in a bento of tiles: the version and its date on a tile of your colour with the headline, then each change on a tile with its chip (New, Improved, Fixed), read in turn and paged rather than shrunk, counts by chip and an optional screenshot. Then the button and your presenter. The small print stays throughout. 5.5 seconds, 1.4 more a change. metaData is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: the section, the version, its date and the headline, the changes with their chips, the screenshot, 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 Release notes or Changelog. | |
clipData.version | text | yes | up to 20 characters | Version: The release's version, on a chip in your monospace face (or your body face where your brand has none), such as v4.3. Where no headline is sent, it is the headline. |
clipData.dateLabel | text | up to 24 characters | Before the date: A word set before the release date, such as Released or Rolling out from. | |
clipData.date | datetime | yes | Release date: The day the release came out or rolls out, written beside the version in the channel's language, such as 14 October 2026. A release always carries its date. | |
clipData.headline | text | up to 64 characters | Headline: What the release is about, in a few words, the headline of the post. Left out, the version is the headline. | |
clipData.summary | text | up to 140 characters | Line under it: What the release brings, in a sentence, the benefit first. | |
clipData.changes | list | yes | at least 1, up to 12 | Changes: One to twelve changes, each on a tile with its chip, read one after another in the order sent. Where they do not all fit, they turn pages, as even as they can be, rather than being set smaller. From three changes on, small tiles count them by their chip's word. |
clipData.changes[] | group | Change | ||
clipData.changes[].kind | enum | new, improved, fixed, removed | Kind: How the chip is drawn. Left out, the chip is a quiet tint of your text colour. | |
clipData.changes[].tag | text | yes | up to 16 characters | Chip: The word on the chip, such as New, Improved, Fixed or Beta. |
clipData.changes[].title | text | yes | up to 56 characters | What changed: What changed, in a few words. |
clipData.changes[].detail | text | up to 120 characters | Sentence: What it means for the people who use it, in a sentence. | |
clipData.screen | group | Product screen: A screenshot of the release, shown in a browser window or a phone beside or above the changes. Left out, the changes take its room. | ||
clipData.screen.picture | image | media:// file from the media library, alt text up to 120 characters | Screenshot: A screenshot of what is new, 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 changes 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 gets the release and when, on a chip at the end, such as Rolling out to every workspace this week. | |
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, which plans include a change, whether prices include tax. 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 Release notes or Changelog."
},
"version": {
"type": "string",
"maxLength": 20,
"title": "Version",
"description": "The release's version, on a chip in your monospace face (or your body face where your brand has none), such as v4.3. Where no headline is sent, it is the headline."
},
"dateLabel": {
"type": "string",
"maxLength": 24,
"title": "Before the date",
"description": "A word set before the release date, such as Released or Rolling out from."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Release date",
"description": "The day the release came out or rolls out, written beside the version in the channel's language, such as 14 October 2026. A release always carries its date."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "What the release is about, in a few words, the headline of the post. Left out, the version is the headline."
},
"summary": {
"type": "string",
"maxLength": 140,
"title": "Line under it",
"description": "What the release brings, in a sentence, the benefit first."
},
"changes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"new",
"improved",
"fixed",
"removed"
],
"title": "Kind",
"description": "How the chip is drawn. Left out, the chip is a quiet tint of your text colour.",
"enumNames": [
"New: filled in your brand colour",
"Improved: a tint of your brand colour",
"Fixed: your brand's up colour",
"Removed: your brand's down colour"
]
},
"tag": {
"type": "string",
"maxLength": 16,
"title": "Chip",
"description": "The word on the chip, such as New, Improved, Fixed or Beta."
},
"title": {
"type": "string",
"maxLength": 56,
"title": "What changed",
"description": "What changed, in a few words."
},
"detail": {
"type": "string",
"maxLength": 120,
"title": "Sentence",
"description": "What it means for the people who use it, in a sentence."
}
},
"required": [
"tag",
"title"
],
"additionalProperties": false,
"title": "Change"
},
"minItems": 1,
"maxItems": 12,
"title": "Changes",
"description": "One to twelve changes, each on a tile with its chip, read one after another in the order sent. Where they do not all fit, they turn pages, as even as they can be, rather than being set smaller. From three changes on, small tiles count them by their chip's word."
},
"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 what is new, 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 changes 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": "A screenshot of the release, shown in a browser window or a phone beside or above the changes. Left out, the changes take its room."
},
"availability": {
"type": "string",
"maxLength": 64,
"title": "Availability",
"description": "Who gets the release and when, on a chip at the end, such as Rolling out to every workspace this week."
},
"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, which plans include a change, whether prices include tax. 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": [
"version",
"date",
"changes"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the version, its date and the headline, the changes with their chips, the screenshot, 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 Release notes or Changelog."
},
"version": {
"type": "string",
"maxLength": 20,
"title": "Version",
"description": "The release's version, on a chip in your monospace face (or your body face where your brand has none), such as v4.3. Where no headline is sent, it is the headline."
},
"dateLabel": {
"type": "string",
"maxLength": 24,
"title": "Before the date",
"description": "A word set before the release date, such as Released or Rolling out from."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Release date",
"description": "The day the release came out or rolls out, written beside the version in the channel's language, such as 14 October 2026. A release always carries its date."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "What the release is about, in a few words, the headline of the post. Left out, the version is the headline."
},
"summary": {
"type": "string",
"maxLength": 140,
"title": "Line under it",
"description": "What the release brings, in a sentence, the benefit first."
},
"changes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"new",
"improved",
"fixed",
"removed"
],
"title": "Kind",
"description": "How the chip is drawn. Left out, the chip is a quiet tint of your text colour.",
"enumNames": [
"New: filled in your brand colour",
"Improved: a tint of your brand colour",
"Fixed: your brand's up colour",
"Removed: your brand's down colour"
]
},
"tag": {
"type": "string",
"maxLength": 16,
"title": "Chip",
"description": "The word on the chip, such as New, Improved, Fixed or Beta."
},
"title": {
"type": "string",
"maxLength": 56,
"title": "What changed",
"description": "What changed, in a few words."
},
"detail": {
"type": "string",
"maxLength": 120,
"title": "Sentence",
"description": "What it means for the people who use it, in a sentence."
}
},
"required": [
"tag",
"title"
],
"additionalProperties": false,
"title": "Change"
},
"minItems": 1,
"maxItems": 12,
"title": "Changes",
"description": "One to twelve changes, each on a tile with its chip, read one after another in the order sent. Where they do not all fit, they turn pages, as even as they can be, rather than being set smaller. From three changes on, small tiles count them by their chip's word."
},
"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 what is new, 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 changes 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": "A screenshot of the release, shown in a browser window or a phone beside or above the changes. Left out, the changes take its room."
},
"availability": {
"type": "string",
"maxLength": 64,
"title": "Availability",
"description": "Who gets the release and when, on a chip at the end, such as Rolling out to every workspace this week."
},
"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, which plans include a change, whether prices include tax. 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 version, its date and the headline, the changes with their chips, the screenshot, 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=Release%20notes&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": "Release notes",
"version": "v4.3",
"dateLabel": "Released",
"date": "2026-10-14T09:00:00+02:00",
"headline": "Test runs and rule templates",
"summary": "Try a rule before it goes live, start from a template, and find anything faster.",
"changes": [
{
"tag": "New",
"kind": "new",
"title": "Test runs for automations",
"detail": "Run a rule on a sample ticket and see every step before you switch it on."
},
{
"tag": "New",
"kind": "new",
"title": "Rule templates",
"detail": "Start from twelve ready-made rules for triage, follow-ups and handovers."
},
{
"tag": "Improved",
"kind": "improved",
"title": "Search as you type",
"detail": "Results appear while you type, in workspaces of any size."
},
{
"tag": "Improved",
"kind": "improved",
"title": "Bulk edit in the inbox",
"detail": "Select up to 500 items and change the status, owner or due date at once."
},
{
"tag": "Fixed",
"kind": "fixed",
"title": "Due dates across time zones",
"detail": "A due date set in one time zone no longer moves by a day for colleagues elsewhere."
},
{
"tag": "Fixed",
"kind": "fixed",
"title": "Unread counts after sign-in",
"detail": "Counts refresh straight away when you sign in again."
}
],
"screen": {
"device": "browser",
"address": "app.flowbase.example/automations",
"picture": {
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
}
},
"availability": "Rolling out to every workspace this week",
"cta": {
"label": "See what's new",
"detail": "flowbase.example/changelog"
},
"footnote": "Flowbase is a trademark of Flowbase Inc. Rule templates are included in the Pro and Business plans.",
"look": {
"logo": "auto",
"pace": "standard",
"align": "start",
"theme": "brand",
"corners": "round",
"logoSize": "auto"
}
},
"metaData": {
"title": "Flowbase v4.3: test runs and rule templates",
"captionTiny": "Flowbase v4.3 is out: test runs for automations, rule templates, search as you type and six fixes and improvements in all.",
"captionShort": "Flowbase v4.3 is out. Test a rule on a sample ticket before it goes live, start from twelve rule templates, see search results as you type and bulk edit up to 500 inbox items at once. Plus fixes for due dates across time zones and unread counts. Rolling out this week.",
"captionMedium": "Flowbase v4.3 is out, released on 14 October 2026. New: test runs for automations, so you can run a rule on a sample ticket and see every step before you switch it on, and rule templates, twelve ready-made rules for triage, follow-ups and handovers. Improved: search now shows results as you type in workspaces of any size, and bulk edit in the inbox changes the status, owner or due date of up to 500 items at once. Fixed: due dates no longer move by a day for colleagues in other time zones, and unread counts refresh as soon as you sign in. Rolling out to every workspace this week.",
"captionLong": "Flowbase v4.3 is out, released on 14 October 2026, and it is all about trying things safely and finding them faster. New: test runs for automations. Run any rule on a sample ticket and see every step it would take, with the conditions it checked, before you switch it on. Also new: rule templates, twelve ready-made rules for triage, follow-ups and handovers that you can use as they are or change to fit. Improved: search now shows results as you type, in workspaces of any size, and bulk edit in the inbox lets you change the status, owner or due date of up to 500 items at once. Fixed: a due date set in one time zone no longer moves by a day for colleagues elsewhere, and unread counts refresh straight away when you sign in again. v4.3 is rolling out to every workspace this week; rule templates are included in the Pro and Business plans. The full changelog is at flowbase.example/changelog.",
"hashtags": [
"releasenotes",
"changelog",
"productupdate",
"saas",
"automation"
]
}
}
}
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.