Tech and industry (Energy and utilities), Service status
Every service and its state as a departures board: up to twelve rows, each service and its state in your words on flaps with a lamp in the colour you chose, an incident explained, the time of the update, the operator's notice at the foot throughout. The board ripples, then each service is told in turn, before a line, the button and the presenter. Seven to fifteen seconds: it grows with the number of services.
| Template | Tech and industry (Energy and utilities), tpl_1aa6650d866f |
|---|---|
| Variant | Service status |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 11 seconds |
Example video
The 1x1 cut of this variant, drawn from its own worked example. Open the video on its own.
What it accepts
Every service and its state as a departures board: up to twelve rows, each service's name and state on flaps with a lamp in the colour you chose, an incident explained, the time of the update, your notice throughout. Each row told in turn, then a line, the button and your presenter. Seven to fifteen seconds, it grows with the number of services. metaData is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: the services with their states and lamps, the incident, the time of the update, the words on the board, the line at the end, the call to action and your notice. | |
clipData.section | text | up to 32 characters | Section: The section in the header, painted as a sign beside your title line, such as Service status. | |
clipData.kicker | text | up to 40 characters | Kicker: A short line above the headline, such as Network and services. | |
clipData.headline | text | up to 64 characters | Headline: The headline, set large. Say what the board shows; do not promise when a fault will be fixed unless the incident says so. | |
clipData.updated | datetime | yes | Time of this update: When this status was last updated, such as 2026-10-18T14:30:00+02:00. The time and the day are read as written and set under the headline in the channel's language. | |
clipData.services | list | yes | at least 1, up to 12 | Services: One to twelve services, each a row of the board with its name, its state in your words and a lamp. Each is told in turn, from the first. Where the rows are too many for the frame the board pages, the page of the row being told shown. |
clipData.services[] | group | Service | ||
clipData.services[].name | text | yes | up to 40 characters | Service: The service, such as Electricity network, Water supply, Customer line or Mobile app. |
clipData.services[].state | text | yes | up to 40 characters | State: Its state in your words, such as Operating normally or Down, we are working on it. A lamp is never read alone: this is what the row says. |
clipData.services[].lamp | enum | up, brand, down, off | Lamp: The lamp of the row. Up colour: working as it should. Brand colour: something to know, such as works or a delay. Down colour: a fault or an outage. Off: not in service or not known. Left out, the lamp is off. | |
clipData.incident | group | Incident: An incident explained, such as what has happened, where and what you are doing about it. Left out, nothing is drawn. Name areas, never an address. | ||
clipData.incident.title | text | up to 60 characters | Incident title: What happened and where, such as Online account is down. | |
clipData.incident.text | text | up to 300 characters | Incident text: The explanation in a few sentences, such as the cause, who is affected and what customers can do meanwhile. Set in as many lines as it takes, never cut. | |
clipData.labels | group | Words on the board: The words the board shows beside the rows, in your language. | ||
clipData.labels.service | text | up to 16 characters | Service heading: The heading over the services, such as Service. | |
clipData.labels.state | text | up to 16 characters | State heading: The heading over the states, such as Status. | |
clipData.labels.updated | text | up to 16 characters | Updated: The word before the time of the update, such as Updated. | |
clipData.labels.incident | text | up to 16 characters | Incident: The word over the incident, such as Incident. | |
clipData.advice | text | up to 120 characters | Line at the end: One sentence shown at the end above the button, such as where to check the live status. Left out, nothing is drawn. | |
clipData.cta | group | Call to action: The button at the end and the line under it, such as a web address, a handle or a phone number. | ||
clipData.cta.label | text | yes | up to 28 characters | Button: What the button says. |
clipData.cta.detail | text | up to 48 characters | Line under it: An address, a handle, an app, a phone number. | |
clipData.notice | text | yes | up to 300 characters | Notice: Who operates the networks and supplies, and under what licence, as your regulator asks. Shown at the foot from the first frame to the last; a long notice is set smaller, never cut. |
clipData.footnote | text | up to 200 characters | Small print: Any other line that must be shown, such as how customers who rely on medical equipment can register for priority support. | |
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: dark, standard pace, 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.
Ask Reelwire for the whole JSON Schema, the document your content is checked against, without signing in:
curl "https://app.reelwire.io/v1/formats/template/tpl_1aa6650d866f?variant=Service%20status&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": {
"section": "Service status",
"kicker": "Network and services",
"headline": "Where we stand this afternoon",
"updated": "2026-10-18T14:30:00+02:00",
"services": [
{
"lamp": "up",
"name": "Electricity network",
"state": "Operating normally"
},
{
"lamp": "up",
"name": "Gas network",
"state": "Operating normally"
},
{
"lamp": "brand",
"name": "Water supply",
"state": "Low pressure in Hafenviertel"
},
{
"lamp": "brand",
"name": "District heating",
"state": "Planned works tonight"
},
{
"lamp": "brand",
"name": "Customer line",
"state": "Busy, waiting about 10 minutes"
},
{
"lamp": "down",
"name": "Online account",
"state": "Down, we are working on it"
},
{
"lamp": "up",
"name": "Mobile app",
"state": "Operating normally"
}
],
"incident": {
"text": "A fault in our login system since 13:10 means you cannot sign in to your online account. You can still use the app and our customer line, and your meter readings and bills are safe.",
"title": "Online account is down"
},
"labels": {
"state": "Status",
"service": "Service",
"updated": "Updated",
"incident": "Incident"
},
"advice": "Check the live status at any time, or call us for anything urgent.",
"cta": {
"label": "Check live status",
"detail": "lindenau-netz.example/status"
},
"notice": "Lindenau Netz GmbH operates the electricity, gas and water networks in Lindenau under the German Energy Industry Act. Stadtwerke Lindenau GmbH is the licensed supplier.",
"footnote": "Customers who rely on medical equipment can register for priority support: lindenau-netz.example/priority.",
"look": {
"logo": "auto",
"pace": "standard",
"align": "start",
"theme": "dark",
"corners": "soft",
"logoSize": "auto"
}
},
"metaData": {
"title": "Network and service status",
"captionTiny": "Service status, 18 October, 14:30: power, gas and the app are running. Our online account is down and we are working on it.",
"captionShort": "Service status, 18 October, 14:30. Electricity, gas and the mobile app are operating normally. Water pressure is low in Hafenviertel, district heating has planned works tonight and our online account is down. Call us or use the app meanwhile.",
"captionMedium": "Service status, Sunday 18 October 2026, 14:30. Electricity network: operating normally. Gas network: operating normally. Water supply: low pressure in Hafenviertel. District heating: planned works tonight. Customer line: busy, waiting about 10 minutes. Online account: down, we are working on it. Mobile app: operating normally. A fault in our login system since 13:10 means you cannot sign in to your online account; the app and the customer line still work, and your meter readings and bills are safe.",
"captionLong": "Service status, Sunday 18 October 2026, 14:30. Electricity network: operating normally. Gas network: operating normally. Water supply: low pressure in Hafenviertel. District heating: planned works tonight. Customer line: busy, waiting about 10 minutes. Online account: down, we are working on it. Mobile app: operating normally. A fault in our login system since 13:10 means you cannot sign in to your online account. You can still use the mobile app and our customer line, and your meter readings and bills are safe. Check the live status at lindenau-netz.example/status. Customers who rely on medical equipment can register for priority support. Lindenau Netz GmbH operates the electricity, gas and water networks in Lindenau under the German Energy Industry Act.",
"hashtags": [
"servicestatus",
"utilities",
"energy",
"customerservice",
"gridupdate"
]
}
}
}
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.