Tech and industry (Software and SaaS), Security advisory 1.0.0
| Template | Tech and industry (Software and SaaS), tpl_fe11839b9ed7 |
|---|---|
| Variant | Security advisory |
| 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 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.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip 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.section | text | up to 28 characters | Section: What the post is about, on a chip at the end of the header, such as Security advisory. | |
clipData.identifier | text | yes | up to 32 characters | Identifier: 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.dateLabel | text | up to 24 characters | Before the date: A word set before the date, such as Published or Updated. | |
clipData.date | datetime | Date: The day the advisory was published or last updated, written beside the identifier in the channel's language. | ||
clipData.title | text | yes | up to 72 characters | What is affected: What the vulnerability is and where, in a few words, the headline of the post. |
clipData.summary | text | up to 160 characters | What happened: What happened, in a line or two, plainly: what could happen, to whom, and whether it was used. | |
clipData.severity | group | yes | Severity: 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.label | text | yes | up to 16 characters | Severity: The severity in your words, such as Critical, High, Medium or Low. |
clipData.severity.rank | enum | critical, high, medium, low, info | Rank: 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.score | number | from 0, to 10, 1 decimals | Score: A score, such as a CVSS base score, drawn exactly as sent with the decimals it was sent with. | |
clipData.severity.scale | text | up to 32 characters | Scale: What the score is, under it, such as CVSS 3.1 base score. | |
clipData.affected | group | yes | Affected versions: The versions that have the flaw, marked with a cross in a tint of your brand's down colour. | |
clipData.affected.label | text | up to 24 characters | Label: A few words over the versions, such as Affected. | |
clipData.affected.versions | text | yes | up to 60 characters | Versions: The product and its versions, in your monospace face (or your body face where your brand has none). |
clipData.fixed | group | Fixed 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.label | text | up to 24 characters | Label: A few words over the versions, such as Fixed in. | |
clipData.fixed.versions | text | yes | up to 60 characters | Versions: The product and its versions, in your monospace face (or your body face where your brand has none). |
clipData.steps | list | yes | at least 1, up to 4 | What to do: One to four steps, each on a numbered tile, lit one after another. |
clipData.steps[] | text | up to 120 characters | Step: One step, in a sentence. | |
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: who needs no action, who to contact, trademarks. 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 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.