Skip to main content

Finance (Banks), Economist's view 1.0.0

TemplateFinance (Banks), tpl_c43b789e739a
VariantEconomist's view
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length17 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 bank economist's outlook: the headline, your presenter as the economist with their words as a calm pull quote, one to four forecasts with what they were before, and a line over time. Complete on the first frame; the quote, each forecast and the line are lit in turn, then the button. The legal text stays on screen. One and a half seconds longer per forecast. metaData is never drawn.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip data: Everything drawn in the clip: the section, the headline, the economist's quote, the forecasts, the line, the call to action and the legal text.
clipData.sectiontextup to 24 charactersSection: What the post is about, set small in capitals at the end of the header, such as Outlook or Research.
clipData.headlinetextyesup to 64 charactersHeadline: The title of the post: the outlook in one line.
clipData.quotetextup to 220 charactersQuote: The economist's own words, set as a calm pull quote beside your brand's presenter, whose name and role come from the brand's badge. One to three sentences.
clipData.forecastsLabeltextup to 32 charactersForecasts caption: The caption over the forecasts, such as Our forecasts. Left out, none is drawn.
clipData.forecastslistyesat least 1, up to 4Forecasts: One to four forecasts, in the order they are shown, each lit in turn while its figure counts calmly to exactly what was sent.
clipData.forecasts[]groupForecast
clipData.forecasts[].labeltextyesup to 32 charactersLabel: What is forecast, and for when.
clipData.forecasts[].valuenumberyes3 decimalsForecast: The forecast figure, such as 3.25 for 3.25%. Shown exactly as sent; a minus sign for a fall below nought.
clipData.forecasts[].unittextup to 12 charactersUnit: What the figure is, such as % or bn. A percent sign at its start stays on the figure.
clipData.forecasts[].previousnumber3 decimalsBefore: What the figure is now or was in the last forecast, drawn small before it with an arrow in your up or down colour. Left out, none is drawn.
clipData.seriesgroupLine: A figure over time, drawn as one calm line after the forecasts, such as the policy rate. Left out, no line is drawn.
clipData.series.labeltextup to 48 charactersCaption: What the line shows, as a caption over it.
clipData.series.valueslistyesat least 2, up to 40Values: Two to forty numbers, oldest first. Only the line is drawn, never the numbers.
clipData.series.values[]number4 decimalsValue
clipData.series.fromtextup to 16 charactersFirst label: The time at the start of the line, under its first point, such as 2022.
clipData.series.totextup to 16 charactersLast label: The time at the end of the line, under its last point, such as 2027.
clipData.ctagroupCall to action: The button at the end and the line under it, such as a web address 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 phone number, a branch.
clipData.legaltextup to 260 charactersLegal text: What must be shown with the forecasts, such as that they are views, not a promise and not advice. On screen from the first frame to the last.
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: the brand's colours, calm, square corners, 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.

