Skip to main content

Public bodies (City councils), How to apply 1.0.0

TemplatePublic bodies (City councils), tpl_edafad905b0f
VariantHow to apply
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length24 seconds

Example video​

The 1x1 cut of this version, drawn from its own worked example. Open the video on its own.

What it accepts​

How to apply for something a city issues: the notice on a coloured banner, the headline, who can apply and the numbered steps, complete on the first frame; each step is read in turn, then what to bring ticked off, where and when with the online address and the cost, and the button. Who issued it stays on screen throughout. 13.5 seconds, 2 more per step. metaData is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the kind of notice and its status, the headline and who can apply, the steps, what to bring, where, when, online and the cost, the labels, the call to action, who issued it and the reference.
clipData.noticetextyesup to 24 charactersKind of notice: What kind of post this is, on the coloured banner under your logo on every frame, such as How to apply.
clipData.statustextup to 32 charactersStatus: Beside the kind of notice on the banner, such as Online or in person, or Open all year.
clipData.headlinetextyesup to 72 charactersHeadline: What somebody can apply for, in plain words and one message, such as How to get a residents' parking permit.
clipData.introtextup to 140 charactersLine under the headline: Who can apply, in one sentence, such as For residents of permit zones A to F.
clipData.stepslistyesat least 1, up to 6Steps: One to six steps, in the order they are taken, each numbered and read in turn, about two seconds each. Plain words, one action a step; on a short frame they turn pages.
clipData.steps[]groupStep
clipData.steps[].texttextyesup to 90 charactersStep: What to do, in a short sentence starting with the action.
clipData.bringlistup to 6What to bring: Up to six documents or things somebody needs to apply, on a scene of their own, each ticked in turn. Left out, there is no such scene and the steps are read more slowly instead.
clipData.bring[]groupItem
clipData.bring[].texttextyesup to 80 charactersItem: One document or thing, described so it can be recognised.
clipData.wheretextup to 100 charactersWhere: Where to apply in person, the office and the street spelled out.
clipData.whentextup to 80 charactersWhen: When that office is open, such as Monday to Friday, 9 am to 5 pm.
clipData.onlinetextup to 64 charactersOnline: The address to apply online, as it should be shown.
clipData.costtextup to 64 charactersCost: What it costs, as you write it, such as £45 a year, or Free.
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.bringtextup to 32 charactersWhat to bring: Over the list of what to bring.
clipData.labels.placetextup to 32 charactersWhere and when: Over the facts of where, when, online and cost.
clipData.labels.wheretextup to 24 charactersWhere: Beside where.
clipData.labels.whentextup to 24 charactersWhen: Beside when.
clipData.labels.onlinetextup to 24 charactersOnline: Beside the address to apply online.
clipData.labels.costtextup to 24 charactersCost: Beside the cost.
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 Parking Services. 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 or the scheme's number, as you write it, such as Ref. PS/2026/07.
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 post this is, on the coloured banner under your logo on every frame, such as How to apply."
},
"status": {
"type": "string",
"maxLength": 32,
"title": "Status",
"description": "Beside the kind of notice on the banner, such as Online or in person, or Open all year."
},
"headline": {
"type": "string",
"maxLength": 72,
"title": "Headline",
"description": "What somebody can apply for, in plain words and one message, such as How to get a residents' parking permit."
},
"intro": {
"type": "string",
"maxLength": 140,
"title": "Line under the headline",
"description": "Who can apply, in one sentence, such as For residents of permit zones A to F."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 90,
"title": "Step",
"description": "What to do, in a short sentence starting with the action."
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Step"
},
"minItems": 1,
"maxItems": 6,
"title": "Steps",
"description": "One to six steps, in the order they are taken, each numbered and read in turn, about two seconds each. Plain words, one action a step; on a short frame they turn pages."
},
"bring": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 80,
"title": "Item",
"description": "One document or thing, described so it can be recognised."
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Item"
},
"maxItems": 6,
"title": "What to bring",
"description": "Up to six documents or things somebody needs to apply, on a scene of their own, each ticked in turn. Left out, there is no such scene and the steps are read more slowly instead."
},
"where": {
"type": "string",
"maxLength": 100,
"title": "Where",
"description": "Where to apply in person, the office and the street spelled out."
},
"when": {
"type": "string",
"maxLength": 80,
"title": "When",
"description": "When that office is open, such as Monday to Friday, 9 am to 5 pm."
},
"online": {
"type": "string",
"maxLength": 64,
"title": "Online",
"description": "The address to apply online, as it should be shown."
},
"cost": {
"type": "string",
"maxLength": 64,
"title": "Cost",
"description": "What it costs, as you write it, such as £45 a year, or Free."
},
"labels": {
"type": "object",
"properties": {
"bring": {
"type": "string",
"maxLength": 32,
"title": "What to bring",
"description": "Over the list of what to bring."
},
"place": {
"type": "string",
"maxLength": 32,
"title": "Where and when",
"description": "Over the facts of where, when, online and cost."
},
"where": {
"type": "string",
"maxLength": 24,
"title": "Where",
"description": "Beside where."
},
"when": {
"type": "string",
"maxLength": 24,
"title": "When",
"description": "Beside when."
},
"online": {
"type": "string",
"maxLength": 24,
"title": "Online",
"description": "Beside the address to apply online."
},
"cost": {
"type": "string",
"maxLength": 24,
"title": "Cost",
"description": "Beside the cost."
}
},
"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 Parking Services. 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 or the scheme's number, as you write it, such as Ref. PS/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",
"headline",
"steps",
"issuedBy"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the kind of notice and its status, the headline and who can apply, the steps, what to bring, where, when, online and the cost, 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 post this is, on the coloured banner under your logo on every frame, such as How to apply."
},
"status": {
"type": "string",
"maxLength": 32,
"title": "Status",
"description": "Beside the kind of notice on the banner, such as Online or in person, or Open all year."
},
"headline": {
"type": "string",
"maxLength": 72,
"title": "Headline",
"description": "What somebody can apply for, in plain words and one message, such as How to get a residents' parking permit."
},
"intro": {
"type": "string",
"maxLength": 140,
"title": "Line under the headline",
"description": "Who can apply, in one sentence, such as For residents of permit zones A to F."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 90,
"title": "Step",
"description": "What to do, in a short sentence starting with the action."
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Step"
},
"minItems": 1,
"maxItems": 6,
"title": "Steps",
"description": "One to six steps, in the order they are taken, each numbered and read in turn, about two seconds each. Plain words, one action a step; on a short frame they turn pages."
},
"bring": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 80,
"title": "Item",
"description": "One document or thing, described so it can be recognised."
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Item"
},
"maxItems": 6,
"title": "What to bring",
"description": "Up to six documents or things somebody needs to apply, on a scene of their own, each ticked in turn. Left out, there is no such scene and the steps are read more slowly instead."
},
"where": {
"type": "string",
"maxLength": 100,
"title": "Where",
"description": "Where to apply in person, the office and the street spelled out."
},
"when": {
"type": "string",
"maxLength": 80,
"title": "When",
"description": "When that office is open, such as Monday to Friday, 9 am to 5 pm."
},
"online": {
"type": "string",
"maxLength": 64,
"title": "Online",
"description": "The address to apply online, as it should be shown."
},
"cost": {
"type": "string",
"maxLength": 64,
"title": "Cost",
"description": "What it costs, as you write it, such as £45 a year, or Free."
},
"labels": {
"type": "object",
"properties": {
"bring": {
"type": "string",
"maxLength": 32,
"title": "What to bring",
"description": "Over the list of what to bring."
},
"place": {
"type": "string",
"maxLength": 32,
"title": "Where and when",
"description": "Over the facts of where, when, online and cost."
},
"where": {
"type": "string",
"maxLength": 24,
"title": "Where",
"description": "Beside where."
},
"when": {
"type": "string",
"maxLength": 24,
"title": "When",
"description": "Beside when."
},
"online": {
"type": "string",
"maxLength": 24,
"title": "Online",
"description": "Beside the address to apply online."
},
"cost": {
"type": "string",
"maxLength": 24,
"title": "Cost",
"description": "Beside the cost."
}
},
"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 Parking Services. 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 or the scheme's number, as you write it, such as Ref. PS/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 headline and who can apply, the steps, what to bring, where, when, online and the cost, 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=How%20to%20apply&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": "How to apply",
"status": "Online or in person",
"headline": "How to get a residents' parking permit",
"intro": "For residents of permit zones A to F with a car registered at their address.",
"steps": [
{
"text": "Check that your street is in a permit zone"
},
{
"text": "Get the documents listed under What to bring"
},
{
"text": "Apply online, or at the Civic Centre if you prefer"
},
{
"text": "Pay the fee by card when you apply"
},
{
"text": "Your permit is linked to your number plate within 5 working days"
}
],
"bring": [
{
"text": "Proof of address from the last 3 months, such as a council tax bill"
},
{
"text": "Your vehicle's registration document (V5C) in your name"
},
{
"text": "A debit or credit card to pay the fee"
}
],
"where": "Customer Service Centre, Civic Centre, Market Street",
"when": "Monday to Friday, 9 am to 5 pm",
"online": "westbrook.example/parking-permits",
"cost": "£45 a year, £25 for an electric car",
"labels": {
"cost": "Cost",
"when": "Opening hours",
"bring": "What to bring",
"place": "Where and when",
"where": "Where",
"online": "Online"
},
"cta": {
"label": "Apply online",
"detail": "westbrook.example/parking-permits"
},
"issuedBy": "Issued by Parking Services, City of Westbrook",
"reference": "Ref. PS/2026/07",
"look": {
"logo": "auto",
"pace": "calm",
"align": "start",
"theme": "brand",
"corners": "soft",
"logoSize": "auto"
}
},
"metaData": {
"title": "How to get a residents' parking permit",
"captionTiny": "Live in permit zones A to F? Apply for a residents' parking permit online or at the Civic Centre. £45 a year, £25 for an electric car.",
"captionShort": "How to get a residents' parking permit. If you live in permit zones A to F and your car is registered at your address, you can apply online at westbrook.example/parking-permits or at the Civic Centre on Market Street, Monday to Friday, 9 am to 5 pm. Bring proof of address from the last 3 months and your V5C. A permit costs £45 a year, £25 for an electric car.",
"captionMedium": "How to get a residents' parking permit. Permits are for residents of zones A to F whose car is registered at their address. Step 1: check that your street is in a permit zone on our website. Step 2: get your documents together: proof of address from the last 3 months, such as a council tax bill, your vehicle's registration document (V5C) in your name, and a debit or credit card. Step 3: apply online, or in person at the Customer Service Centre in the Civic Centre on Market Street, Monday to Friday, 9 am to 5 pm. Step 4: pay the fee: £45 a year, or £25 for an electric car. Your permit is linked to your number plate within 5 working days, so there is nothing to display. Apply at westbrook.example/parking-permits. Issued by Parking Services, City of Westbrook.",
"captionLong": "How to get a residents' parking permit. Residents' parking permits let you park in the bays in your own zone without paying at the machine. They are for residents of permit zones A to F whose car is registered at their address. Here is how to apply. Step 1: check that your street is in a permit zone; the map of every zone is on our website. Step 2: get your documents together. You will need proof of your address from the last 3 months, such as a council tax bill, a tenancy agreement or a utility bill; your vehicle's registration document (V5C), in your name and at your address; and a debit or credit card to pay the fee. If you lease your car or drive a company car, a letter from the leasing company or your employer will do instead of the V5C. Step 3: apply online at westbrook.example/parking-permits, which takes about ten minutes, or in person at the Customer Service Centre in the Civic Centre on Market Street, open Monday to Friday, 9 am to 5 pm. Step 4: pay the fee when you apply: £45 a year, or £25 a year for a fully electric car. Your permit is linked to your number plate within 5 working days, so there is nothing to display in your windscreen, and we will email you when it is active. Visitors' permits can be bought online in the same way. If you need help applying, call us on 0300 123 4567 and we will take you through it. Issued by Parking Services, City of Westbrook. Ref. PS/2026/07.",
"hashtags": [
"westbrook",
"parking",
"residents",
"permits",
"councilservices"
]
}
}
}

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.