Status board, Clear civic 1.0.0
| Template | Status board, tpl_58dba04a91d9 |
|---|---|
| Variant | Clear civic |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 20 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 board of up to ten items, each with its state in words and a drawn symbol for ok, warning, stopped or information, arriving row by row in pages with a tally of each kind counting with them. metaData is the post's title, descriptions and hashtags and is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn: a kicker, the title, when the board was taken, up to ten items with their states, the source and the look. | |
clipData.kicker | text | up to 20 characters | Kicker: A word above the title, such as LIVE or THIS MORNING. | |
clipData.title | text | yes | up to 80 characters | Title: What the board shows. Shown from the first frame. |
clipData.asOf | text | up to 30 characters | As of: When the board was taken, in words, shown beside the tally from the first frame. | |
clipData.items | list | yes | at least 1, up to 10 | Items: One to ten items, drawn in the order sent (the order is information: a network, a floor, a menu). As many to a page as fit the frame; each item adds a second and a half, so ten run 20 seconds. |
clipData.items[] | group | Item | ||
clipData.items[].label | text | yes | up to 32 characters | Item: A line, a system, a lift, a car park, a product. |
clipData.items[].state | text | yes | up to 22 characters | State: The state in a few words, set bold in the kind's colour. |
clipData.items[].detail | text | up to 70 characters | Detail: Why, until when, what to do instead. Follows the state on its line. | |
clipData.items[].tone | enum | yes | ok, warning, stopped, info | Kind: Decides the symbol and its colour: a tick in a circle for OK, a triangle for a warning, an octagon with a bar for stopped, a square with an i for information. Warnings and stopped items are marked once their page is in. |
clipData.source | text | up to 60 characters | Source | |
clipData.look | group | Look: How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides. | ||
clipData.look.theme | enum | auto, brand, light, dark, bold | Theme: The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page. | |
clipData.look.pace | enum | auto, calm, standard, punchy | Pace: How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts. | |
clipData.look.corners | enum | auto, square, soft, round | Corners: The shape of cards, panels and marks. | |
clipData.look.align | enum | auto, start, centre | Text alignment: Where the text lines up. | |
clipData.look.logo | enum | auto, free | Logo: The style's own: the logo on the style's plate (a card, a disc, a badge) 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. | |
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": {
"kicker": {
"type": "string",
"maxLength": 20,
"title": "Kicker",
"description": "A word above the title, such as LIVE or THIS MORNING."
},
"title": {
"type": "string",
"maxLength": 80,
"title": "Title",
"description": "What the board shows. Shown from the first frame."
},
"asOf": {
"type": "string",
"maxLength": 30,
"title": "As of",
"description": "When the board was taken, in words, shown beside the tally from the first frame."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 32,
"title": "Item",
"description": "A line, a system, a lift, a car park, a product."
},
"state": {
"type": "string",
"maxLength": 22,
"title": "State",
"description": "The state in a few words, set bold in the kind's colour."
},
"detail": {
"type": "string",
"maxLength": 70,
"title": "Detail",
"description": "Why, until when, what to do instead. Follows the state on its line."
},
"tone": {
"type": "string",
"enum": [
"ok",
"warning",
"stopped",
"info"
],
"title": "Kind",
"description": "Decides the symbol and its colour: a tick in a circle for OK, a triangle for a warning, an octagon with a bar for stopped, a square with an i for information. Warnings and stopped items are marked once their page is in.",
"enumNames": [
"OK",
"Warning",
"Stopped",
"Information"
]
}
},
"required": [
"label",
"state",
"tone"
],
"additionalProperties": false,
"title": "Item"
},
"minItems": 1,
"maxItems": 10,
"title": "Items",
"description": "One to ten items, drawn in the order sent (the order is information: a network, a floor, a menu). As many to a page as fit the frame; each item adds a second and a half, so ten run 20 seconds."
},
"source": {
"type": "string",
"maxLength": 60,
"title": "Source"
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"auto",
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page.",
"enumNames": [
"The style's own",
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"auto",
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts.",
"enumNames": [
"The style's own",
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"auto",
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, panels and marks.",
"enumNames": [
"The style's own",
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"auto",
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"The style's own",
"At the start of the line",
"Centred"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) 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"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides."
}
},
"required": [
"title",
"items"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn: a kicker, the title, when the board was taken, up to ten items with their states, the source and the look."
},
"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": {
"kicker": {
"type": "string",
"maxLength": 20,
"title": "Kicker",
"description": "A word above the title, such as LIVE or THIS MORNING."
},
"title": {
"type": "string",
"maxLength": 80,
"title": "Title",
"description": "What the board shows. Shown from the first frame."
},
"asOf": {
"type": "string",
"maxLength": 30,
"title": "As of",
"description": "When the board was taken, in words, shown beside the tally from the first frame."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 32,
"title": "Item",
"description": "A line, a system, a lift, a car park, a product."
},
"state": {
"type": "string",
"maxLength": 22,
"title": "State",
"description": "The state in a few words, set bold in the kind's colour."
},
"detail": {
"type": "string",
"maxLength": 70,
"title": "Detail",
"description": "Why, until when, what to do instead. Follows the state on its line."
},
"tone": {
"type": "string",
"enum": [
"ok",
"warning",
"stopped",
"info"
],
"title": "Kind",
"description": "Decides the symbol and its colour: a tick in a circle for OK, a triangle for a warning, an octagon with a bar for stopped, a square with an i for information. Warnings and stopped items are marked once their page is in.",
"enumNames": [
"OK",
"Warning",
"Stopped",
"Information"
]
}
},
"required": [
"label",
"state",
"tone"
],
"additionalProperties": false,
"title": "Item"
},
"minItems": 1,
"maxItems": 10,
"title": "Items",
"description": "One to ten items, drawn in the order sent (the order is information: a network, a floor, a menu). As many to a page as fit the frame; each item adds a second and a half, so ten run 20 seconds."
},
"source": {
"type": "string",
"maxLength": 60,
"title": "Source"
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"auto",
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page.",
"enumNames": [
"The style's own",
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"auto",
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts.",
"enumNames": [
"The style's own",
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"auto",
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, panels and marks.",
"enumNames": [
"The style's own",
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"auto",
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"The style's own",
"At the start of the line",
"Centred"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) 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"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn: a kicker, the title, when the board was taken, up to ten items with their states, the source and the look."
},
"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_58dba04a91d9?variant=Clear%20civic&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": {
"kicker": "Live",
"title": "Tram and bus network this morning: one line suspended, two running late",
"asOf": "Monday, 07:45",
"items": [
{
"tone": "ok",
"label": "Line 1, Harbour to Northgate",
"state": "Good service"
},
{
"tone": "ok",
"label": "Line 2, Station to University",
"state": "Good service"
},
{
"tone": "warning",
"label": "Line 3, Old Town loop",
"state": "Delays up to 10 min",
"detail": "A tram broke down at Market Square and is being cleared"
},
{
"tone": "stopped",
"label": "Line 4, Customs Quay to Airport",
"state": "Suspended",
"detail": "Overhead line repairs until 10:00, replacement buses every 8 minutes"
},
{
"tone": "ok",
"label": "Line 5, Riverside to Hill Park",
"state": "Good service"
},
{
"tone": "warning",
"label": "Bus 11, Mill Lane to Westfield",
"state": "Diversion",
"detail": "Bridge Street is closed, the bus stops at Mill Lane instead"
},
{
"tone": "ok",
"label": "Bus 14, Station to Hospital",
"state": "Good service"
},
{
"tone": "info",
"label": "Bus 20, night line",
"state": "Not running now",
"detail": "Runs every night from 23:00"
},
{
"tone": "ok",
"label": "Ferry F1, North Bank",
"state": "Good service"
},
{
"tone": "ok",
"label": "Park and ride, Northgate",
"state": "Spaces free",
"detail": "About 300 spaces left"
}
],
"source": "Northwind Transit, live service information",
"look": {
"theme": "auto",
"pace": "auto",
"corners": "auto",
"align": "auto",
"logo": "auto"
}
},
"metaData": {
"title": "Tram and bus network this morning: Line 4 suspended, Line 3 and Bus 11 running late",
"captionTiny": "Travel update, 07:45: Line 4 to the airport is suspended until 10:00, replacement buses every 8 minutes. Line 3 and Bus 11 are running late. Everything else runs normally.",
"captionShort": "Travel update at 07:45 on Monday. Line 4 between Customs Quay and the Airport is suspended until about 10:00 for overhead line repairs, with replacement buses every 8 minutes. Line 3 on the Old Town loop has delays of up to 10 minutes after a tram broke down at Market Square, and Bus 11 is diverted while Bridge Street is closed. All other lines, the North Bank ferry and the Northgate park and ride run normally.",
"captionMedium": "Travel update at 07:45 on Monday. Line 4 between Customs Quay and the Airport is suspended until about 10:00 while the overhead line near the airport is repaired. Replacement buses run every 8 minutes from the tram stops, so allow twenty minutes more if you have a flight to catch. Line 3 on the Old Town loop has delays of up to 10 minutes after a tram broke down at Market Square; it is being towed away and the line should be back to normal within the hour. Bus 11 is diverted while Bridge Street is closed for the market and stops at Mill Lane instead. Lines 1, 2 and 5, Bus 14, the North Bank ferry and the Northgate park and ride, where about 300 spaces are free, all run normally. The night line, Bus 20, runs every night from 23:00. Check the live board before you set off.",
"captionLong": "Travel update at 07:45 on Monday. Line 4 between Customs Quay and the Airport is suspended until about 10:00 while the overhead line near the airport is repaired after last night's storm. Replacement buses run every 8 minutes from the tram stops along the line, marked with yellow signs, so allow twenty minutes more if you have a flight to catch; the airport express bus from the Station is the faster choice this morning. Line 3 on the Old Town loop has delays of up to 10 minutes after a tram broke down at Market Square. It is being towed away and the line should be back to normal within the hour, but expect full trams until then. Bus 11 is diverted while Bridge Street is closed for the market and stops at Mill Lane instead of Bridge Street and the Town Hall; the walk from Mill Lane to the Town Hall takes about five minutes. Lines 1, 2 and 5, Bus 14 to the Hospital, the North Bank ferry and the Northgate park and ride all run normally, and about 300 of the 900 spaces at Northgate are still free, which makes it the best place to leave a car this morning. Bus 20, the night line, is not running now and runs every night from 23:00. We will post the next update when Line 4 runs again, and the live board on our website is updated every minute. The network and the figures are illustrative.",
"hashtags": [
"travel",
"trams",
"buses",
"commute",
"serviceupdate",
"transit"
]
}
}
}
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.