Tech and industry (Energy and utilities), Tariff change
A tariff change as a departures board: the unit price now and from the date it changes on flaps with its unit, the change in the brand's up or down colour, the tariff, the date and what the prices include, the standing charge old and new where sent, the supplier's notice at the foot throughout. The board ripples, the prices are told in turn, before what to do, the button and the presenter. Eleven seconds.
| Template | Tech and industry (Energy and utilities), tpl_1aa6650d866f |
|---|---|
| Variant | Tariff change |
| 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
A tariff change as a departures board: the unit price now and from its date on flaps with its unit, the change in your up or down colour, the tariff, the date and what the prices include, the standing charge old and new where sent, what to do, your notice throughout. Each told in turn, then the button and your presenter. Eleven seconds. metaData is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: the unit prices and the date they change, the standing charge, the tariff and what the prices include, the words on the board, what to do, 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 Price change. | |
clipData.kicker | text | up to 40 characters | Kicker: A short line above the headline, such as Your electricity tariff. | |
clipData.headline | text | up to 64 characters | Headline: The headline, set large. Say what changes and from when; never promise a saving the prices do not show. | |
clipData.effective | datetime | yes | Date the new prices start: The day the new prices apply from, such as 2026-12-01T00:00:00+00:00. Only the date is read, as it is written here, and it is spelled out in the channel's language beside the new price. | |
clipData.oldPrice | number | yes | 4 decimals | Unit price now: The unit price today, in the unit below. Drawn exactly as sent, with as many decimals as the more precise of the two prices. |
clipData.newPrice | number | yes | 4 decimals | Unit price from the date: The unit price from the date above, in the unit below. Whether it rose or fell is read from the two prices; nothing else is worked out. |
clipData.unit | text | yes | up to 16 characters | Unit: The unit both unit prices are in, such as ct/kWh or p/kWh. Required: a price is never shown without its unit. |
clipData.change | number | 2 decimals | Change in percent: The change as you state it, signed (4.8 for a rise, -3.2 for a fall), drawn exactly as sent beside the direction. Leave it out to show the direction alone. | |
clipData.oldStanding | number | 4 decimals | Standing charge now: The standing charge or base price today, in the standing charge unit below. Shown only with the new one and its unit. | |
clipData.newStanding | number | 4 decimals | Standing charge from the date: The standing charge from the date above, in the standing charge unit below. | |
clipData.standingUnit | text | up to 16 characters | Standing charge unit: The unit of the standing charge, such as EUR/month or p/day. The standing charge is drawn only where this is sent: a price is never shown without its unit. | |
clipData.tariff | text | yes | up to 64 characters | Tariff: The tariff the prices belong to. Shown beside the prices on every frame. |
clipData.basis | text | yes | up to 120 characters | What the prices include: What the prices include and leave out, such as whether VAT, grid fees and levies are in. Shown under the prices on every frame. |
clipData.labels | group | Words on the board: The words the board shows beside the figures, in your language. | ||
clipData.labels.price | text | up to 24 characters | Unit price: The caption over the unit prices, such as Unit price. | |
clipData.labels.now | text | up to 16 characters | Now: The caption of today's price, such as Now. | |
clipData.labels.from | text | up to 16 characters | From: The caption of the new price, such as From. The date follows it. | |
clipData.labels.standing | text | up to 24 characters | Standing charge: The words on the standing charge's row, such as Standing charge. | |
clipData.labels.rise | text | up to 24 characters | Price rises: Shown beside the new price when it is higher than today's, such as Price rises. | |
clipData.labels.fall | text | up to 24 characters | Price falls: Shown beside the new price when it is lower than today's, such as Price falls. | |
clipData.labels.same | text | up to 24 characters | No change: Shown beside the new price when the two are the same, such as No change. | |
clipData.action | text | up to 160 characters | What to do: One or two sentences shown at the end above the button: what the customer should do, and by when. Never promise a saving. | |
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 supplies, your licence or registration, and whether the prices include VAT, 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 the customer's right to leave or how much notice was given. | |
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=Tariff%20change&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": "Price change",
"kicker": "Your electricity tariff",
"headline": "Your unit price changes on 1 December",
"effective": "2026-12-01T00:00:00+00:00",
"oldPrice": 31.45,
"newPrice": 33.12,
"unit": "ct/kWh",
"change": 5.3,
"oldStanding": 11.9,
"newStanding": 12.4,
"standingUnit": "EUR/month",
"tariff": "Lindenau Strom Klassik, supply area Lindenau",
"basis": "Per kWh and the base price, including VAT at 19%, grid fees and levies",
"labels": {
"now": "Now",
"fall": "Price falls",
"from": "From",
"rise": "Price rises",
"same": "No change",
"price": "Unit price",
"standing": "Standing charge"
},
"action": "You do not need to do anything. If you would rather switch, you can leave without a fee until 30 November.",
"cta": {
"label": "See the new prices",
"detail": "stadtwerke-lindenau.example/prices"
},
"notice": "Stadtwerke Lindenau GmbH, licensed electricity supplier under the German Energy Industry Act. All prices include VAT at 19%, grid fees and levies. You may end your contract in writing when prices change.",
"footnote": "We wrote to every affected customer on 1 October 2026, more than 30 days before the change.",
"look": {
"logo": "auto",
"pace": "standard",
"align": "start",
"theme": "dark",
"corners": "soft",
"logoSize": "auto"
}
},
"metaData": {
"title": "Your electricity prices change on 1 December",
"captionTiny": "From 1 December our unit price goes from 31.45 to 33.12 ct/kWh, including VAT. You do not need to do anything.",
"captionShort": "Our unit price for Lindenau Strom Klassik goes from 31.45 to 33.12 ct/kWh from 1 December 2026, and the standing charge from 11.90 to 12.40 EUR/month. Prices include VAT at 19%, grid fees and levies. You do not need to do anything.",
"captionMedium": "From 1 December 2026 the unit price of Lindenau Strom Klassik changes from 31.45 to 33.12 ct/kWh, and the standing charge from 11.90 to 12.40 EUR/month. All prices include VAT at 19%, grid fees and levies. You do not need to do anything. If you would rather switch, you can leave without a fee until 30 November. Stadtwerke Lindenau GmbH, licensed electricity supplier.",
"captionLong": "From 1 December 2026 the unit price of Lindenau Strom Klassik, supply area Lindenau, changes from 31.45 to 33.12 ct/kWh, and the standing charge from 11.90 to 12.40 EUR/month. All prices include VAT at 19%, grid fees and levies. We wrote to every affected customer on 1 October 2026, more than 30 days before the change. You do not need to do anything. If you would rather switch to another tariff or another supplier, you can leave without a fee until 30 November. You can see the new prices and compare tariffs at stadtwerke-lindenau.example/prices. Stadtwerke Lindenau GmbH, licensed electricity supplier under the German Energy Industry Act.",
"hashtags": [
"energy",
"electricity",
"tariff",
"energyprices",
"utilities"
]
}
}
}
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.