Skip to main content

Status board, Clear civic 1.0.0

TemplateStatus board, tpl_58dba04a91d9
VariantClear civic
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length20 seconds

Example video​

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

What it accepts​

A 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.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip 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.kickertextup to 20 charactersKicker: A word above the title, such as LIVE or THIS MORNING.
clipData.titletextyesup to 80 charactersTitle: What the board shows. Shown from the first frame.
clipData.asOftextup to 30 charactersAs of: When the board was taken, in words, shown beside the tally from the first frame.
clipData.itemslistyesat least 1, up to 10Items: 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[]groupItem
clipData.items[].labeltextyesup to 32 charactersItem: A line, a system, a lift, a car park, a product.
clipData.items[].statetextyesup to 22 charactersState: The state in a few words, set bold in the kind's colour.
clipData.items[].detailtextup to 70 charactersDetail: Why, until when, what to do instead. Follows the state on its line.
clipData.items[].toneenumyesok, warning, stopped, infoKind: 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.sourcetextup to 60 charactersSource
clipData.lookgroupLook: 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.themeenumauto, brand, light, dark, boldTheme: 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.paceenumauto, calm, standard, punchyPace: How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts.
clipData.look.cornersenumauto, square, soft, roundCorners: The shape of cards, panels and marks.
clipData.look.alignenumauto, start, centreText alignment: Where the text lines up.
clipData.look.logoenumauto, freeLogo: 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.
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": {
"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.