Skip to main content

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.

TemplateTech and industry (Energy and utilities), tpl_1aa6650d866f
VariantTariff change
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length11 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.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip 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.sectiontextup to 32 charactersSection: The section in the header, painted as a sign beside your title line, such as Price change.
clipData.kickertextup to 40 charactersKicker: A short line above the headline, such as Your electricity tariff.
clipData.headlinetextup to 64 charactersHeadline: The headline, set large. Say what changes and from when; never promise a saving the prices do not show.
clipData.effectivedatetimeyesDate 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.oldPricenumberyes4 decimalsUnit 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.newPricenumberyes4 decimalsUnit 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.unittextyesup to 16 charactersUnit: The unit both unit prices are in, such as ct/kWh or p/kWh. Required: a price is never shown without its unit.
clipData.changenumber2 decimalsChange 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.oldStandingnumber4 decimalsStanding 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.newStandingnumber4 decimalsStanding charge from the date: The standing charge from the date above, in the standing charge unit below.
clipData.standingUnittextup to 16 charactersStanding 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.tarifftextyesup to 64 charactersTariff: The tariff the prices belong to. Shown beside the prices on every frame.
clipData.basistextyesup to 120 charactersWhat 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.labelsgroupWords on the board: The words the board shows beside the figures, in your language.
clipData.labels.pricetextup to 24 charactersUnit price: The caption over the unit prices, such as Unit price.
clipData.labels.nowtextup to 16 charactersNow: The caption of today's price, such as Now.
clipData.labels.fromtextup to 16 charactersFrom: The caption of the new price, such as From. The date follows it.
clipData.labels.standingtextup to 24 charactersStanding charge: The words on the standing charge's row, such as Standing charge.
clipData.labels.risetextup to 24 charactersPrice rises: Shown beside the new price when it is higher than today's, such as Price rises.
clipData.labels.falltextup to 24 charactersPrice falls: Shown beside the new price when it is lower than today's, such as Price falls.
clipData.labels.sametextup to 24 charactersNo change: Shown beside the new price when the two are the same, such as No change.
clipData.actiontextup to 160 charactersWhat 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.ctagroupCall 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.labeltextyesup to 28 charactersButton: What the button says.
clipData.cta.detailtextup to 48 charactersLine under it: An address, a handle, an app, a phone number.
clipData.noticetextyesup to 300 charactersNotice: 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.footnotetextup to 200 charactersSmall print: Any other line that must be shown, such as the customer's right to leave or how much notice was given.
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: dark, standard pace, 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.

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.