Skip to main content

Public bodies (City councils), Roadworks 1.0.0

TemplatePublic bodies (City councils), tpl_edafad905b0f
VariantRoadworks
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 roadworks notice from a city: the notice on a coloured banner, the headline, where, what is done, from and until and the working hours, complete on the first frame; each fact is then read in turn, then the diversion with its map, what it means for you, the dates and the button. Who issued it stays on screen throughout. 13.5 seconds, 1.5 more per point. metaData is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the kind of notice and its status, the headline, where, what is done, from and until, the working hours, the diversion and its map, what it means for you, the labels, the call to action, who issued it and the reference.
clipData.noticetextyesup to 24 charactersKind of notice: What kind of notice this is, on the coloured banner under your logo on every frame, such as Roadworks or Road closure.
clipData.statustextup to 32 charactersStatus: How it stands, beside the kind of notice on the banner, such as Road closed, Lane closed or Delays likely.
clipData.headlinetextyesup to 72 charactersHeadline: What is happening, in plain words and one message, such as Mill Road is closed for new water mains. Facts only: a notice informs and never campaigns.
clipData.wheretextyesup to 100 charactersWhere: The road and the stretch of it, spelled out, such as Mill Road, between Station Street and the High Street.
clipData.worktextup to 120 charactersWhat is done: What the work is, in a sentence.
clipData.fromdatetimeyesFrom: The day the work starts. Only the date is read, as it is written here, and it is spelled out in the channel's language with its weekday.
clipData.untildatetimeyesUntil: The day the work is planned to end, read and spelled out the same way.
clipData.fromTexttextup to 48 charactersFrom, as written: The start in your own words, shown instead of the date, such as Monday 3 November, from 7 am. 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 Friday 19 December, weather permitting. Left out, it is written from the date.
clipData.hourstextup to 64 charactersWorking hours: When the work goes on, such as Monday to Saturday, 7 am to 6 pm, or Day and night.
clipData.diversiontextup to 160 charactersDiversion: How to get round, spelled out with the streets to take. Shown large on a scene of its own, with the map where one is sent.
clipData.mapimagemedia:// file from the media library, alt text up to 160 charactersMap: A map of the closure and the diversion, any shape, with its description as alt text, so the route is also in words. Shown on the diversion's scene, pushing in slowly. Left out, the diversion is shown in words alone.
clipData.impactslistup to 6What it means for you: Up to six short points for the people nearby, each with its pictogram: buses, parking, bins, access on foot. Each is read in turn, about one and a half seconds each; on a short frame they turn pages.
clipData.impacts[]groupPoint
clipData.impacts[].texttextyesup to 72 charactersPoint: What changes, in a few words.
clipData.impacts[].iconenumbus, train-front, bike, car, truck, footprints, accessibility, house, store, school, stethoscope, building, landmark, trees, leaf, recycle, trash, droplets, plug-zap, wifi, wrench, hard-hat, clock, calendar, map-pin, info, triangle-alert, phone, mail, globe, users, user, baby, bell, megaphone, file-text, lock, hand-helping, heart-pulse, sun, moon, roadworks, barrier, road-closed, diversion, route, parking, map, sirenPictogram: The pictogram on the point's tile. Left out, the tile holds the point's number.
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.wheretextup to 24 charactersWhere: Beside where.
clipData.labels.worktextup to 24 charactersWhat: Beside what is done.
clipData.labels.fromtextup to 24 charactersFrom: Beside the start.
clipData.labels.untiltextup to 24 charactersUntil: Beside the end.
clipData.labels.hourstextup to 24 charactersWorking hours: Beside the working hours.
clipData.labels.diversiontextup to 24 charactersDiversion: Over the diversion.
clipData.labels.impactstextup to 32 charactersWhat it means: Over the points for the people nearby.
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 notice, in your own words, such as Issued by Highways and Transport. 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 notice's file or order number, as you write it, such as Ref. TM/2026/0412.
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": {
"notice": {
"type": "string",
"maxLength": 24,
"title": "Kind of notice",
"description": "What kind of notice this is, on the coloured banner under your logo on every frame, such as Roadworks or Road closure."
},
"status": {
"type": "string",
"maxLength": 32,
"title": "Status",
"description": "How it stands, beside the kind of notice on the banner, such as Road closed, Lane closed or Delays likely."
},
"headline": {
"type": "string",
"maxLength": 72,
"title": "Headline",
"description": "What is happening, in plain words and one message, such as Mill Road is closed for new water mains. Facts only: a notice informs and never campaigns."
},
"where": {
"type": "string",
"maxLength": 100,
"title": "Where",
"description": "The road and the stretch of it, spelled out, such as Mill Road, between Station Street and the High Street."
},
"work": {
"type": "string",
"maxLength": 120,
"title": "What is done",
"description": "What the work is, in a sentence."
},
"from": {
"type": "string",
"format": "date-time",
"title": "From",
"description": "The day the work starts. Only the date is read, as it is written here, and it is spelled out in the channel's language with its weekday."
},
"until": {
"type": "string",
"format": "date-time",
"title": "Until",
"description": "The day the work is planned to end, read and spelled out the same way."
},
"fromText": {
"type": "string",
"maxLength": 48,
"title": "From, as written",
"description": "The start in your own words, shown instead of the date, such as Monday 3 November, from 7 am. 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 Friday 19 December, weather permitting. Left out, it is written from the date."
},
"hours": {
"type": "string",
"maxLength": 64,
"title": "Working hours",
"description": "When the work goes on, such as Monday to Saturday, 7 am to 6 pm, or Day and night."
},
"diversion": {
"type": "string",
"maxLength": 160,
"title": "Diversion",
"description": "How to get round, spelled out with the streets to take. Shown large on a scene of its own, with the map where one is sent."
},
"map": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Picture",
"description": "A file from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 160,
"title": "Alt text",
"description": "What the picture shows, for anyone who cannot see it."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Map",
"description": "A map of the closure and the diversion, any shape, with its description as alt text, so the route is also in words. Shown on the diversion's scene, pushing in slowly. Left out, the diversion is shown in words alone."
},
"impacts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 72,
"title": "Point",
"description": "What changes, in a few words."
},
"icon": {
"type": "string",
"enum": [
"bus",
"train-front",
"bike",
"car",
"truck",
"footprints",
"accessibility",
"house",
"store",
"school",
"stethoscope",
"building",
"landmark",
"trees",
"leaf",
"recycle",
"trash",
"droplets",
"plug-zap",
"wifi",
"wrench",
"hard-hat",
"clock",
"calendar",
"map-pin",
"info",
"triangle-alert",
"phone",
"mail",
"globe",
"users",
"user",
"baby",
"bell",
"megaphone",
"file-text",
"lock",
"hand-helping",
"heart-pulse",
"sun",
"moon",
"roadworks",
"barrier",
"road-closed",
"diversion",
"route",
"parking",
"map",
"siren"
],
"title": "Pictogram",
"description": "The pictogram on the point's tile. Left out, the tile holds the point's number.",
"enumNames": [
"Bus",
"Train front",
"Bike",
"Car",
"Truck",
"Footprints",
"Accessibility",
"House",
"Store",
"School",
"Stethoscope",
"Building",
"Landmark",
"Trees",
"Leaf",
"Recycle",
"Trash",
"Droplets",
"Plug zap",
"Wifi",
"Wrench",
"Hard hat",
"Clock",
"Calendar",
"Map pin",
"Info",
"Triangle alert",
"Phone",
"Mail",
"Globe",
"Users",
"User",
"Baby",
"Bell",
"Megaphone",
"File text",
"Lock",
"Hand helping",
"Heart pulse",
"Sun",
"Moon",
"Roadworks (a cone)",
"Barrier",
"Road closed",
"Diversion",
"Route",
"Parking",
"Map",
"Siren"
]
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Point"
},
"maxItems": 6,
"title": "What it means for you",
"description": "Up to six short points for the people nearby, each with its pictogram: buses, parking, bins, access on foot. Each is read in turn, about one and a half seconds each; on a short frame they turn pages."
},
"labels": {
"type": "object",
"properties": {
"where": {
"type": "string",
"maxLength": 24,
"title": "Where",
"description": "Beside where."
},
"work": {
"type": "string",
"maxLength": 24,
"title": "What",
"description": "Beside what is done."
},
"from": {
"type": "string",
"maxLength": 24,
"title": "From",
"description": "Beside the start."
},
"until": {
"type": "string",
"maxLength": 24,
"title": "Until",
"description": "Beside the end."
},
"hours": {
"type": "string",
"maxLength": 24,
"title": "Working hours",
"description": "Beside the working hours."
},
"diversion": {
"type": "string",
"maxLength": 24,
"title": "Diversion",
"description": "Over the diversion."
},
"impacts": {
"type": "string",
"maxLength": 32,
"title": "What it means",
"description": "Over the points for the people nearby."
}
},
"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 notice, in your own words, such as Issued by Highways and Transport. 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 notice's file or order number, as you write it, such as Ref. TM/2026/0412."
},
"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": [
"notice",
"headline",
"where",
"from",
"until",
"issuedBy"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the kind of notice and its status, the headline, where, what is done, from and until, the working hours, the diversion and its map, what it means for you, 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": {
"notice": {
"type": "string",
"maxLength": 24,
"title": "Kind of notice",
"description": "What kind of notice this is, on the coloured banner under your logo on every frame, such as Roadworks or Road closure."
},
"status": {
"type": "string",
"maxLength": 32,
"title": "Status",
"description": "How it stands, beside the kind of notice on the banner, such as Road closed, Lane closed or Delays likely."
},
"headline": {
"type": "string",
"maxLength": 72,
"title": "Headline",
"description": "What is happening, in plain words and one message, such as Mill Road is closed for new water mains. Facts only: a notice informs and never campaigns."
},
"where": {
"type": "string",
"maxLength": 100,
"title": "Where",
"description": "The road and the stretch of it, spelled out, such as Mill Road, between Station Street and the High Street."
},
"work": {
"type": "string",
"maxLength": 120,
"title": "What is done",
"description": "What the work is, in a sentence."
},
"from": {
"type": "string",
"format": "date-time",
"title": "From",
"description": "The day the work starts. Only the date is read, as it is written here, and it is spelled out in the channel's language with its weekday."
},
"until": {
"type": "string",
"format": "date-time",
"title": "Until",
"description": "The day the work is planned to end, read and spelled out the same way."
},
"fromText": {
"type": "string",
"maxLength": 48,
"title": "From, as written",
"description": "The start in your own words, shown instead of the date, such as Monday 3 November, from 7 am. 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 Friday 19 December, weather permitting. Left out, it is written from the date."
},
"hours": {
"type": "string",
"maxLength": 64,
"title": "Working hours",
"description": "When the work goes on, such as Monday to Saturday, 7 am to 6 pm, or Day and night."
},
"diversion": {
"type": "string",
"maxLength": 160,
"title": "Diversion",
"description": "How to get round, spelled out with the streets to take. Shown large on a scene of its own, with the map where one is sent."
},
"map": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Picture",
"description": "A file from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 160,
"title": "Alt text",
"description": "What the picture shows, for anyone who cannot see it."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Map",
"description": "A map of the closure and the diversion, any shape, with its description as alt text, so the route is also in words. Shown on the diversion's scene, pushing in slowly. Left out, the diversion is shown in words alone."
},
"impacts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 72,
"title": "Point",
"description": "What changes, in a few words."
},
"icon": {
"type": "string",
"enum": [
"bus",
"train-front",
"bike",
"car",
"truck",
"footprints",
"accessibility",
"house",
"store",
"school",
"stethoscope",
"building",
"landmark",
"trees",
"leaf",
"recycle",
"trash",
"droplets",
"plug-zap",
"wifi",
"wrench",
"hard-hat",
"clock",
"calendar",
"map-pin",
"info",
"triangle-alert",
"phone",
"mail",
"globe",
"users",
"user",
"baby",
"bell",
"megaphone",
"file-text",
"lock",
"hand-helping",
"heart-pulse",
"sun",
"moon",
"roadworks",
"barrier",
"road-closed",
"diversion",
"route",
"parking",
"map",
"siren"
],
"title": "Pictogram",
"description": "The pictogram on the point's tile. Left out, the tile holds the point's number.",
"enumNames": [
"Bus",
"Train front",
"Bike",
"Car",
"Truck",
"Footprints",
"Accessibility",
"House",
"Store",
"School",
"Stethoscope",
"Building",
"Landmark",
"Trees",
"Leaf",
"Recycle",
"Trash",
"Droplets",
"Plug zap",
"Wifi",
"Wrench",
"Hard hat",
"Clock",
"Calendar",
"Map pin",
"Info",
"Triangle alert",
"Phone",
"Mail",
"Globe",
"Users",
"User",
"Baby",
"Bell",
"Megaphone",
"File text",
"Lock",
"Hand helping",
"Heart pulse",
"Sun",
"Moon",
"Roadworks (a cone)",
"Barrier",
"Road closed",
"Diversion",
"Route",
"Parking",
"Map",
"Siren"
]
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Point"
},
"maxItems": 6,
"title": "What it means for you",
"description": "Up to six short points for the people nearby, each with its pictogram: buses, parking, bins, access on foot. Each is read in turn, about one and a half seconds each; on a short frame they turn pages."
},
"labels": {
"type": "object",
"properties": {
"where": {
"type": "string",
"maxLength": 24,
"title": "Where",
"description": "Beside where."
},
"work": {
"type": "string",
"maxLength": 24,
"title": "What",
"description": "Beside what is done."
},
"from": {
"type": "string",
"maxLength": 24,
"title": "From",
"description": "Beside the start."
},
"until": {
"type": "string",
"maxLength": 24,
"title": "Until",
"description": "Beside the end."
},
"hours": {
"type": "string",
"maxLength": 24,
"title": "Working hours",
"description": "Beside the working hours."
},
"diversion": {
"type": "string",
"maxLength": 24,
"title": "Diversion",
"description": "Over the diversion."
},
"impacts": {
"type": "string",
"maxLength": 32,
"title": "What it means",
"description": "Over the points for the people nearby."
}
},
"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 notice, in your own words, such as Issued by Highways and Transport. 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 notice's file or order number, as you write it, such as Ref. TM/2026/0412."
},
"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 kind of notice and its status, the headline, where, what is done, from and until, the working hours, the diversion and its map, what it means for you, 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=Roadworks&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": {
"notice": "Roadworks",
"status": "Road closed",
"headline": "Mill Road is closed for new water mains",
"where": "Mill Road, between Station Street and the High Street",
"work": "We are replacing the water mains under the road, then resurfacing it.",
"from": "2026-11-03T07:00:00+00:00",
"until": "2026-12-19T18:00:00+00:00",
"fromText": "",
"untilText": "",
"hours": "Monday to Saturday, 7 am to 6 pm",
"diversion": "Follow the yellow diversion signs via Station Street, Park Lane and Church Road.",
"map": {
"alt": "The closed stretch of Mill Road and the diversion round it",
"url": "media://example-image.jpg"
},
"impacts": [
{
"icon": "bus",
"text": "Buses 4 and 12 follow the diversion"
},
{
"icon": "footprints",
"text": "Homes, shops and the surgery stay open on foot"
},
{
"icon": "parking",
"text": "No parking on Mill Road while the work goes on"
},
{
"icon": "trash",
"text": "Bins are collected on the usual day"
}
],
"labels": {
"from": "From",
"work": "What we are doing",
"hours": "Working hours",
"until": "Until",
"where": "Where",
"impacts": "What it means for you",
"diversion": "Diversion"
},
"cta": {
"label": "See the diversion map",
"detail": "westbrook.example/roadworks"
},
"issuedBy": "Issued by Highways and Transport, City of Westbrook",
"reference": "Ref. TM/2026/0412",
"look": {
"logo": "auto",
"pace": "calm",
"align": "start",
"theme": "brand",
"corners": "soft",
"logoSize": "auto"
}
},
"metaData": {
"title": "Roadworks: Mill Road closed from 3 November to 19 December",
"captionTiny": "Mill Road is closed between Station Street and the High Street from 3 November to 19 December for new water mains. Follow the yellow diversion signs.",
"captionShort": "Roadworks: Mill Road is closed between Station Street and the High Street from Monday 3 November to Friday 19 December while we replace the water mains and resurface the road. Work runs Monday to Saturday, 7 am to 6 pm. Follow the yellow diversion signs via Station Street, Park Lane and Church Road. Buses 4 and 12 follow the diversion. Homes, shops and the surgery stay open on foot.",
"captionMedium": "Roadworks on Mill Road. From Monday 3 November to Friday 19 December, Mill Road will be closed between Station Street and the High Street while we replace the water mains under the road and then resurface it. Work runs Monday to Saturday, 7 am to 6 pm. Drivers should follow the yellow diversion signs via Station Street, Park Lane and Church Road. What it means for you: buses 4 and 12 follow the diversion, so allow a few extra minutes; homes, shops and the surgery stay open and can be reached on foot; there is no parking on Mill Road while the work goes on; and bins are collected on the usual day. Thank you for your patience while we make these repairs. The full diversion map is at westbrook.example/roadworks. Issued by Highways and Transport, City of Westbrook. Ref. TM/2026/0412.",
"captionLong": "Roadworks on Mill Road. From Monday 3 November to Friday 19 December, Mill Road will be closed to traffic between Station Street and the High Street. The water mains under this stretch of road are more than eighty years old, and we are replacing them before they fail. Once the new pipes are in, we will resurface the road so it is ready for the winter. Work runs Monday to Saturday, from 7 am to 6 pm, and there will be no work on Sundays. Drivers should follow the yellow diversion signs via Station Street, Park Lane and Church Road; the diversion adds about five minutes to a journey across town. What it means for you: buses 4 and 12 follow the diversion, and their stops on Mill Road move to Station Street and Church Road for the duration; homes, shops and the surgery on Mill Road stay open and can be reached on foot at all times, and our team on site will help anybody who needs a hand; there is no parking on Mill Road while the work goes on, so please use the car park on Park Lane; and bins are collected on the usual day, with the crews walking them to the vehicle. Emergency services can pass through the works at any time. We know roadworks are disruptive, and we are grateful for your patience. If you have a question, or if you need help getting to or from your home during the works, call us on 0300 123 4567 or write to us through westbrook.example/roadworks, where you will also find the full diversion map and weekly updates. Issued by Highways and Transport, City of Westbrook. Ref. TM/2026/0412.",
"hashtags": [
"roadworks",
"westbrook",
"traffic",
"diversion",
"localnews"
]
}
}
}

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.