Skip to main content

Tech and industry (Software and SaaS), Security advisory 1.0.0

TemplateTech and industry (Software and SaaS), tpl_fe11839b9ed7
VariantSecurity advisory
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length14 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 calm, factual security advisory in a bento of tiles: the identifier (a CVE or your own), the date, what is affected and what happened on a tile of your colour, the severity as your word with an optional score and a meter, the affected and fixed versions in your monospace face, then up to four numbered steps. Then the button and presenter. 8.9 seconds, 1.6 more a step. metaData is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the section, the identifier and the date, what is affected and what happened, the severity, the affected and fixed versions, the steps, the call to action and the small print.
clipData.sectiontextup to 28 charactersSection: What the post is about, on a chip at the end of the header, such as Security advisory.
clipData.identifiertextyesup to 32 charactersIdentifier: The advisory's identifier, a CVE or your own, on a chip in your monospace face (or your body face where your brand has none). An advisory always carries its identifier.
clipData.dateLabeltextup to 24 charactersBefore the date: A word set before the date, such as Published or Updated.
clipData.datedatetimeDate: The day the advisory was published or last updated, written beside the identifier in the channel's language.
clipData.titletextyesup to 72 charactersWhat is affected: What the vulnerability is and where, in a few words, the headline of the post.
clipData.summarytextup to 160 charactersWhat happened: What happened, in a line or two, plainly: what could happen, to whom, and whether it was used.
clipData.severitygroupyesSeverity: How severe it is, on a tile beside the title: your word on a chip, an optional score exactly as sent and a meter of four steps. Every tone comes from your brand's colours: its down colour for critical and high.
clipData.severity.labeltextyesup to 16 charactersSeverity: The severity in your words, such as Critical, High, Medium or Low.
clipData.severity.rankenumcritical, high, medium, low, infoRank: How the chip is drawn and how far the meter is lit: critical four steps, high three, medium two, low one, information none.
clipData.severity.scorenumberfrom 0, to 10, 1 decimalsScore: A score, such as a CVSS base score, drawn exactly as sent with the decimals it was sent with.
clipData.severity.scaletextup to 32 charactersScale: What the score is, under it, such as CVSS 3.1 base score.
clipData.affectedgroupyesAffected versions: The versions that have the flaw, marked with a cross in a tint of your brand's down colour.
clipData.affected.labeltextup to 24 charactersLabel: A few words over the versions, such as Affected.
clipData.affected.versionstextyesup to 60 charactersVersions: The product and its versions, in your monospace face (or your body face where your brand has none).
clipData.fixedgroupFixed in: The versions that fix it, marked with a tick in your brand's up colour, and on a chip at the end.
clipData.fixed.labeltextup to 24 charactersLabel: A few words over the versions, such as Fixed in.
clipData.fixed.versionstextyesup to 60 charactersVersions: The product and its versions, in your monospace face (or your body face where your brand has none).
clipData.stepslistyesat least 1, up to 4What to do: One to four steps, each on a numbered tile, lit one after another.
clipData.steps[]textup to 120 charactersStep: One step, in a sentence.
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, an app, a phone number.
clipData.footnotetextup to 300 charactersSmall print: What must be said with the post, shown from the first frame to the last above your brand's footer line: who needs no action, who to contact, trademarks. A long one is set smaller, never cut.
clipData.lookgroupLook: 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.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.logoenumauto, freeLogo: 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.logoSizeenumauto, small, largeLogo 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.
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 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 Security advisory."
},
"identifier": {
"type": "string",
"maxLength": 32,
"title": "Identifier",
"description": "The advisory's identifier, a CVE or your own, on a chip in your monospace face (or your body face where your brand has none). An advisory always carries its identifier."
},
"dateLabel": {
"type": "string",
"maxLength": 24,
"title": "Before the date",
"description": "A word set before the date, such as Published or Updated."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "The day the advisory was published or last updated, written beside the identifier in the channel's language."
},
"title": {
"type": "string",
"maxLength": 72,
"title": "What is affected",
"description": "What the vulnerability is and where, in a few words, the headline of the post."
},
"summary": {
"type": "string",
"maxLength": 160,
"title": "What happened",
"description": "What happened, in a line or two, plainly: what could happen, to whom, and whether it was used."
},
"severity": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 16,
"title": "Severity",
"description": "The severity in your words, such as Critical, High, Medium or Low."
},
"rank": {
"type": "string",
"enum": [
"critical",
"high",
"medium",
"low",
"info"
],
"title": "Rank",
"description": "How the chip is drawn and how far the meter is lit: critical four steps, high three, medium two, low one, information none.",
"enumNames": [
"Critical: your down colour, filled",
"High: a tint of your down colour",
"Medium: outlined",
"Low: a quiet tint",
"Information: a tint of your brand colour"
]
},
"score": {
"type": "number",
"minimum": 0,
"maximum": 10,
"title": "Score",
"description": "A score, such as a CVSS base score, drawn exactly as sent with the decimals it was sent with."
},
"scale": {
"type": "string",
"maxLength": 32,
"title": "Scale",
"description": "What the score is, under it, such as CVSS 3.1 base score."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Severity",
"description": "How severe it is, on a tile beside the title: your word on a chip, an optional score exactly as sent and a meter of four steps. Every tone comes from your brand's colours: its down colour for critical and high."
},
"affected": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 24,
"title": "Label",
"description": "A few words over the versions, such as Affected."
},
"versions": {
"type": "string",
"maxLength": 60,
"title": "Versions",
"description": "The product and its versions, in your monospace face (or your body face where your brand has none)."
}
},
"required": [
"versions"
],
"additionalProperties": false,
"title": "Affected versions",
"description": "The versions that have the flaw, marked with a cross in a tint of your brand's down colour."
},
"fixed": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 24,
"title": "Label",
"description": "A few words over the versions, such as Fixed in."
},
"versions": {
"type": "string",
"maxLength": 60,
"title": "Versions",
"description": "The product and its versions, in your monospace face (or your body face where your brand has none)."
}
},
"required": [
"versions"
],
"additionalProperties": false,
"title": "Fixed in",
"description": "The versions that fix it, marked with a tick in your brand's up colour, and on a chip at the end."
},
"steps": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"title": "Step",
"description": "One step, in a sentence."
},
"minItems": 1,
"maxItems": 4,
"title": "What to do",
"description": "One to four steps, each on a numbered tile, lit one after another."
},
"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: who needs no action, who to contact, trademarks. 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": [
"identifier",
"title",
"severity",
"affected",
"steps"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the identifier and the date, what is affected and what happened, the severity, the affected and fixed versions, the steps, 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 Security advisory."
},
"identifier": {
"type": "string",
"maxLength": 32,
"title": "Identifier",
"description": "The advisory's identifier, a CVE or your own, on a chip in your monospace face (or your body face where your brand has none). An advisory always carries its identifier."
},
"dateLabel": {
"type": "string",
"maxLength": 24,
"title": "Before the date",
"description": "A word set before the date, such as Published or Updated."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "The day the advisory was published or last updated, written beside the identifier in the channel's language."
},
"title": {
"type": "string",
"maxLength": 72,
"title": "What is affected",
"description": "What the vulnerability is and where, in a few words, the headline of the post."
},
"summary": {
"type": "string",
"maxLength": 160,
"title": "What happened",
"description": "What happened, in a line or two, plainly: what could happen, to whom, and whether it was used."
},
"severity": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 16,
"title": "Severity",
"description": "The severity in your words, such as Critical, High, Medium or Low."
},
"rank": {
"type": "string",
"enum": [
"critical",
"high",
"medium",
"low",
"info"
],
"title": "Rank",
"description": "How the chip is drawn and how far the meter is lit: critical four steps, high three, medium two, low one, information none.",
"enumNames": [
"Critical: your down colour, filled",
"High: a tint of your down colour",
"Medium: outlined",
"Low: a quiet tint",
"Information: a tint of your brand colour"
]
},
"score": {
"type": "number",
"minimum": 0,
"maximum": 10,
"title": "Score",
"description": "A score, such as a CVSS base score, drawn exactly as sent with the decimals it was sent with."
},
"scale": {
"type": "string",
"maxLength": 32,
"title": "Scale",
"description": "What the score is, under it, such as CVSS 3.1 base score."
}
},
"additionalProperties": false,
"title": "Severity",
"description": "How severe it is, on a tile beside the title: your word on a chip, an optional score exactly as sent and a meter of four steps. Every tone comes from your brand's colours: its down colour for critical and high."
},
"affected": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 24,
"title": "Label",
"description": "A few words over the versions, such as Affected."
},
"versions": {
"type": "string",
"maxLength": 60,
"title": "Versions",
"description": "The product and its versions, in your monospace face (or your body face where your brand has none)."
}
},
"additionalProperties": false,
"title": "Affected versions",
"description": "The versions that have the flaw, marked with a cross in a tint of your brand's down colour."
},
"fixed": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 24,
"title": "Label",
"description": "A few words over the versions, such as Fixed in."
},
"versions": {
"type": "string",
"maxLength": 60,
"title": "Versions",
"description": "The product and its versions, in your monospace face (or your body face where your brand has none)."
}
},
"additionalProperties": false,
"title": "Fixed in",
"description": "The versions that fix it, marked with a tick in your brand's up colour, and on a chip at the end."
},
"steps": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"title": "Step",
"description": "One step, in a sentence."
},
"minItems": 1,
"maxItems": 4,
"title": "What to do",
"description": "One to four steps, each on a numbered tile, lit one after another."
},
"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: who needs no action, who to contact, trademarks. 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 identifier and the date, what is affected and what happened, the severity, the affected and fixed versions, the steps, 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=Security%20advisory&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": "Security advisory",
"identifier": "CVE-2026-41872",
"dateLabel": "Published",
"date": "2026-10-13T16:00:00+02:00",
"title": "Attachments could be opened across projects",
"summary": "A flaw in the attachment link check let a signed-in user open files from a project they were not a member of. We found no sign it was used.",
"severity": {
"rank": "high",
"label": "High",
"scale": "CVSS 3.1 base score",
"score": 8.1
},
"affected": {
"label": "Affected",
"versions": "Flowbase Server 5.0 to 5.4.2"
},
"fixed": {
"label": "Fixed in",
"versions": "Flowbase Server 5.4.3"
},
"steps": [
"Update Flowbase Server to 5.4.3 or later.",
"Rotate the signing key under Settings, then Security.",
"Check the attachment log for downloads you do not recognise."
],
"cta": {
"label": "Read the advisory",
"detail": "flowbase.example/security"
},
"footnote": "Flowbase Cloud was fixed on 12 October 2026 and needs no action. Flowbase is a trademark of Flowbase Inc.",
"look": {
"logo": "auto",
"pace": "standard",
"align": "start",
"theme": "brand",
"corners": "round",
"logoSize": "auto"
}
},
"metaData": {
"title": "Security advisory CVE-2026-41872: update Flowbase Server to 5.4.3",
"captionTiny": "Security advisory CVE-2026-41872 (High): update Flowbase Server to 5.4.3. Flowbase Cloud is already fixed.",
"captionShort": "Security advisory CVE-2026-41872, severity High (CVSS 8.1). In Flowbase Server 5.0 to 5.4.2, a signed-in user could open attachments from a project they were not a member of. Update to 5.4.3, rotate the signing key and check the attachment log. Flowbase Cloud needs no action.",
"captionMedium": "Security advisory CVE-2026-41872, published 13 October 2026, severity High (CVSS 3.1 base score 8.1). A flaw in the attachment link check in Flowbase Server 5.0 to 5.4.2 let a signed-in user open files from a project they were not a member of. We found no sign that it was used. What to do: update Flowbase Server to 5.4.3 or later, rotate the signing key under Settings, then Security, and check the attachment log for downloads you do not recognise. Flowbase Cloud was fixed on 12 October and needs no action. Full details at flowbase.example/security.",
"captionLong": "Security advisory CVE-2026-41872, published 13 October 2026, severity High (CVSS 3.1 base score 8.1). A flaw in the attachment link check in Flowbase Server 5.0 to 5.4.2 let a signed-in user open files from a project they were not a member of, if they knew or guessed the file's link. A researcher reported it to us through our disclosure programme on 9 October, and we found no sign in our logs that it was used. What to do if you run Flowbase Server yourself: update to 5.4.3 or later, rotate the signing key under Settings, then Security, so that older links stop working, and check the attachment log for downloads you do not recognise. Flowbase Cloud was fixed on 12 October and needs no action from you. We thank the researcher who reported it. Full details, with the affected endpoints, are at flowbase.example/security.",
"hashtags": [
"security",
"securityadvisory",
"cve",
"patch",
"saas"
]
}
}
}

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.