The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"section": {
"type": "string",
"maxLength": 24,
"title": "Section",
"description": "What the post is about, set small in capitals at the end of the header, such as Outlook or Research."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "The title of the post: the outlook in one line."
},
"quote": {
"type": "string",
"maxLength": 220,
"title": "Quote",
"description": "The economist's own words, set as a calm pull quote beside your brand's presenter, whose name and role come from the brand's badge. One to three sentences."
},
"forecastsLabel": {
"type": "string",
"maxLength": 32,
"title": "Forecasts caption",
"description": "The caption over the forecasts, such as Our forecasts. Left out, none is drawn."
},
"forecasts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 32,
"title": "Label",
"description": "What is forecast, and for when."
},
"value": {
"type": "number",
"title": "Forecast",
"description": "The forecast figure, such as 3.25 for 3.25%. Shown exactly as sent; a minus sign for a fall below nought."
},
"unit": {
"type": "string",
"maxLength": 12,
"title": "Unit",
"description": "What the figure is, such as % or bn. A percent sign at its start stays on the figure."
},
"previous": {
"type": "number",
"title": "Before",
"description": "What the figure is now or was in the last forecast, drawn small before it with an arrow in your up or down colour. Left out, none is drawn."
}
},
"required": [
"label",
"value"
],
"additionalProperties": false,
"title": "Forecast"
},
"minItems": 1,
"maxItems": 4,
"title": "Forecasts",
"description": "One to four forecasts, in the order they are shown, each lit in turn while its figure counts calmly to exactly what was sent."
},
"series": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 48,
"title": "Caption",
"description": "What the line shows, as a caption over it."
},
"values": {
"type": "array",
"items": {
"type": "number",
"title": "Value"
},
"minItems": 2,
"maxItems": 40,
"title": "Values",
"description": "Two to forty numbers, oldest first. Only the line is drawn, never the numbers."
},
"from": {
"type": "string",
"maxLength": 16,
"title": "First label",
"description": "The time at the start of the line, under its first point, such as 2022."
},
"to": {
"type": "string",
"maxLength": 16,
"title": "Last label",
"description": "The time at the end of the line, under its last point, such as 2027."
}
},
"required": [
"values"
],
"additionalProperties": false,
"title": "Line",
"description": "A figure over time, drawn as one calm line after the forecasts, such as the policy rate. Left out, no line is drawn."
},
"cta": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 28,
"title": "Button",
"description": "What the button says."
},
"detail": {
"type": "string",
"maxLength": 48,
"title": "Line under it",
"description": "An address, a phone number, a branch."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Call to action",
"description": "The button at the end and the line under it, such as a web address or a phone number."
},
"legal": {
"type": "string",
"maxLength": 260,
"title": "Legal text",
"description": "What must be shown with the forecasts, such as that they are views, not a promise and not advice. On screen from the first frame to the last."
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "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.",
"enumNames": [
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts.",
"enumNames": [
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, pictures and buttons.",
"enumNames": [
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"At the start of the line",
"Centred"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "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.",
"enumNames": [
"The style's own",
"As it is, no plate or crop"
]
},
"logoSize": {
"type": "string",
"enum": [
"auto",
"small",
"large"
],
"title": "Logo size",
"description": "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.",
"enumNames": [
"Standard",
"Small",
"Large"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "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: the brand's colours, calm, square corners, text at the start."
}
},
"required": [
"headline",
"forecasts"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the headline, the economist's quote, the forecasts, the line, the call to action and the legal text."
},
"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": {
"section": {
"type": "string",
"maxLength": 24,
"title": "Section",
"description": "What the post is about, set small in capitals at the end of the header, such as Outlook or Research."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "The title of the post: the outlook in one line."
},
"quote": {
"type": "string",
"maxLength": 220,
"title": "Quote",
"description": "The economist's own words, set as a calm pull quote beside your brand's presenter, whose name and role come from the brand's badge. One to three sentences."
},
"forecastsLabel": {
"type": "string",
"maxLength": 32,
"title": "Forecasts caption",
"description": "The caption over the forecasts, such as Our forecasts. Left out, none is drawn."
},
"forecasts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 32,
"title": "Label",
"description": "What is forecast, and for when."
},
"value": {
"type": "number",
"title": "Forecast",
"description": "The forecast figure, such as 3.25 for 3.25%. Shown exactly as sent; a minus sign for a fall below nought."
},
"unit": {
"type": "string",
"maxLength": 12,
"title": "Unit",
"description": "What the figure is, such as % or bn. A percent sign at its start stays on the figure."
},
"previous": {
"type": "number",
"title": "Before",
"description": "What the figure is now or was in the last forecast, drawn small before it with an arrow in your up or down colour. Left out, none is drawn."
}
},
"required": [
"label",
"value"
],
"additionalProperties": false,
"title": "Forecast"
},
"minItems": 1,
"maxItems": 4,
"title": "Forecasts",
"description": "One to four forecasts, in the order they are shown, each lit in turn while its figure counts calmly to exactly what was sent."
},
"series": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 48,
"title": "Caption",
"description": "What the line shows, as a caption over it."
},
"values": {
"type": "array",
"items": {
"type": "number",
"title": "Value"
},
"minItems": 2,
"maxItems": 40,
"title": "Values",
"description": "Two to forty numbers, oldest first. Only the line is drawn, never the numbers."
},
"from": {
"type": "string",
"maxLength": 16,
"title": "First label",
"description": "The time at the start of the line, under its first point, such as 2022."
},
"to": {
"type": "string",
"maxLength": 16,
"title": "Last label",
"description": "The time at the end of the line, under its last point, such as 2027."
}
},
"additionalProperties": false,
"title": "Line",
"description": "A figure over time, drawn as one calm line after the forecasts, such as the policy rate. Left out, no line is drawn."
},
"cta": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 28,
"title": "Button",
"description": "What the button says."
},
"detail": {
"type": "string",
"maxLength": 48,
"title": "Line under it",
"description": "An address, a phone number, a branch."
}
},
"additionalProperties": false,
"title": "Call to action",
"description": "The button at the end and the line under it, such as a web address or a phone number."
},
"legal": {
"type": "string",
"maxLength": 260,
"title": "Legal text",
"description": "What must be shown with the forecasts, such as that they are views, not a promise and not advice. On screen from the first frame to the last."
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "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.",
"enumNames": [
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts.",
"enumNames": [
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, pictures and buttons.",
"enumNames": [
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"At the start of the line",
"Centred"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "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.",
"enumNames": [
"The style's own",
"As it is, no plate or crop"
]
},
"logoSize": {
"type": "string",
"enum": [
"auto",
"small",
"large"
],
"title": "Logo size",
"description": "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.",
"enumNames": [
"Standard",
"Small",
"Large"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "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: the brand's colours, calm, square corners, text at the start."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the headline, the economist's quote, the forecasts, the line, the call to action and the legal text."
},
"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_c43b789e739a?variant=Economist's%20view&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": "Outlook",
"headline": "Rates have peaked, growth returns slowly",
"quote": "Inflation is back near target, so we expect rates to come down gently through next year. Borrowing should get cheaper, while savings still earn more than prices rise.",
"forecastsLabel": "Our forecasts",
"forecasts": [
{
"unit": "%",
"label": "Policy rate, end of 2027",
"value": 3.25,
"previous": 4.5
},
{
"unit": "%",
"label": "Inflation, 2027 average",
"value": 2.1,
"previous": 2.8
},
{
"unit": "%",
"label": "Economic growth, 2027",
"value": 1.4,
"previous": 0.9
},
{
"unit": "%",
"label": "Unemployment, end of 2027",
"value": 4.3,
"previous": 4.1
}
],
"series": {
"to": "2027",
"from": "2022",
"label": "Policy rate in percent, with our forecast",
"values": [
0.25,
0.75,
1.75,
2.5,
3.5,
4.25,
4.75,
5,
5.25,
5.25,
5.25,
5,
4.75,
4.5,
4.25,
4,
3.75,
3.5,
3.25,
3.25
]
},
"cta": {
"label": "Read the full outlook",
"detail": "alpstein.example/outlook"
},
"legal": "Forecasts are the views of our economists on the date of publication and may change without notice. They are not a guarantee of future results and are not investment advice.",
"look": {
"logo": "auto",
"pace": "calm",
"align": "start",
"theme": "brand",
"corners": "square",
"logoSize": "auto"
}
},
"metaData": {
"title": "Economist's view: rates have peaked, growth returns slowly",
"captionTiny": "Our chief economist expects rates to fall to 3.25% by the end of 2027, with inflation back near target.",
"captionShort": "Rates have peaked. Our chief economist expects the policy rate to come down gently to 3.25% by the end of 2027, inflation to average 2.1% and growth to pick up to 1.4%. What it means for your mortgage and your savings is in the full outlook. Forecasts are views, not a guarantee.",
"captionMedium": "Rates have peaked, and growth returns slowly. Our chief economist expects the policy rate to come down gently from 4.50% to 3.25% by the end of 2027, with inflation averaging 2.1% and the economy growing by 1.4%. Borrowing should get cheaper step by step, while savings still earn more than prices rise. Read the full outlook for what it means for mortgages, savings and businesses. Forecasts are the views of our economists on the date of publication and may change; they are not investment advice.",
"captionLong": "Rates have peaked, and growth returns slowly. In our latest outlook, our chief economist expects the policy rate to come down gently from 4.50% today to 3.25% by the end of 2027. Inflation is back near target and should average 2.1% in 2027, the economy should grow by 1.4%, and unemployment should rise only a little, to 4.3%. For households that means borrowing costs easing step by step, so a mortgage renewed next year may cost less than one fixed today, while savings should still earn more than prices rise. For businesses it means steadier demand and cheaper credit. The full outlook covers each of these in detail, with the risks we are watching. Forecasts are the views of our economists on the date of publication and may change without notice. They are not a guarantee of future results and are not investment advice.",
"hashtags": [
"economy",
"interestrates",
"inflation",
"outlook",
"banking"
]
}
}
}

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.