Change, Keynote minimal 1.0.0
| Template | Change, tpl_6b592f8becfc |
|---|---|
| Variant | Keynote minimal |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 18 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 change from before to after: two values, or two words or dates, joined by an arrow that draws from one to the other, with the difference in the up or down colour, and up to five more changes after it, one at a time. 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, what changed, the before and the after, the prefix and unit, how the difference is written, a line of context, up to five more changes each on a page of its own, the source and the look. | |
clipData.kicker | text | up to 20 characters | Kicker: A word above the title, such as THEN AND NOW or PRICE CUT. | |
clipData.title | text | yes | up to 80 characters | What changed: Read first, so the two values land with their meaning. |
clipData.from | group | yes | Before: What it was: a value, or a word or date where the change is not a number. | |
clipData.from.text | text | up to 30 characters | When or what before: Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday. | |
clipData.from.value | number | 4 decimals | Value: Send it on both ends to show a figure and the difference. | |
clipData.from.date | datetime | Date: Written where no text is sent; on both ends without values, the days between are shown. | ||
clipData.to | group | yes | After: What it is now: a value, or a word or date where the change is not a number. | |
clipData.to.text | text | up to 30 characters | When or what after: Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday. | |
clipData.to.value | number | 4 decimals | Value: Send it on both ends to show a figure and the difference. | |
clipData.to.date | datetime | Date: Written where no text is sent; on both ends without values, the days between are shown. | ||
clipData.prefix | text | up to 3 characters | Prefix: Written before both values, such as a currency sign. | |
clipData.unit | text | up to 12 characters | Unit: Written after both values: a percent sign, kg, a share. | |
clipData.difference | enum | both, amount, percent, none | Difference shown: How the difference between two values is written. Use the amount alone for rates in percent. | |
clipData.note | text | up to 140 characters | Context: One or two lines under the difference. | |
clipData.more | list | at least 0, up to 5 | More changes: Further changes shown after the first, one at a time, each with what changed, its before and after and a line of context. A prefix or unit left out is the first change's. Each adds five seconds; five make about 33 seconds. | |
clipData.more[] | group | Change | ||
clipData.more[].title | text | yes | up to 80 characters | What changed |
clipData.more[].from | group | yes | Before: What it was: a value, or a word or date where the change is not a number. | |
clipData.more[].from.text | text | up to 30 characters | When or what before: Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday. | |
clipData.more[].from.value | number | 4 decimals | Value: Send it on both ends to show a figure and the difference. | |
clipData.more[].from.date | datetime | Date: Written where no text is sent; on both ends without values, the days between are shown. | ||
clipData.more[].to | group | yes | After: What it is now: a value, or a word or date where the change is not a number. | |
clipData.more[].to.text | text | up to 30 characters | When or what after: Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday. | |
clipData.more[].to.value | number | 4 decimals | Value: Send it on both ends to show a figure and the difference. | |
clipData.more[].to.date | datetime | Date: Written where no text is sent; on both ends without values, the days between are shown. | ||
clipData.more[].prefix | text | up to 3 characters | Prefix: Written before both values. Left out, the first change's. | |
clipData.more[].unit | text | up to 12 characters | Unit: Written after both values. Left out, the first change's. | |
clipData.more[].note | text | up to 140 characters | Context | |
clipData.source | text | up to 60 characters | Source | |
clipData.look | group | Look: How the clip looks and moves within its style. The same four 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. | |
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 422 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 THEN AND NOW or PRICE CUT."
},
"title": {
"type": "string",
"maxLength": 80,
"title": "What changed",
"description": "Read first, so the two values land with their meaning."
},
"from": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 30,
"title": "When or what before",
"description": "Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday."
},
"value": {
"type": "number",
"title": "Value",
"description": "Send it on both ends to show a figure and the difference."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "Written where no text is sent; on both ends without values, the days between are shown."
}
},
"additionalProperties": false,
"title": "Before",
"description": "What it was: a value, or a word or date where the change is not a number."
},
"to": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 30,
"title": "When or what after",
"description": "Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday."
},
"value": {
"type": "number",
"title": "Value",
"description": "Send it on both ends to show a figure and the difference."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "Written where no text is sent; on both ends without values, the days between are shown."
}
},
"additionalProperties": false,
"title": "After",
"description": "What it is now: a value, or a word or date where the change is not a number."
},
"prefix": {
"type": "string",
"maxLength": 3,
"title": "Prefix",
"description": "Written before both values, such as a currency sign."
},
"unit": {
"type": "string",
"maxLength": 12,
"title": "Unit",
"description": "Written after both values: a percent sign, kg, a share."
},
"difference": {
"type": "string",
"enum": [
"both",
"amount",
"percent",
"none"
],
"title": "Difference shown",
"description": "How the difference between two values is written. Use the amount alone for rates in percent."
},
"note": {
"type": "string",
"maxLength": 140,
"title": "Context",
"description": "One or two lines under the difference."
},
"more": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 80,
"title": "What changed"
},
"from": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 30,
"title": "When or what before",
"description": "Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday."
},
"value": {
"type": "number",
"title": "Value",
"description": "Send it on both ends to show a figure and the difference."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "Written where no text is sent; on both ends without values, the days between are shown."
}
},
"additionalProperties": false,
"title": "Before",
"description": "What it was: a value, or a word or date where the change is not a number."
},
"to": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 30,
"title": "When or what after",
"description": "Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday."
},
"value": {
"type": "number",
"title": "Value",
"description": "Send it on both ends to show a figure and the difference."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "Written where no text is sent; on both ends without values, the days between are shown."
}
},
"additionalProperties": false,
"title": "After",
"description": "What it is now: a value, or a word or date where the change is not a number."
},
"prefix": {
"type": "string",
"maxLength": 3,
"title": "Prefix",
"description": "Written before both values. Left out, the first change's."
},
"unit": {
"type": "string",
"maxLength": 12,
"title": "Unit",
"description": "Written after both values. Left out, the first change's."
},
"note": {
"type": "string",
"maxLength": 140,
"title": "Context"
}
},
"required": [
"title",
"from",
"to"
],
"additionalProperties": false,
"title": "Change"
},
"minItems": 0,
"maxItems": 5,
"title": "More changes",
"description": "Further changes shown after the first, one at a time, each with what changed, its before and after and a line of context. A prefix or unit left out is the first change's. Each adds five seconds; five make about 33 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."
},
"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."
},
"corners": {
"type": "string",
"enum": [
"auto",
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, panels and marks."
},
"align": {
"type": "string",
"enum": [
"auto",
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up."
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves within its style. The same four 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",
"from",
"to"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn: a kicker, what changed, the before and the after, the prefix and unit, how the difference is written, a line of context, up to five more changes each on a page of its own, 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 THEN AND NOW or PRICE CUT."
},
"title": {
"type": "string",
"maxLength": 80,
"title": "What changed",
"description": "Read first, so the two values land with their meaning."
},
"from": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 30,
"title": "When or what before",
"description": "Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday."
},
"value": {
"type": "number",
"title": "Value",
"description": "Send it on both ends to show a figure and the difference."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "Written where no text is sent; on both ends without values, the days between are shown."
}
},
"additionalProperties": false,
"title": "Before",
"description": "What it was: a value, or a word or date where the change is not a number."
},
"to": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 30,
"title": "When or what after",
"description": "Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday."
},
"value": {
"type": "number",
"title": "Value",
"description": "Send it on both ends to show a figure and the difference."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "Written where no text is sent; on both ends without values, the days between are shown."
}
},
"additionalProperties": false,
"title": "After",
"description": "What it is now: a value, or a word or date where the change is not a number."
},
"prefix": {
"type": "string",
"maxLength": 3,
"title": "Prefix",
"description": "Written before both values, such as a currency sign."
},
"unit": {
"type": "string",
"maxLength": 12,
"title": "Unit",
"description": "Written after both values: a percent sign, kg, a share."
},
"difference": {
"type": "string",
"enum": [
"both",
"amount",
"percent",
"none"
],
"title": "Difference shown",
"description": "How the difference between two values is written. Use the amount alone for rates in percent."
},
"note": {
"type": "string",
"maxLength": 140,
"title": "Context",
"description": "One or two lines under the difference."
},
"more": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 80,
"title": "What changed"
},
"from": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 30,
"title": "When or what before",
"description": "Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday."
},
"value": {
"type": "number",
"title": "Value",
"description": "Send it on both ends to show a figure and the difference."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "Written where no text is sent; on both ends without values, the days between are shown."
}
},
"additionalProperties": false,
"title": "Before",
"description": "What it was: a value, or a word or date where the change is not a number."
},
"to": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 30,
"title": "When or what after",
"description": "Written over the value, such as 2016 or Old price. Without values it is the thing shown, such as Monday."
},
"value": {
"type": "number",
"title": "Value",
"description": "Send it on both ends to show a figure and the difference."
},
"date": {
"type": "string",
"format": "date-time",
"title": "Date",
"description": "Written where no text is sent; on both ends without values, the days between are shown."
}
},
"additionalProperties": false,
"title": "After",
"description": "What it is now: a value, or a word or date where the change is not a number."
},
"prefix": {
"type": "string",
"maxLength": 3,
"title": "Prefix",
"description": "Written before both values. Left out, the first change's."
},
"unit": {
"type": "string",
"maxLength": 12,
"title": "Unit",
"description": "Written after both values. Left out, the first change's."
},
"note": {
"type": "string",
"maxLength": 140,
"title": "Context"
}
},
"required": [
"title",
"from",
"to"
],
"additionalProperties": false,
"title": "Change"
},
"minItems": 0,
"maxItems": 5,
"title": "More changes",
"description": "Further changes shown after the first, one at a time, each with what changed, its before and after and a line of context. A prefix or unit left out is the first change's. Each adds five seconds; five make about 33 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."
},
"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."
},
"corners": {
"type": "string",
"enum": [
"auto",
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, panels and marks."
},
"align": {
"type": "string",
"enum": [
"auto",
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up."
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves within its style. The same four 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, what changed, the before and the after, the prefix and unit, how the difference is written, a line of context, up to five more changes each on a page of its own, 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_6b592f8becfc?variant=Keynote%20minimal&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": "Ten years listed",
"title": "What one Norvik Energy share cost at the listing, and what it closed at today",
"from": {
"date": "2016-03-14T09:00:00+01:00",
"text": "Listing, 14 March 2016",
"value": 12.4
},
"to": {
"date": "2026-09-30T17:30:00+02:00",
"text": "Close, 30 September 2026",
"value": 58.75
},
"prefix": "€",
"unit": "a share",
"difference": "both",
"note": "10,000 euros put in at the listing would be worth more than 47,000 euros today, before dividends, fees and taxes are counted",
"more": [
{
"to": {
"text": "Dividend for 2025",
"value": 1.85
},
"from": {
"text": "Dividend for 2016",
"value": 0.32
},
"note": "The board has raised the dividend in each of the last nine years",
"unit": "a share",
"title": "The dividend paid on every share, in the first year and this year",
"prefix": "€"
},
{
"to": {
"text": "Today",
"value": 2310
},
"from": {
"text": "At the listing",
"value": 640
},
"unit": "people",
"title": "How many people Norvik Energy employs",
"prefix": ""
}
],
"source": "Northwind Exchange closes, adjusted for the 2021 split",
"look": {
"theme": "auto",
"pace": "auto",
"corners": "auto",
"align": "auto"
}
},
"metaData": {
"title": "Norvik Energy shares since the listing: from 12.40 euros in 2016 to 58.75 euros at today's close",
"captionTiny": "Norvik Energy listed at 12.40 euros a share in March 2016. Today it closed at 58.75 euros, up 46.35 euros or 373 percent. 10,000 euros at the listing would be worth over 47,000 now.",
"captionShort": "Ten years after its listing, Norvik Energy closed today at 58.75 euros a share. The shares were first sold at 12.40 euros in March 2016, so the price has risen by 46.35 euros, or 373 percent. Somebody who put 10,000 euros in at the listing would hold shares worth more than 47,000 euros today, before dividends, fees and taxes. The prices are the Northwind Exchange's closing prices, adjusted for the share split in 2021. Past performance says nothing about the future.",
"captionMedium": "Ten years after its listing, Norvik Energy closed today at 58.75 euros a share on the Northwind Exchange.\n\nThe shares were first sold at 12.40 euros on 14 March 2016, when the company was a regional grid operator with two wind parks and a waiting list of industrial customers. Since then the price has risen by 46.35 euros, or 373 percent.\n\nWhat that means for an early buyer: somebody who put 10,000 euros in at the listing would hold shares worth more than 47,000 euros today. That figure is before dividends, which Norvik has paid every year since 2018, and before fees and taxes, which depend on where and how the shares were held.\n\nThe path was not a straight line. The shares lost more than a third of their value in 2020, when two offshore projects were delayed, and took until the end of 2021 to recover. The 2021 split, one old share into four new ones, is already counted in the prices shown here, so the two figures can be compared directly.\n\nThe prices are the exchange's official closing prices. Past performance says nothing about how a share will do in the future, and nothing in this clip is investment advice.",
"captionLong": "Ten years after its listing, Norvik Energy closed today at 58.75 euros a share on the Northwind Exchange.\n\nThe shares were first sold at 12.40 euros on 14 March 2016. At the time Norvik was a regional grid operator with two wind parks, a few hundred employees and a waiting list of industrial customers who wanted to buy their power directly from the turbines. The listing raised money for three more parks and a storage site, and the shares were taken up mostly by pension funds and local savers.\n\nSince then the price has risen by 46.35 euros, or 373 percent. Somebody who put 10,000 euros in at the listing would hold shares worth more than 47,000 euros today. That figure is before dividends, which Norvik has paid every year since 2018, and before fees and taxes, which depend on where and how the shares were held. Counting the dividends, the return would be higher still.\n\nThe path was not a straight line. In 2020 two offshore projects were delayed by more than a year, the company cut its forecast twice, and the shares lost more than a third of their value within a few months. They took until the end of 2021 to recover. In the same year Norvik split every old share into four new ones to make them easier to trade in small amounts. That split is already counted in the prices shown here, so the price at the listing and today's close can be compared directly.\n\nSince 2022 the company has grown mostly through long contracts with industrial buyers, which now take more than half of what its parks produce. Analysts at the exchange point to those contracts as the main reason the shares have been steadier than those of other power producers, and to the next round of grid fees, due next spring, as the main risk.\n\nThe prices are the exchange's official closing prices, adjusted for the 2021 split. Past performance says nothing about how a share will do in the future, and nothing in this clip is investment advice. If you are thinking about buying or selling shares, look at the company's own reports and talk to somebody who knows your situation.",
"hashtags": [
"NorvikEnergy",
"shares",
"stockmarket",
"investing",
"thenandnow",
"energy",
"NorthwindExchange",
"markets",
"longterm",
"dividends"
]
}
}
}
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.