Public bodies (City councils), Consultation 1.0.0
| Template | Public bodies (City councils), tpl_edafad905b0f |
|---|---|
| Variant | Consultation |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 22 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 public consultation from a city: the notice on a coloured banner, the question, where, who can answer and when it closes, complete on the first frame; each fact is read in turn, then up to four points of what is proposed with a picture of the place, how to answer, the closing date and the button. It asks, it never campaigns. 13.5 seconds, 2 more per point. metaData is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: the kind of notice and its status, the question and the line under it, where, who can answer, when it closes, what is proposed and the picture of the place, how to answer, the labels, the call to action, who issued it and the reference. | |
clipData.notice | text | yes | up to 24 characters | Kind of notice: What kind of notice this is, on the coloured banner under your logo on every frame, such as Consultation or Public survey. |
clipData.status | text | up to 32 characters | Status: How it stands, beside the kind of notice on the banner, such as Have your say, Open now or Last week to answer. | |
clipData.question | text | yes | up to 100 characters | Question: The question you are asking, in plain words, such as What do you think of our plans for Riverside Park? A consultation asks: facts only, never a campaign for or against the proposal. |
clipData.summary | text | up to 110 characters | Line under it: One or two plain sentences under the question, such as who you want to hear from and why. Shown on the first frame where there is room, else left to the post's text. | |
clipData.place | text | up to 100 characters | Where: The place the proposal is about, spelled out, such as Riverside Park, between Mill Lane and the river. | |
clipData.who | text | up to 100 characters | Who can answer: Who may take part, such as Everybody who lives, works or studies in Westbrook. | |
clipData.until | datetime | yes | Closes: When the consultation closes. The date and the time are read as they are written here, and spelled out in the channel's language with the weekday. | |
clipData.untilText | text | up to 48 characters | Closes, as written: The closing date in your own words, shown instead of the one written from the date, such as Sunday 14 December at midnight. Left out, it is written from the date. | |
clipData.proposals | list | at least 1, up to 4 | What is proposed: Up to four short points saying what is proposed, each with its pictogram, read in turn, about two seconds each; on a short frame they turn pages. State each as a fact of the proposal, never as an argument for it. | |
clipData.proposals[] | group | Point | ||
clipData.proposals[].text | text | yes | up to 100 characters | Point: What is proposed, in a sentence. |
clipData.proposals[].icon | enum | bus, train-front, bike, car, truck, footprints, accessibility, house, store, school, stethoscope, building, landmark, trees, leaf, flower-2, recycle, trash, droplets, plug-zap, wifi, lightbulb, wrench, hard-hat, clock, calendar, map-pin, info, triangle-alert, phone, mail, globe, users, user, baby, coffee, bell, megaphone, file-text, lock, hand-helping, heart-pulse, coins, sun, moon, roadworks, barrier, road-closed, diversion, route, parking, map, siren | Pictogram: The pictogram on the point's tile. Left out, the tile holds the point's number. | |
clipData.picture | image | media:// file from the media library, alt text up to 160 characters | Picture of the place: A photograph or a plan of the place the proposal is about, with its description as alt text. Shown beside or over the points, pushing in slowly. Left out, the points stand alone. | |
clipData.online | text | up to 100 characters | Online: How to answer online, such as Fill in the survey at westbrook.example/riverside. Left out, with the other two ways, there is no scene for answering. | |
clipData.inPerson | text | up to 100 characters | In person: Where and when to answer in person, such as Drop-in sessions at Riverside Library, Saturdays 10 am to 1 pm. | |
clipData.post | text | up to 100 characters | By post: How to answer by post, such as Paper forms at every library, free to return by Freepost. | |
clipData.labels | group | Labels: 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.place | text | up to 24 characters | Where: Beside the place. | |
clipData.labels.who | text | up to 24 characters | Who can answer: Beside who may take part. | |
clipData.labels.until | text | up to 24 characters | Closes: Beside the closing date, and over it at the end. | |
clipData.labels.proposals | text | up to 32 characters | What is proposed: Over the points. | |
clipData.labels.answer | text | up to 32 characters | How to answer: Over the ways to answer. | |
clipData.labels.online | text | up to 24 characters | Online: Beside answering online. | |
clipData.labels.inPerson | text | up to 24 characters | In person: Beside answering in person. | |
clipData.labels.post | text | up to 24 characters | By post: Beside answering by post. | |
clipData.cta | group | Call to action: The button at the end and the line under it, such as a web address or a phone number. | ||
clipData.cta.label | text | yes | up to 28 characters | Button: What the button says, such as Have your say. |
clipData.cta.detail | text | up to 48 characters | Line under it: A web address, a phone number, an office. | |
clipData.issuedBy | text | yes | up to 120 characters | Issued by: The department or office that issues the notice, in your own words, such as Issued by Parks and Open Spaces. Shown with your reference above your footer line from the first frame to the last, set smaller rather than cut. |
clipData.reference | text | up to 40 characters | Reference: The consultation's reference, as you write it, such as Consultation PK/2026/07. | |
clipData.look | group | Look: How the clip looks and moves. The same six switches in every format (theme, pace, corners, alignment, logo, logo size). Leave any out for the package's default: the brand's colours, calm, softly rounded, text at the start. | ||
clipData.look.theme | enum | brand, light, dark, bold | Theme: Brand: your brand's own colours and background. Light or dark: a page tinted with your brand colour. Bold: your brand colour as the page. | |
clipData.look.pace | enum | calm, standard, punchy | Pace: How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts. | |
clipData.look.corners | enum | square, soft, round | Corners: The shape of cards, pictures and buttons. | |
clipData.look.align | enum | start, centre | Text alignment: Where the text lines up. | |
clipData.look.logo | enum | auto, free | Logo: The style's own: the logo on a small plate so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose. | |
clipData.look.logoSize | enum | auto, small, large | Logo size: Standard is the style's own size. Small draws the logo a fifth smaller, with its plate. Large draws it a quarter larger wherever the style has room for it, and at the standard size where it has none. | |
metaData | group | Meta data: Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data. | ||
metaData.title | text | up to 100 characters | Title: Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes. | |
metaData.captionTiny | text | up to 200 characters | Tiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionShort | text | up to 500 characters | Short description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionMedium | text | up to 1500 characters | Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok): Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionLong | text | up to 4000 characters | Long description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.hashtags | list | up to 15 | Hashtags: Written without the #. Up to 15, which every platform takes. | |
metaData.hashtags[] | text | up to 60 characters | Hashtag |
locales carries other languages: under each language code, the parts of clipData and metaData that differ, laid over the default, so a language with no copy still renders.
A picture is always a file from your media library: media:// followed by its id or its name.
Anything the table does not list is refused, and so is anything over its limit, with a 400
schema_validation error that names the field.
The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"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 Consultation or Public survey."
},
"status": {
"type": "string",
"maxLength": 32,
"title": "Status",
"description": "How it stands, beside the kind of notice on the banner, such as Have your say, Open now or Last week to answer."
},
"question": {
"type": "string",
"maxLength": 100,
"title": "Question",
"description": "The question you are asking, in plain words, such as What do you think of our plans for Riverside Park? A consultation asks: facts only, never a campaign for or against the proposal."
},
"summary": {
"type": "string",
"maxLength": 110,
"title": "Line under it",
"description": "One or two plain sentences under the question, such as who you want to hear from and why. Shown on the first frame where there is room, else left to the post's text."
},
"place": {
"type": "string",
"maxLength": 100,
"title": "Where",
"description": "The place the proposal is about, spelled out, such as Riverside Park, between Mill Lane and the river."
},
"who": {
"type": "string",
"maxLength": 100,
"title": "Who can answer",
"description": "Who may take part, such as Everybody who lives, works or studies in Westbrook."
},
"until": {
"type": "string",
"format": "date-time",
"title": "Closes",
"description": "When the consultation closes. The date and the time are read as they are written here, and spelled out in the channel's language with the weekday."
},
"untilText": {
"type": "string",
"maxLength": 48,
"title": "Closes, as written",
"description": "The closing date in your own words, shown instead of the one written from the date, such as Sunday 14 December at midnight. Left out, it is written from the date."
},
"proposals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 100,
"title": "Point",
"description": "What is proposed, in a sentence."
},
"icon": {
"type": "string",
"enum": [
"bus",
"train-front",
"bike",
"car",
"truck",
"footprints",
"accessibility",
"house",
"store",
"school",
"stethoscope",
"building",
"landmark",
"trees",
"leaf",
"flower-2",
"recycle",
"trash",
"droplets",
"plug-zap",
"wifi",
"lightbulb",
"wrench",
"hard-hat",
"clock",
"calendar",
"map-pin",
"info",
"triangle-alert",
"phone",
"mail",
"globe",
"users",
"user",
"baby",
"coffee",
"bell",
"megaphone",
"file-text",
"lock",
"hand-helping",
"heart-pulse",
"coins",
"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",
"Flower",
"Recycle",
"Trash",
"Droplets",
"Plug zap",
"Wifi",
"Lightbulb",
"Wrench",
"Hard hat",
"Clock",
"Calendar",
"Map pin",
"Info",
"Triangle alert",
"Phone",
"Mail",
"Globe",
"Users",
"User",
"Baby",
"Coffee",
"Bell",
"Megaphone",
"File text",
"Lock",
"Hand helping",
"Heart pulse",
"Coins",
"Sun",
"Moon",
"Roadworks (a cone)",
"Barrier",
"Road closed",
"Diversion",
"Route",
"Parking",
"Map",
"Siren"
]
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Point"
},
"minItems": 1,
"maxItems": 4,
"title": "What is proposed",
"description": "Up to four short points saying what is proposed, each with its pictogram, read in turn, about two seconds each; on a short frame they turn pages. State each as a fact of the proposal, never as an argument for it."
},
"picture": {
"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": "Picture of the place",
"description": "A photograph or a plan of the place the proposal is about, with its description as alt text. Shown beside or over the points, pushing in slowly. Left out, the points stand alone."
},
"online": {
"type": "string",
"maxLength": 100,
"title": "Online",
"description": "How to answer online, such as Fill in the survey at westbrook.example/riverside. Left out, with the other two ways, there is no scene for answering."
},
"inPerson": {
"type": "string",
"maxLength": 100,
"title": "In person",
"description": "Where and when to answer in person, such as Drop-in sessions at Riverside Library, Saturdays 10 am to 1 pm."
},
"post": {
"type": "string",
"maxLength": 100,
"title": "By post",
"description": "How to answer by post, such as Paper forms at every library, free to return by Freepost."
},
"labels": {
"type": "object",
"properties": {
"place": {
"type": "string",
"maxLength": 24,
"title": "Where",
"description": "Beside the place."
},
"who": {
"type": "string",
"maxLength": 24,
"title": "Who can answer",
"description": "Beside who may take part."
},
"until": {
"type": "string",
"maxLength": 24,
"title": "Closes",
"description": "Beside the closing date, and over it at the end."
},
"proposals": {
"type": "string",
"maxLength": 32,
"title": "What is proposed",
"description": "Over the points."
},
"answer": {
"type": "string",
"maxLength": 32,
"title": "How to answer",
"description": "Over the ways to answer."
},
"online": {
"type": "string",
"maxLength": 24,
"title": "Online",
"description": "Beside answering online."
},
"inPerson": {
"type": "string",
"maxLength": 24,
"title": "In person",
"description": "Beside answering in person."
},
"post": {
"type": "string",
"maxLength": 24,
"title": "By post",
"description": "Beside answering by post."
}
},
"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, such as Have your say."
},
"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 Parks and Open Spaces. 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 consultation's reference, as you write it, such as Consultation PK/2026/07."
},
"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",
"question",
"until",
"issuedBy"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the kind of notice and its status, the question and the line under it, where, who can answer, when it closes, what is proposed and the picture of the place, how to answer, 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 Consultation or Public survey."
},
"status": {
"type": "string",
"maxLength": 32,
"title": "Status",
"description": "How it stands, beside the kind of notice on the banner, such as Have your say, Open now or Last week to answer."
},
"question": {
"type": "string",
"maxLength": 100,
"title": "Question",
"description": "The question you are asking, in plain words, such as What do you think of our plans for Riverside Park? A consultation asks: facts only, never a campaign for or against the proposal."
},
"summary": {
"type": "string",
"maxLength": 110,
"title": "Line under it",
"description": "One or two plain sentences under the question, such as who you want to hear from and why. Shown on the first frame where there is room, else left to the post's text."
},
"place": {
"type": "string",
"maxLength": 100,
"title": "Where",
"description": "The place the proposal is about, spelled out, such as Riverside Park, between Mill Lane and the river."
},
"who": {
"type": "string",
"maxLength": 100,
"title": "Who can answer",
"description": "Who may take part, such as Everybody who lives, works or studies in Westbrook."
},
"until": {
"type": "string",
"format": "date-time",
"title": "Closes",
"description": "When the consultation closes. The date and the time are read as they are written here, and spelled out in the channel's language with the weekday."
},
"untilText": {
"type": "string",
"maxLength": 48,
"title": "Closes, as written",
"description": "The closing date in your own words, shown instead of the one written from the date, such as Sunday 14 December at midnight. Left out, it is written from the date."
},
"proposals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 100,
"title": "Point",
"description": "What is proposed, in a sentence."
},
"icon": {
"type": "string",
"enum": [
"bus",
"train-front",
"bike",
"car",
"truck",
"footprints",
"accessibility",
"house",
"store",
"school",
"stethoscope",
"building",
"landmark",
"trees",
"leaf",
"flower-2",
"recycle",
"trash",
"droplets",
"plug-zap",
"wifi",
"lightbulb",
"wrench",
"hard-hat",
"clock",
"calendar",
"map-pin",
"info",
"triangle-alert",
"phone",
"mail",
"globe",
"users",
"user",
"baby",
"coffee",
"bell",
"megaphone",
"file-text",
"lock",
"hand-helping",
"heart-pulse",
"coins",
"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",
"Flower",
"Recycle",
"Trash",
"Droplets",
"Plug zap",
"Wifi",
"Lightbulb",
"Wrench",
"Hard hat",
"Clock",
"Calendar",
"Map pin",
"Info",
"Triangle alert",
"Phone",
"Mail",
"Globe",
"Users",
"User",
"Baby",
"Coffee",
"Bell",
"Megaphone",
"File text",
"Lock",
"Hand helping",
"Heart pulse",
"Coins",
"Sun",
"Moon",
"Roadworks (a cone)",
"Barrier",
"Road closed",
"Diversion",
"Route",
"Parking",
"Map",
"Siren"
]
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Point"
},
"minItems": 1,
"maxItems": 4,
"title": "What is proposed",
"description": "Up to four short points saying what is proposed, each with its pictogram, read in turn, about two seconds each; on a short frame they turn pages. State each as a fact of the proposal, never as an argument for it."
},
"picture": {
"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": "Picture of the place",
"description": "A photograph or a plan of the place the proposal is about, with its description as alt text. Shown beside or over the points, pushing in slowly. Left out, the points stand alone."
},
"online": {
"type": "string",
"maxLength": 100,
"title": "Online",
"description": "How to answer online, such as Fill in the survey at westbrook.example/riverside. Left out, with the other two ways, there is no scene for answering."
},
"inPerson": {
"type": "string",
"maxLength": 100,
"title": "In person",
"description": "Where and when to answer in person, such as Drop-in sessions at Riverside Library, Saturdays 10 am to 1 pm."
},
"post": {
"type": "string",
"maxLength": 100,
"title": "By post",
"description": "How to answer by post, such as Paper forms at every library, free to return by Freepost."
},
"labels": {
"type": "object",
"properties": {
"place": {
"type": "string",
"maxLength": 24,
"title": "Where",
"description": "Beside the place."
},
"who": {
"type": "string",
"maxLength": 24,
"title": "Who can answer",
"description": "Beside who may take part."
},
"until": {
"type": "string",
"maxLength": 24,
"title": "Closes",
"description": "Beside the closing date, and over it at the end."
},
"proposals": {
"type": "string",
"maxLength": 32,
"title": "What is proposed",
"description": "Over the points."
},
"answer": {
"type": "string",
"maxLength": 32,
"title": "How to answer",
"description": "Over the ways to answer."
},
"online": {
"type": "string",
"maxLength": 24,
"title": "Online",
"description": "Beside answering online."
},
"inPerson": {
"type": "string",
"maxLength": 24,
"title": "In person",
"description": "Beside answering in person."
},
"post": {
"type": "string",
"maxLength": 24,
"title": "By post",
"description": "Beside answering by post."
}
},
"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, such as Have your say."
},
"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 Parks and Open Spaces. 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 consultation's reference, as you write it, such as Consultation PK/2026/07."
},
"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 question and the line under it, where, who can answer, when it closes, what is proposed and the picture of the place, how to answer, 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=Consultation&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": "Consultation",
"status": "Have your say",
"question": "What do you think of our plans for Riverside Park?",
"summary": "We want to hear from everybody who uses the park before any decision is made.",
"place": "Riverside Park, between Mill Lane and the river",
"who": "Everybody who lives, works or studies in Westbrook",
"until": "2026-12-14T17:00:00+00:00",
"untilText": "",
"proposals": [
{
"icon": "baby",
"text": "A new play area for children up to 12, open to all abilities"
},
{
"icon": "coffee",
"text": "A small café and public toilets by the main gate"
},
{
"icon": "bike",
"text": "Wider, lit paths along the river for walking and cycling"
},
{
"icon": "trees",
"text": "More trees and a wildflower meadow on the east lawn"
}
],
"picture": {
"alt": "Riverside Park today, seen from the main gate",
"url": "media://example-image.jpg"
},
"online": "Fill in the survey at westbrook.example/riverside",
"inPerson": "Drop-in sessions at Riverside Library, Saturdays 10 am to 1 pm",
"post": "Paper forms at every library, free to return by Freepost WESTBROOK PARKS",
"labels": {
"who": "Who can answer",
"post": "By post",
"place": "Where",
"until": "Closes",
"answer": "How to answer",
"online": "Online",
"inPerson": "In person",
"proposals": "What we propose"
},
"cta": {
"label": "Have your say",
"detail": "westbrook.example/riverside"
},
"issuedBy": "Issued by Parks and Open Spaces, City of Westbrook",
"reference": "Consultation PK/2026/07",
"look": {
"logo": "auto",
"pace": "calm",
"align": "start",
"theme": "brand",
"corners": "soft",
"logoSize": "auto"
}
},
"metaData": {
"title": "Consultation: our plans for Riverside Park, open until 14 December",
"captionTiny": "What do you think of our plans for Riverside Park? A new play area, a café, lit paths and more trees. Have your say by 14 December.",
"captionShort": "Consultation: what do you think of our plans for Riverside Park? We propose a new play area for children up to 12, a small café and public toilets by the main gate, wider lit paths along the river and more trees. Everybody who lives, works or studies in Westbrook can answer, online, in person or by post, until Monday 14 December at 5 pm. westbrook.example/riverside",
"captionMedium": "Consultation on Riverside Park. We want to hear from everybody who uses the park before any decision is made. What we propose: a new play area for children up to 12, open to all abilities; a small café and public toilets by the main gate; wider, lit paths along the river for walking and cycling; and more trees and a wildflower meadow on the east lawn. Everybody who lives, works or studies in Westbrook can answer. How to answer: fill in the survey at westbrook.example/riverside; come to a drop-in session at Riverside Library, Saturdays 10 am to 1 pm; or pick up a paper form at any library and return it free by Freepost WESTBROOK PARKS. The consultation closes on Monday 14 December at 5 pm. Issued by Parks and Open Spaces, City of Westbrook.",
"captionLong": "Consultation on Riverside Park. Riverside Park is one of the busiest green spaces in Westbrook, and parts of it are showing their age: the play area is more than twenty years old, there is no café or public toilet, and the paths along the river are narrow and unlit. We have drawn up plans to improve the park, and we want to hear from everybody who uses it before any decision is made. What we propose: a new play area for children up to 12, designed so that children of all abilities can play together; a small café and public toilets by the main gate on Mill Lane; wider paths along the river, lit after dark, for walking and cycling; and more trees and a wildflower meadow on the east lawn. Everybody who lives, works or studies in Westbrook can take part, and every answer is read. You can fill in the survey online at westbrook.example/riverside, where the full plans and drawings are also published; come to a drop-in session at Riverside Library on Saturdays from 10 am to 1 pm, where officers can answer your questions; or pick up a paper form at any library and return it free by Freepost WESTBROOK PARKS. If you need the plans in another format or language, call us on 0300 123 4567. The consultation closes on Monday 14 December at 5 pm. We will publish what people told us, and what we decide, in the new year. Issued by Parks and Open Spaces, City of Westbrook. Consultation PK/2026/07.",
"hashtags": [
"westbrook",
"consultation",
"haveyoursay",
"riversidepark",
"parks"
]
}
}
}
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.