Skip to main content

Public bodies (City councils), Warning 1.0.0

TemplatePublic bodies (City councils), tpl_edafad905b0f
VariantWarning
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length20 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 city's warning in the fixed warning colours, never the brand's: level and hazard on a banner in the level's colour, the warning sign, the headline, area, from and until, complete on frame one; each fact read in turn, then up to five points of what to do, where to get updates, the end time. Who issued it stays on screen. 14 seconds, 1.5 more per point after the first. metaData is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the level, the warning in your words, the hazard and its pictogram, the headline, the area, from and until, what to do, where to get updates, the labels, the call to action, who issued it and the reference.
clipData.levelenumyesyellow, orange, red, violetLevel: The warning's level, which decides its colour: the fixed colours people know from the weather services (yellow, orange, red, and violet for extreme danger), never your brand's, so every warning reads at once. Use the level the national service gave, never a higher one to be heard.
clipData.noticetextyesup to 24 charactersWarning, as written: The warning's level in your words, on the banner in the level's colour on every frame, such as Amber warning or Yellow warning.
clipData.hazardtextyesup to 32 charactersWhat the warning is for: The hazard, beside the level on the banner, such as Heavy rain, Strong winds or Extreme heat.
clipData.iconenumcloud-rain, droplets, wind, zap, snowflake, thermometer, sun, cloud, flame, heart-pulse, plug-zap, siren, triangle-alertPictogram: The hazard's pictogram, on the banner and on the warning sign beside the headline. Left out, a warning triangle.
clipData.headlinetextyesup to 72 charactersHeadline: What may happen, in plain words and one message, such as Heavy rain may flood roads and homes near the river. Facts only, never alarm beyond the warning.
clipData.areatextyesup to 120 charactersArea: Where the warning applies, spelled out: the city, its districts, its streets.
clipData.fromdatetimeFrom: When the warning starts. The date and the time are read as they are written here and spelled out in the channel's language with the weekday.
clipData.untildatetimeyesUntil: When the warning ends, read and spelled out the same way. Every warning says when it ends.
clipData.fromTexttextup to 48 charactersFrom, as written: The start in your own words, shown instead of the date, such as Friday from 6 pm, or Now. Left out, it is written from the date.
clipData.untilTexttextup to 48 charactersUntil, as written: The end in your own words, shown instead of the date, such as Saturday at noon. Left out, it is written from the date.
clipData.actionslistyesat least 1, up to 5What to do: One to five short points of what to do, each with its pictogram, the most important first. Each is read in turn, about one and a half seconds each; on a short frame they turn pages.
clipData.actions[]groupPoint
clipData.actions[].texttextyesup to 72 charactersPoint: What to do, in a few words.
clipData.actions[].iconenumhouse, car, bus, train-front, bike, footprints, accessibility, phone, smartphone, battery-charging, plug-zap, droplets, trees, users, user, baby, heart-pulse, stethoscope, hand-helping, bell, megaphone, globe, mail, info, triangle-alert, clock, calendar, map-pin, lock, key-round, shield-check, sun, moon, cloud-rain, wind, snowflake, thermometer, flame, school, store, building, trash, package, apple, coffee, road-closed, barrier, diversion, route, map, sirenPictogram: The pictogram on the point's tile. Left out, the tile holds the point's number.
clipData.updatestextup to 120 charactersWhere to get updates: Where to follow the warning as it changes, spelled out. Shown large on a scene of its own. Left out, there is no such scene.
clipData.labelsgroupLabels: The words beside the facts and over the scenes, in your language. A label left out is not drawn; the pictogram still says which is which.
clipData.labels.areatextup to 24 charactersArea: Beside the area.
clipData.labels.fromtextup to 24 charactersFrom: Beside the start.
clipData.labels.untiltextup to 24 charactersUntil: Beside the end, and over it at the end of the clip.
clipData.labels.actionstextup to 32 charactersWhat to do: Over the points.
clipData.labels.updatestextup to 32 charactersWhere to get updates: Over where to get updates.
clipData.ctagroupCall to action: The button at the end and the line under it, such as a web address or a phone number.
clipData.cta.labeltextyesup to 28 charactersButton: What the button says.
clipData.cta.detailtextup to 48 charactersLine under it: A web address, a phone number, an office.
clipData.issuedBytextyesup to 120 charactersIssued by: The department or office that issues the warning, in your own words, such as Issued by Emergency Planning. Shown with your reference above your footer line from the first frame to the last, set smaller rather than cut.
clipData.referencetextup to 40 charactersReference: The warning's number, as you write it, such as Warning 2026-117. Left out, none is shown.
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, calm, softly rounded, 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": {
"level": {
"type": "string",
"enum": [
"yellow",
"orange",
"red",
"violet"
],
"title": "Level",
"description": "The warning's level, which decides its colour: the fixed colours people know from the weather services (yellow, orange, red, and violet for extreme danger), never your brand's, so every warning reads at once. Use the level the national service gave, never a higher one to be heard.",
"enumNames": [
"Yellow: be aware",
"Orange (amber): be prepared",
"Red: take action",
"Violet: extreme danger"
]
},
"notice": {
"type": "string",
"maxLength": 24,
"title": "Warning, as written",
"description": "The warning's level in your words, on the banner in the level's colour on every frame, such as Amber warning or Yellow warning."
},
"hazard": {
"type": "string",
"maxLength": 32,
"title": "What the warning is for",
"description": "The hazard, beside the level on the banner, such as Heavy rain, Strong winds or Extreme heat."
},
"icon": {
"type": "string",
"enum": [
"cloud-rain",
"droplets",
"wind",
"zap",
"snowflake",
"thermometer",
"sun",
"cloud",
"flame",
"heart-pulse",
"plug-zap",
"siren",
"triangle-alert"
],
"title": "Pictogram",
"description": "The hazard's pictogram, on the banner and on the warning sign beside the headline. Left out, a warning triangle.",
"enumNames": [
"Rain",
"Flooding",
"Wind",
"Thunderstorm",
"Snow and ice",
"Heat or cold",
"Sun and heat",
"Fog",
"Fire",
"Health",
"Power",
"Civil emergency",
"General warning"
]
},
"headline": {
"type": "string",
"maxLength": 72,
"title": "Headline",
"description": "What may happen, in plain words and one message, such as Heavy rain may flood roads and homes near the river. Facts only, never alarm beyond the warning."
},
"area": {
"type": "string",
"maxLength": 120,
"title": "Area",
"description": "Where the warning applies, spelled out: the city, its districts, its streets."
},
"from": {
"type": "string",
"format": "date-time",
"title": "From",
"description": "When the warning starts. The date and the time are read as they are written here and spelled out in the channel's language with the weekday."
},
"until": {
"type": "string",
"format": "date-time",
"title": "Until",
"description": "When the warning ends, read and spelled out the same way. Every warning says when it ends."
},
"fromText": {
"type": "string",
"maxLength": 48,
"title": "From, as written",
"description": "The start in your own words, shown instead of the date, such as Friday from 6 pm, or Now. Left out, it is written from the date."
},
"untilText": {
"type": "string",
"maxLength": 48,
"title": "Until, as written",
"description": "The end in your own words, shown instead of the date, such as Saturday at noon. Left out, it is written from the date."
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 72,
"title": "Point",
"description": "What to do, in a few words."
},
"icon": {
"type": "string",
"enum": [
"house",
"car",
"bus",
"train-front",
"bike",
"footprints",
"accessibility",
"phone",
"smartphone",
"battery-charging",
"plug-zap",
"droplets",
"trees",
"users",
"user",
"baby",
"heart-pulse",
"stethoscope",
"hand-helping",
"bell",
"megaphone",
"globe",
"mail",
"info",
"triangle-alert",
"clock",
"calendar",
"map-pin",
"lock",
"key-round",
"shield-check",
"sun",
"moon",
"cloud-rain",
"wind",
"snowflake",
"thermometer",
"flame",
"school",
"store",
"building",
"trash",
"package",
"apple",
"coffee",
"road-closed",
"barrier",
"diversion",
"route",
"map",
"siren"
],
"title": "Pictogram",
"description": "The pictogram on the point's tile. Left out, the tile holds the point's number.",
"enumNames": [
"House",
"Car",
"Bus",
"Train front",
"Bike",
"Footprints",
"Accessibility",
"Phone",
"Smartphone",
"Battery charging",
"Plug zap",
"Droplets",
"Trees",
"Users",
"User",
"Baby",
"Heart pulse",
"Stethoscope",
"Hand helping",
"Bell",
"Megaphone",
"Globe",
"Mail",
"Info",
"Triangle alert",
"Clock",
"Calendar",
"Map pin",
"Lock",
"Key round",
"Shield check",
"Sun",
"Moon",
"Cloud rain",
"Wind",
"Snowflake",
"Thermometer",
"Flame",
"School",
"Store",
"Building",
"Trash",
"Package",
"Apple",
"Coffee",
"Road closed",
"Barrier",
"Diversion",
"Route",
"Map",
"Siren"
]
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Point"
},
"minItems": 1,
"maxItems": 5,
"title": "What to do",
"description": "One to five short points of what to do, each with its pictogram, the most important first. Each is read in turn, about one and a half seconds each; on a short frame they turn pages."
},
"updates": {
"type": "string",
"maxLength": 120,
"title": "Where to get updates",
"description": "Where to follow the warning as it changes, spelled out. Shown large on a scene of its own. Left out, there is no such scene."
},
"labels": {
"type": "object",
"properties": {
"area": {
"type": "string",
"maxLength": 24,
"title": "Area",
"description": "Beside the area."
},
"from": {
"type": "string",
"maxLength": 24,
"title": "From",
"description": "Beside the start."
},
"until": {
"type": "string",
"maxLength": 24,
"title": "Until",
"description": "Beside the end, and over it at the end of the clip."
},
"actions": {
"type": "string",
"maxLength": 32,
"title": "What to do",
"description": "Over the points."
},
"updates": {
"type": "string",
"maxLength": 32,
"title": "Where to get updates",
"description": "Over where to get updates."
}
},
"additionalProperties": false,
"title": "Labels",
"description": "The words beside the facts and over the scenes, in your language. A label left out is not drawn; the pictogram still says which is which."
},
"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": "A web address, a phone number, an office."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Call to action",
"description": "The button at the end and the line under it, such as a web address or a phone number."
},
"issuedBy": {
"type": "string",
"maxLength": 120,
"title": "Issued by",
"description": "The department or office that issues the warning, in your own words, such as Issued by Emergency Planning. Shown with your reference above your footer line from the first frame to the last, set smaller rather than cut."
},
"reference": {
"type": "string",
"maxLength": 40,
"title": "Reference",
"description": "The warning's number, as you write it, such as Warning 2026-117. Left out, none is shown."
},
"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, calm, softly rounded, text at the start."
}
},
"required": [
"level",
"notice",
"hazard",
"headline",
"area",
"until",
"actions",
"issuedBy"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the level, the warning in your words, the hazard and its pictogram, the headline, the area, from and until, what to do, where to get updates, the labels, the call to action, who issued it and the reference."
},
"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": {
"level": {
"type": "string",
"enum": [
"yellow",
"orange",
"red",
"violet"
],
"title": "Level",
"description": "The warning's level, which decides its colour: the fixed colours people know from the weather services (yellow, orange, red, and violet for extreme danger), never your brand's, so every warning reads at once. Use the level the national service gave, never a higher one to be heard.",
"enumNames": [
"Yellow: be aware",
"Orange (amber): be prepared",
"Red: take action",
"Violet: extreme danger"
]
},
"notice": {
"type": "string",
"maxLength": 24,
"title": "Warning, as written",
"description": "The warning's level in your words, on the banner in the level's colour on every frame, such as Amber warning or Yellow warning."
},
"hazard": {
"type": "string",
"maxLength": 32,
"title": "What the warning is for",
"description": "The hazard, beside the level on the banner, such as Heavy rain, Strong winds or Extreme heat."
},
"icon": {
"type": "string",
"enum": [
"cloud-rain",
"droplets",
"wind",
"zap",
"snowflake",
"thermometer",
"sun",
"cloud",
"flame",
"heart-pulse",
"plug-zap",
"siren",
"triangle-alert"
],
"title": "Pictogram",
"description": "The hazard's pictogram, on the banner and on the warning sign beside the headline. Left out, a warning triangle.",
"enumNames": [
"Rain",
"Flooding",
"Wind",
"Thunderstorm",
"Snow and ice",
"Heat or cold",
"Sun and heat",
"Fog",
"Fire",
"Health",
"Power",
"Civil emergency",
"General warning"
]
},
"headline": {
"type": "string",
"maxLength": 72,
"title": "Headline",
"description": "What may happen, in plain words and one message, such as Heavy rain may flood roads and homes near the river. Facts only, never alarm beyond the warning."
},
"area": {
"type": "string",
"maxLength": 120,
"title": "Area",
"description": "Where the warning applies, spelled out: the city, its districts, its streets."
},
"from": {
"type": "string",
"format": "date-time",
"title": "From",
"description": "When the warning starts. The date and the time are read as they are written here and spelled out in the channel's language with the weekday."
},
"until": {
"type": "string",
"format": "date-time",
"title": "Until",
"description": "When the warning ends, read and spelled out the same way. Every warning says when it ends."
},
"fromText": {
"type": "string",
"maxLength": 48,
"title": "From, as written",
"description": "The start in your own words, shown instead of the date, such as Friday from 6 pm, or Now. Left out, it is written from the date."
},
"untilText": {
"type": "string",
"maxLength": 48,
"title": "Until, as written",
"description": "The end in your own words, shown instead of the date, such as Saturday at noon. Left out, it is written from the date."
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 72,
"title": "Point",
"description": "What to do, in a few words."
},
"icon": {
"type": "string",
"enum": [
"house",
"car",
"bus",
"train-front",
"bike",
"footprints",
"accessibility",
"phone",
"smartphone",
"battery-charging",
"plug-zap",
"droplets",
"trees",
"users",
"user",
"baby",
"heart-pulse",
"stethoscope",
"hand-helping",
"bell",
"megaphone",
"globe",
"mail",
"info",
"triangle-alert",
"clock",
"calendar",
"map-pin",
"lock",
"key-round",
"shield-check",
"sun",
"moon",
"cloud-rain",
"wind",
"snowflake",
"thermometer",
"flame",
"school",
"store",
"building",
"trash",
"package",
"apple",
"coffee",
"road-closed",
"barrier",
"diversion",
"route",
"map",
"siren"
],
"title": "Pictogram",
"description": "The pictogram on the point's tile. Left out, the tile holds the point's number.",
"enumNames": [
"House",
"Car",
"Bus",
"Train front",
"Bike",
"Footprints",
"Accessibility",
"Phone",
"Smartphone",
"Battery charging",
"Plug zap",
"Droplets",
"Trees",
"Users",
"User",
"Baby",
"Heart pulse",
"Stethoscope",
"Hand helping",
"Bell",
"Megaphone",
"Globe",
"Mail",
"Info",
"Triangle alert",
"Clock",
"Calendar",
"Map pin",
"Lock",
"Key round",
"Shield check",
"Sun",
"Moon",
"Cloud rain",
"Wind",
"Snowflake",
"Thermometer",
"Flame",
"School",
"Store",
"Building",
"Trash",
"Package",
"Apple",
"Coffee",
"Road closed",
"Barrier",
"Diversion",
"Route",
"Map",
"Siren"
]
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Point"
},
"minItems": 1,
"maxItems": 5,
"title": "What to do",
"description": "One to five short points of what to do, each with its pictogram, the most important first. Each is read in turn, about one and a half seconds each; on a short frame they turn pages."
},
"updates": {
"type": "string",
"maxLength": 120,
"title": "Where to get updates",
"description": "Where to follow the warning as it changes, spelled out. Shown large on a scene of its own. Left out, there is no such scene."
},
"labels": {
"type": "object",
"properties": {
"area": {
"type": "string",
"maxLength": 24,
"title": "Area",
"description": "Beside the area."
},
"from": {
"type": "string",
"maxLength": 24,
"title": "From",
"description": "Beside the start."
},
"until": {
"type": "string",
"maxLength": 24,
"title": "Until",
"description": "Beside the end, and over it at the end of the clip."
},
"actions": {
"type": "string",
"maxLength": 32,
"title": "What to do",
"description": "Over the points."
},
"updates": {
"type": "string",
"maxLength": 32,
"title": "Where to get updates",
"description": "Over where to get updates."
}
},
"additionalProperties": false,
"title": "Labels",
"description": "The words beside the facts and over the scenes, in your language. A label left out is not drawn; the pictogram still says which is which."
},
"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": "A web address, a phone number, an office."
}
},
"additionalProperties": false,
"title": "Call to action",
"description": "The button at the end and the line under it, such as a web address or a phone number."
},
"issuedBy": {
"type": "string",
"maxLength": 120,
"title": "Issued by",
"description": "The department or office that issues the warning, in your own words, such as Issued by Emergency Planning. Shown with your reference above your footer line from the first frame to the last, set smaller rather than cut."
},
"reference": {
"type": "string",
"maxLength": 40,
"title": "Reference",
"description": "The warning's number, as you write it, such as Warning 2026-117. Left out, none is shown."
},
"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, calm, softly rounded, text at the start."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the level, the warning in your words, the hazard and its pictogram, the headline, the area, from and until, what to do, where to get updates, the labels, the call to action, who issued it and the reference."
},
"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_edafad905b0f?variant=Warning&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": {
"level": "orange",
"notice": "Amber warning",
"hazard": "Heavy rain",
"icon": "cloud-rain",
"headline": "Heavy rain may flood roads and homes near the river",
"area": "All of Westbrook, most of all Riverside and the streets along the river",
"from": "2026-11-13T18:00:00+00:00",
"until": "2026-11-14T12:00:00+00:00",
"fromText": "",
"untilText": "",
"actions": [
{
"icon": "car",
"text": "Do not drive or walk through flood water"
},
{
"icon": "house",
"text": "Move valuables and medicines upstairs"
},
{
"icon": "users",
"text": "Check on older neighbours and anyone living alone"
},
{
"icon": "battery-charging",
"text": "Keep a torch and a charged phone to hand"
},
{
"icon": "phone",
"text": "Call 999 if a life is in danger"
}
],
"updates": "Follow updates at westbrook.example/warnings and on Westbrook Radio, 96.4 FM.",
"labels": {
"area": "Where",
"from": "From",
"until": "Until",
"actions": "What to do",
"updates": "Where to get updates"
},
"cta": {
"label": "See the latest updates",
"detail": "westbrook.example/warnings"
},
"issuedBy": "Issued by Emergency Planning, City of Westbrook",
"reference": "",
"look": {
"logo": "auto",
"pace": "calm",
"align": "start",
"theme": "brand",
"corners": "soft",
"logoSize": "auto"
}
},
"metaData": {
"title": "Amber warning: heavy rain from Friday 6 pm to Saturday noon",
"captionTiny": "Amber warning for heavy rain across Westbrook from Friday 6 pm to Saturday noon. Roads and homes near the river may flood. Never drive through flood water.",
"captionShort": "Amber warning: heavy rain. From Friday 13 November at 6 pm until Saturday 14 November at noon, heavy rain may flood roads and homes near the river, most of all in Riverside. Do not drive or walk through flood water, move valuables and medicines upstairs, and check on older neighbours. Follow updates at westbrook.example/warnings and on Westbrook Radio, 96.4 FM. Call 999 if a life is in danger.",
"captionMedium": "Amber warning for heavy rain across Westbrook. The national weather service has issued an amber warning for heavy rain from Friday 13 November at 6 pm until Saturday 14 November at noon. Roads and homes near the river may flood, most of all in Riverside and the streets along the river, and journeys may take longer. What to do: do not drive or walk through flood water, as even shallow water can sweep a car away; move valuables and medicines upstairs; check on older neighbours and anyone living alone; keep a torch and a charged phone to hand; and call 999 if a life is in danger. Sandbags are available at the Riverside depot. Follow updates at westbrook.example/warnings and on Westbrook Radio, 96.4 FM. Issued by Emergency Planning, City of Westbrook.",
"captionLong": "Amber warning for heavy rain across Westbrook. The national weather service has issued an amber warning for heavy rain from Friday 13 November at 6 pm until Saturday 14 November at noon. Between 40 and 60 millimetres of rain are expected in a few hours, and the river is already high after a wet week. Roads and homes near the river may flood, most of all in Riverside and the streets along the river, and some roads may be closed at short notice. Journeys by car and by bus are likely to take longer, and some bus routes may be diverted. What to do: do not drive or walk through flood water, as even 30 centimetres of moving water can float a car; move valuables, important papers and medicines upstairs; check on older neighbours and anyone living alone, and make sure they know about the warning; keep a torch, a charged phone and any medicines you need to hand; and call 999 if a life is in danger. If you live in Riverside, sandbags are available free of charge at the Riverside depot on Wharf Road from Friday at 10 am, and our teams will deliver them to anyone who cannot collect them. Rest centres will open if they are needed, and we will say where on our website and on local radio. Please do not call 999 for information: follow updates at westbrook.example/warnings and on Westbrook Radio, 96.4 FM, or call our helpline on 0300 123 4567. Issued by Emergency Planning, City of Westbrook.",
"hashtags": [
"amberwarning",
"heavyrain",
"westbrook",
"flooding",
"staysafe"
]
}
}
}

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.