Skip to main content

Tech and industry (Software and SaaS), Uptime report 1.0.0

TemplateTech and industry (Software and SaaS), tpl_fe11839b9ed7
VariantUptime report
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length13 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 month's uptime report in a bento of rounded tiles: the period and the headline on a tile of your colour with your status page's address, the uptime counting to exactly what you send with how it was measured, a bar per day or week coloured by its status, then up to three incidents with their minutes, each lit in turn. Nine seconds, 1.8 more an incident. metaData is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the section, the period, the headline and the summary, the status page, the uptime with how it was measured, the bars, the status words, the incidents, 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 Status report or Reliability.
clipData.periodtextyesup to 28 charactersPeriod: The month or period the report covers, on a chip with a pulsing dot above the headline, such as September 2026.
clipData.headlinetextyesup to 56 charactersHeadline: The headline of the post, such as How Flowbase ran in September.
clipData.summarytextup to 140 charactersSummary: The month in a sentence, under the headline.
clipData.addresstextup to 48 charactersStatus page: Your status page's address, under the headline with a globe from the first frame, such as status.flowbase.example.
clipData.uptimegroupyesUptime: The period's uptime as a big figure on a tile of its own, counting up to exactly what you send with the decimals you send, with how it was measured under it. A figure is never shown without how it was measured.
clipData.uptime.valuenumberyesfrom 0, to 100, 4 decimalsUptime: The uptime, drawn exactly as sent with the decimals it was sent with, such as 99.951.
clipData.uptime.unittextup to 8 charactersUnit: After the figure, usually %.
clipData.uptime.labeltextyesup to 56 charactersWhat it is: What the figure is, in a few words.
clipData.uptime.basistextyesup to 120 charactersHow it was measured: How the figure was measured and what it leaves out, such as Checked every minute from six regions, planned maintenance excluded.
clipData.uptime.targetnumberfrom 0, to 100, 4 decimalsCommitment: Your commitment, such as the 99.9 of your SLA, on a chip beside the figure with the same unit, ticked where the uptime met it.
clipData.uptime.targetLabeltextup to 24 charactersCommitment's name: What the commitment is called, before it on the chip, such as SLA or Our commitment.
clipData.barslistyesat least 1, up to 31Days or weeks: A bar per day (up to 31) or per week, in order, each coloured by its status, as a status page draws them. The first and last labels stand under the bars, and every label where there are eight bars or fewer.
clipData.bars[]groupDay or week
clipData.bars[].labeltextup to 12 charactersLabel: The day or week, such as 1 Sep or Week 36.
clipData.bars[].statusenumyesup, degraded, down, maintenanceStatus: How the services ran that day or week: the worst of it.
clipData.legendgroupStatus words: The word for each status, in a legend under the bars beside its colour. Only the statuses the bars use are shown, and a word left out is not shown.
clipData.legend.uptextup to 24 charactersUp: The word for a day with nothing to report, such as Operational.
clipData.legend.degradedtextup to 24 charactersDegraded: The word for a slower or partly working day, such as Degraded.
clipData.legend.downtextup to 24 charactersOutage: The word for a day with an outage, such as Outage.
clipData.legend.maintenancetextup to 24 charactersMaintenance: The word for planned maintenance, such as Maintenance.
clipData.incidentslistup to 3Incidents: Up to three incidents, each on a tile with when it was, how many minutes it lasted and what happened in a line, lit one after another. Left out, the month had none to report.
clipData.incidents[]groupIncident
clipData.incidents[].whentextyesup to 28 charactersWhen: When it happened, such as 23 Sep, 14:05 UTC.
clipData.incidents[].minutesnumberyesfrom 0, 0 decimalsMinutes: How many minutes it lasted, shown exactly as sent.
clipData.incidents[].barnumberfrom 1, to 31, 0 decimalsIts bar: Which bar it belongs to, counted from the first, so that bar is lit with it, such as 23 for the 23rd day.
clipData.incidents[].linetextyesup to 90 charactersWhat happened: What happened and what was done, in a line.
clipData.incidents[].statusenumdegraded, down, maintenanceStatus: How it affected the services, for its colour, the same as the bars'.
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: what the uptime leaves out, the terms of your commitment, 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 Status report or Reliability."
},
"period": {
"type": "string",
"maxLength": 28,
"title": "Period",
"description": "The month or period the report covers, on a chip with a pulsing dot above the headline, such as September 2026."
},
"headline": {
"type": "string",
"maxLength": 56,
"title": "Headline",
"description": "The headline of the post, such as How Flowbase ran in September."
},
"summary": {
"type": "string",
"maxLength": 140,
"title": "Summary",
"description": "The month in a sentence, under the headline."
},
"address": {
"type": "string",
"maxLength": 48,
"title": "Status page",
"description": "Your status page's address, under the headline with a globe from the first frame, such as status.flowbase.example."
},
"uptime": {
"type": "object",
"properties": {
"value": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Uptime",
"description": "The uptime, drawn exactly as sent with the decimals it was sent with, such as 99.951."
},
"unit": {
"type": "string",
"maxLength": 8,
"title": "Unit",
"description": "After the figure, usually %."
},
"label": {
"type": "string",
"maxLength": 56,
"title": "What it is",
"description": "What the figure is, in a few words."
},
"basis": {
"type": "string",
"maxLength": 120,
"title": "How it was measured",
"description": "How the figure was measured and what it leaves out, such as Checked every minute from six regions, planned maintenance excluded."
},
"target": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Commitment",
"description": "Your commitment, such as the 99.9 of your SLA, on a chip beside the figure with the same unit, ticked where the uptime met it."
},
"targetLabel": {
"type": "string",
"maxLength": 24,
"title": "Commitment's name",
"description": "What the commitment is called, before it on the chip, such as SLA or Our commitment."
}
},
"required": [
"value",
"label",
"basis"
],
"additionalProperties": false,
"title": "Uptime",
"description": "The period's uptime as a big figure on a tile of its own, counting up to exactly what you send with the decimals you send, with how it was measured under it. A figure is never shown without how it was measured."
},
"bars": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 12,
"title": "Label",
"description": "The day or week, such as 1 Sep or Week 36."
},
"status": {
"type": "string",
"enum": [
"up",
"degraded",
"down",
"maintenance"
],
"title": "Status",
"description": "How the services ran that day or week: the worst of it.",
"enumNames": [
"Up, nothing to report",
"Degraded (slower or partly working)",
"Outage",
"Planned maintenance"
]
}
},
"required": [
"status"
],
"additionalProperties": false,
"title": "Day or week"
},
"minItems": 1,
"maxItems": 31,
"title": "Days or weeks",
"description": "A bar per day (up to 31) or per week, in order, each coloured by its status, as a status page draws them. The first and last labels stand under the bars, and every label where there are eight bars or fewer."
},
"legend": {
"type": "object",
"properties": {
"up": {
"type": "string",
"maxLength": 24,
"title": "Up",
"description": "The word for a day with nothing to report, such as Operational."
},
"degraded": {
"type": "string",
"maxLength": 24,
"title": "Degraded",
"description": "The word for a slower or partly working day, such as Degraded."
},
"down": {
"type": "string",
"maxLength": 24,
"title": "Outage",
"description": "The word for a day with an outage, such as Outage."
},
"maintenance": {
"type": "string",
"maxLength": 24,
"title": "Maintenance",
"description": "The word for planned maintenance, such as Maintenance."
}
},
"additionalProperties": false,
"title": "Status words",
"description": "The word for each status, in a legend under the bars beside its colour. Only the statuses the bars use are shown, and a word left out is not shown."
},
"incidents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"when": {
"type": "string",
"maxLength": 28,
"title": "When",
"description": "When it happened, such as 23 Sep, 14:05 UTC."
},
"minutes": {
"type": "number",
"minimum": 0,
"title": "Minutes",
"description": "How many minutes it lasted, shown exactly as sent."
},
"bar": {
"type": "number",
"minimum": 1,
"maximum": 31,
"title": "Its bar",
"description": "Which bar it belongs to, counted from the first, so that bar is lit with it, such as 23 for the 23rd day."
},
"line": {
"type": "string",
"maxLength": 90,
"title": "What happened",
"description": "What happened and what was done, in a line."
},
"status": {
"type": "string",
"enum": [
"degraded",
"down",
"maintenance"
],
"title": "Status",
"description": "How it affected the services, for its colour, the same as the bars'.",
"enumNames": [
"Degraded (slower or partly working)",
"Outage",
"Planned maintenance"
]
}
},
"required": [
"when",
"minutes",
"line"
],
"additionalProperties": false,
"title": "Incident"
},
"maxItems": 3,
"title": "Incidents",
"description": "Up to three incidents, each on a tile with when it was, how many minutes it lasted and what happened in a line, lit one after another. Left out, the month had none to report."
},
"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: what the uptime leaves out, the terms of your commitment, 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": [
"period",
"headline",
"uptime",
"bars"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the period, the headline and the summary, the status page, the uptime with how it was measured, the bars, the status words, the incidents, 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 Status report or Reliability."
},
"period": {
"type": "string",
"maxLength": 28,
"title": "Period",
"description": "The month or period the report covers, on a chip with a pulsing dot above the headline, such as September 2026."
},
"headline": {
"type": "string",
"maxLength": 56,
"title": "Headline",
"description": "The headline of the post, such as How Flowbase ran in September."
},
"summary": {
"type": "string",
"maxLength": 140,
"title": "Summary",
"description": "The month in a sentence, under the headline."
},
"address": {
"type": "string",
"maxLength": 48,
"title": "Status page",
"description": "Your status page's address, under the headline with a globe from the first frame, such as status.flowbase.example."
},
"uptime": {
"type": "object",
"properties": {
"value": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Uptime",
"description": "The uptime, drawn exactly as sent with the decimals it was sent with, such as 99.951."
},
"unit": {
"type": "string",
"maxLength": 8,
"title": "Unit",
"description": "After the figure, usually %."
},
"label": {
"type": "string",
"maxLength": 56,
"title": "What it is",
"description": "What the figure is, in a few words."
},
"basis": {
"type": "string",
"maxLength": 120,
"title": "How it was measured",
"description": "How the figure was measured and what it leaves out, such as Checked every minute from six regions, planned maintenance excluded."
},
"target": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Commitment",
"description": "Your commitment, such as the 99.9 of your SLA, on a chip beside the figure with the same unit, ticked where the uptime met it."
},
"targetLabel": {
"type": "string",
"maxLength": 24,
"title": "Commitment's name",
"description": "What the commitment is called, before it on the chip, such as SLA or Our commitment."
}
},
"additionalProperties": false,
"title": "Uptime",
"description": "The period's uptime as a big figure on a tile of its own, counting up to exactly what you send with the decimals you send, with how it was measured under it. A figure is never shown without how it was measured."
},
"bars": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 12,
"title": "Label",
"description": "The day or week, such as 1 Sep or Week 36."
},
"status": {
"type": "string",
"enum": [
"up",
"degraded",
"down",
"maintenance"
],
"title": "Status",
"description": "How the services ran that day or week: the worst of it.",
"enumNames": [
"Up, nothing to report",
"Degraded (slower or partly working)",
"Outage",
"Planned maintenance"
]
}
},
"required": [
"status"
],
"additionalProperties": false,
"title": "Day or week"
},
"minItems": 1,
"maxItems": 31,
"title": "Days or weeks",
"description": "A bar per day (up to 31) or per week, in order, each coloured by its status, as a status page draws them. The first and last labels stand under the bars, and every label where there are eight bars or fewer."
},
"legend": {
"type": "object",
"properties": {
"up": {
"type": "string",
"maxLength": 24,
"title": "Up",
"description": "The word for a day with nothing to report, such as Operational."
},
"degraded": {
"type": "string",
"maxLength": 24,
"title": "Degraded",
"description": "The word for a slower or partly working day, such as Degraded."
},
"down": {
"type": "string",
"maxLength": 24,
"title": "Outage",
"description": "The word for a day with an outage, such as Outage."
},
"maintenance": {
"type": "string",
"maxLength": 24,
"title": "Maintenance",
"description": "The word for planned maintenance, such as Maintenance."
}
},
"additionalProperties": false,
"title": "Status words",
"description": "The word for each status, in a legend under the bars beside its colour. Only the statuses the bars use are shown, and a word left out is not shown."
},
"incidents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"when": {
"type": "string",
"maxLength": 28,
"title": "When",
"description": "When it happened, such as 23 Sep, 14:05 UTC."
},
"minutes": {
"type": "number",
"minimum": 0,
"title": "Minutes",
"description": "How many minutes it lasted, shown exactly as sent."
},
"bar": {
"type": "number",
"minimum": 1,
"maximum": 31,
"title": "Its bar",
"description": "Which bar it belongs to, counted from the first, so that bar is lit with it, such as 23 for the 23rd day."
},
"line": {
"type": "string",
"maxLength": 90,
"title": "What happened",
"description": "What happened and what was done, in a line."
},
"status": {
"type": "string",
"enum": [
"degraded",
"down",
"maintenance"
],
"title": "Status",
"description": "How it affected the services, for its colour, the same as the bars'.",
"enumNames": [
"Degraded (slower or partly working)",
"Outage",
"Planned maintenance"
]
}
},
"required": [
"when",
"minutes",
"line"
],
"additionalProperties": false,
"title": "Incident"
},
"maxItems": 3,
"title": "Incidents",
"description": "Up to three incidents, each on a tile with when it was, how many minutes it lasted and what happened in a line, lit one after another. Left out, the month had none to report."
},
"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: what the uptime leaves out, the terms of your commitment, 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 period, the headline and the summary, the status page, the uptime with how it was measured, the bars, the status words, the incidents, 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=Uptime%20report&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": "Status report",
"period": "September 2026",
"headline": "How Flowbase ran in September",
"summary": "Every service stayed up through our busiest month yet. One slow hour and one short outage, both fixed the same day.",
"address": "status.flowbase.example",
"uptime": {
"unit": "%",
"basis": "Checked every minute from six regions, planned maintenance excluded",
"label": "uptime across all services",
"value": 99.951,
"target": 99.9,
"targetLabel": "SLA"
},
"bars": [
{
"label": "1 Sep",
"status": "up"
},
{
"label": "2 Sep",
"status": "up"
},
{
"label": "3 Sep",
"status": "up"
},
{
"label": "4 Sep",
"status": "up"
},
{
"label": "5 Sep",
"status": "up"
},
{
"label": "6 Sep",
"status": "up"
},
{
"label": "7 Sep",
"status": "maintenance"
},
{
"label": "8 Sep",
"status": "up"
},
{
"label": "9 Sep",
"status": "up"
},
{
"label": "10 Sep",
"status": "up"
},
{
"label": "11 Sep",
"status": "up"
},
{
"label": "12 Sep",
"status": "degraded"
},
{
"label": "13 Sep",
"status": "up"
},
{
"label": "14 Sep",
"status": "up"
},
{
"label": "15 Sep",
"status": "up"
},
{
"label": "16 Sep",
"status": "up"
},
{
"label": "17 Sep",
"status": "up"
},
{
"label": "18 Sep",
"status": "up"
},
{
"label": "19 Sep",
"status": "up"
},
{
"label": "20 Sep",
"status": "up"
},
{
"label": "21 Sep",
"status": "up"
},
{
"label": "22 Sep",
"status": "up"
},
{
"label": "23 Sep",
"status": "down"
},
{
"label": "24 Sep",
"status": "up"
},
{
"label": "25 Sep",
"status": "up"
},
{
"label": "26 Sep",
"status": "up"
},
{
"label": "27 Sep",
"status": "up"
},
{
"label": "28 Sep",
"status": "up"
},
{
"label": "29 Sep",
"status": "up"
},
{
"label": "30 Sep",
"status": "up"
}
],
"legend": {
"up": "Operational",
"down": "Outage",
"degraded": "Degraded",
"maintenance": "Maintenance"
},
"incidents": [
{
"bar": 12,
"line": "Dashboards loaded slowly in Europe while a database was moved to new hardware.",
"when": "12 Sep, 09:40 UTC",
"status": "degraded",
"minutes": 34
},
{
"bar": 23,
"line": "Some workspaces could not sign in until a faulty release was rolled back.",
"when": "23 Sep, 14:05 UTC",
"status": "down",
"minutes": 21
}
],
"cta": {
"label": "See live status",
"detail": "status.flowbase.example"
},
"footnote": "Uptime counts outage minutes only; planned maintenance announced 48 hours ahead is excluded. Flowbase is a trademark of Flowbase Inc.",
"look": {
"logo": "auto",
"pace": "standard",
"align": "start",
"theme": "brand",
"corners": "round",
"logoSize": "auto"
}
},
"metaData": {
"title": "Flowbase in September: 99.951% uptime",
"captionTiny": "September at Flowbase: 99.951% uptime across all services, one slow hour and one 21-minute outage. Full report on our status page.",
"captionShort": "How Flowbase ran in September: 99.951% uptime across all services, above our 99.9% SLA. Dashboards were slow in Europe for 34 minutes during a database move, and some workspaces could not sign in for 21 minutes until we rolled back a release. Every incident is on status.flowbase.example.",
"captionMedium": "How Flowbase ran in September: 99.951% uptime across all services, above our 99.9% SLA, measured every minute from six regions with planned maintenance excluded. On 12 September dashboards loaded slowly in Europe for 34 minutes while we moved a database to new hardware. On 23 September some workspaces could not sign in for 21 minutes until we rolled back a faulty release; we have since added a check that stops a release like it. Every incident and its write-up is on status.flowbase.example, where you can also subscribe to updates.",
"captionLong": "How Flowbase ran in September: 99.951% uptime across all services, above our 99.9% SLA. We check every service every minute from six regions, and the figure counts outage minutes only; planned maintenance announced 48 hours ahead is excluded. On 7 September we upgraded our search cluster in a planned window. On 12 September dashboards loaded slowly in Europe for 34 minutes while we moved a database to new hardware. On 23 September some workspaces could not sign in for 21 minutes until we rolled back a faulty release; we have since added an automatic check that stops a release like it before it reaches you. Every incident has a full write-up on status.flowbase.example, where you can subscribe to updates by email, Slack or RSS. Thank you for building with us.",
"hashtags": [
"uptime",
"reliability",
"saas",
"statuspage",
"devops"
]
}
}
}

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.