Finance (Insurance), Renewal reminder 1.0.0
| Template | Finance (Insurance), tpl_466386ca3ac5 |
|---|---|
| Variant | Renewal reminder |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 13 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 friendly renewal reminder: the headline, the renewal date on a calendar card with the days left large beside it, and two to six things to check on soft cards, complete on the first frame; each is then ticked in turn, then a closing note, the button and your agent. The disclosure stays on screen throughout. Ten seconds with two checks, 1.2 seconds more per check. metaData is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: the section, the headline, the renewal date, the days left and their label, the checks, the note, the call to action and the disclosure. | |
clipData.section | text | up to 24 characters | Section: What the post is about, on a soft label at the end of the header, such as Car insurance or Your renewal. | |
clipData.headline | text | yes | up to 64 characters | Headline: The title of the post. |
clipData.renewalDate | text | up to 32 characters | Renewal date: The day the policy renews, written as you want it read, such as 1 November. Shown as sent on a calendar card: a day's number sent with the month is set large under it. | |
clipData.daysLeft | integer | from 0, to 999 | Days left: How many days are left until the renewal, as you send it: the clip never works it out from the date. Shown large beside the calendar card. Left out, not drawn. | |
clipData.daysLabel | text | up to 16 characters | Days left label: The words under the days left, such as days left or days to go. | |
clipData.checks | list | yes | at least 2, up to 6 | Checks: Two to six things worth checking before the policy renews, each on a soft card with its icon. All are there on the first frame, then each is ticked in turn. Where the frame is short of height they take two columns, then turn pages. |
clipData.checks[] | group | Check | ||
clipData.checks[].label | text | yes | up to 48 characters | Label: The question or the thing to check, in a few words. |
clipData.checks[].icon | enum | house, map-pin, car, bike, plane, users, user, baby, heart-pulse, stethoscope, briefcase, building, gem, watch, laptop, smartphone, key-round, lock, shield-check, wallet, credit-card, banknote, piggy-bank, receipt, file-text, clipboard-check, calendar, clock, gauge, wrench, mail, phone, info, lightbulb | Icon: A line icon in the check's round badge. Left out, the badge holds the check's number. | |
clipData.note | text | up to 120 characters | Note: A closing line in a note after the checks, such as what happens if nothing has changed. | |
clipData.cta | group | Call to action: The button at the end and the line under it, such as a web address 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 phone number, an app, an office. | |
clipData.disclosure | text | up to 300 characters | Disclosure: What must be shown with the post, such as who the insurer or agent is, the licence and where it applies, and that cover is subject to the policy's terms, conditions and exclusions. On screen from the first frame to the last, set smaller rather than cut. | |
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: the brand's colours, standard pace, round corners, 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.
The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"section": {
"type": "string",
"maxLength": 24,
"title": "Section",
"description": "What the post is about, on a soft label at the end of the header, such as Car insurance or Your renewal."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "The title of the post."
},
"renewalDate": {
"type": "string",
"maxLength": 32,
"title": "Renewal date",
"description": "The day the policy renews, written as you want it read, such as 1 November. Shown as sent on a calendar card: a day's number sent with the month is set large under it."
},
"daysLeft": {
"type": "integer",
"minimum": 0,
"maximum": 999,
"title": "Days left",
"description": "How many days are left until the renewal, as you send it: the clip never works it out from the date. Shown large beside the calendar card. Left out, not drawn."
},
"daysLabel": {
"type": "string",
"maxLength": 16,
"title": "Days left label",
"description": "The words under the days left, such as days left or days to go."
},
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 48,
"title": "Label",
"description": "The question or the thing to check, in a few words."
},
"icon": {
"type": "string",
"enum": [
"house",
"map-pin",
"car",
"bike",
"plane",
"users",
"user",
"baby",
"heart-pulse",
"stethoscope",
"briefcase",
"building",
"gem",
"watch",
"laptop",
"smartphone",
"key-round",
"lock",
"shield-check",
"wallet",
"credit-card",
"banknote",
"piggy-bank",
"receipt",
"file-text",
"clipboard-check",
"calendar",
"clock",
"gauge",
"wrench",
"mail",
"phone",
"info",
"lightbulb"
],
"title": "Icon",
"description": "A line icon in the check's round badge. Left out, the badge holds the check's number.",
"enumNames": [
"House",
"Map pin",
"Car",
"Bike",
"Plane",
"Users",
"User",
"Baby",
"Heart pulse",
"Stethoscope",
"Briefcase",
"Building",
"Gem",
"Watch",
"Laptop",
"Smartphone",
"Key round",
"Lock",
"Shield check",
"Wallet",
"Credit card",
"Banknote",
"Piggy bank",
"Receipt",
"File text",
"Clipboard check",
"Calendar",
"Clock",
"Gauge",
"Wrench",
"Mail",
"Phone",
"Info",
"Lightbulb"
]
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Check"
},
"minItems": 2,
"maxItems": 6,
"title": "Checks",
"description": "Two to six things worth checking before the policy renews, each on a soft card with its icon. All are there on the first frame, then each is ticked in turn. Where the frame is short of height they take two columns, then turn pages."
},
"note": {
"type": "string",
"maxLength": 120,
"title": "Note",
"description": "A closing line in a note after the checks, such as what happens if nothing has changed."
},
"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, an app, an office."
}
},
"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."
},
"disclosure": {
"type": "string",
"maxLength": 300,
"title": "Disclosure",
"description": "What must be shown with the post, such as who the insurer or agent is, the licence and where it applies, and that cover is subject to the policy's terms, conditions and exclusions. On screen from the first frame to the last, set smaller rather than cut."
},
"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, standard pace, round corners, text at the start."
}
},
"required": [
"headline",
"checks"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the headline, the renewal date, the days left and their label, the checks, the note, the call to action and the disclosure."
},
"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, on a soft label at the end of the header, such as Car insurance or Your renewal."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "The title of the post."
},
"renewalDate": {
"type": "string",
"maxLength": 32,
"title": "Renewal date",
"description": "The day the policy renews, written as you want it read, such as 1 November. Shown as sent on a calendar card: a day's number sent with the month is set large under it."
},
"daysLeft": {
"type": "integer",
"minimum": 0,
"maximum": 999,
"title": "Days left",
"description": "How many days are left until the renewal, as you send it: the clip never works it out from the date. Shown large beside the calendar card. Left out, not drawn."
},
"daysLabel": {
"type": "string",
"maxLength": 16,
"title": "Days left label",
"description": "The words under the days left, such as days left or days to go."
},
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 48,
"title": "Label",
"description": "The question or the thing to check, in a few words."
},
"icon": {
"type": "string",
"enum": [
"house",
"map-pin",
"car",
"bike",
"plane",
"users",
"user",
"baby",
"heart-pulse",
"stethoscope",
"briefcase",
"building",
"gem",
"watch",
"laptop",
"smartphone",
"key-round",
"lock",
"shield-check",
"wallet",
"credit-card",
"banknote",
"piggy-bank",
"receipt",
"file-text",
"clipboard-check",
"calendar",
"clock",
"gauge",
"wrench",
"mail",
"phone",
"info",
"lightbulb"
],
"title": "Icon",
"description": "A line icon in the check's round badge. Left out, the badge holds the check's number.",
"enumNames": [
"House",
"Map pin",
"Car",
"Bike",
"Plane",
"Users",
"User",
"Baby",
"Heart pulse",
"Stethoscope",
"Briefcase",
"Building",
"Gem",
"Watch",
"Laptop",
"Smartphone",
"Key round",
"Lock",
"Shield check",
"Wallet",
"Credit card",
"Banknote",
"Piggy bank",
"Receipt",
"File text",
"Clipboard check",
"Calendar",
"Clock",
"Gauge",
"Wrench",
"Mail",
"Phone",
"Info",
"Lightbulb"
]
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Check"
},
"minItems": 2,
"maxItems": 6,
"title": "Checks",
"description": "Two to six things worth checking before the policy renews, each on a soft card with its icon. All are there on the first frame, then each is ticked in turn. Where the frame is short of height they take two columns, then turn pages."
},
"note": {
"type": "string",
"maxLength": 120,
"title": "Note",
"description": "A closing line in a note after the checks, such as what happens if nothing has changed."
},
"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, an app, an office."
}
},
"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."
},
"disclosure": {
"type": "string",
"maxLength": 300,
"title": "Disclosure",
"description": "What must be shown with the post, such as who the insurer or agent is, the licence and where it applies, and that cover is subject to the policy's terms, conditions and exclusions. On screen from the first frame to the last, set smaller rather than cut."
},
"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, standard pace, round corners, text at the start."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the headline, the renewal date, the days left and their label, the checks, the note, the call to action and the disclosure."
},
"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_466386ca3ac5?variant=Renewal%20reminder&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": "Car insurance",
"headline": "Your policy renews soon",
"renewalDate": "1 November",
"daysLeft": 14,
"daysLabel": "days to go",
"checks": [
{
"icon": "house",
"label": "Has your address changed?"
},
{
"icon": "users",
"label": "Any new drivers on the policy?"
},
{
"icon": "gauge",
"label": "Is your mileage still right?"
},
{
"icon": "car",
"label": "Any changes to your car?"
}
],
"note": "Nothing has changed? Then there is nothing to do: your cover renews on its own.",
"cta": {
"label": "Review your policy",
"detail": "In the app or at harbourmutual.example"
},
"disclosure": "Harbour Mutual Insurance Ltd, licence 4471. Cover is subject to the terms, conditions and exclusions of your policy.",
"look": {
"logo": "auto",
"pace": "standard",
"align": "start",
"theme": "brand",
"corners": "round",
"logoSize": "auto"
}
},
"metaData": {
"title": "Your car insurance renews on 1 November",
"captionTiny": "Your car insurance renews on 1 November, in 14 days. A quick check now keeps your cover right: address, drivers, mileage and your car.",
"captionShort": "Your car insurance renews on 1 November, in 14 days. Before it does, take two minutes to check that your policy still fits your life: has your address changed, are there any new drivers, is your mileage still right, and have you made any changes to your car? Nothing has changed? Then there is nothing to do: your cover renews on its own. Review your policy in the app.",
"captionMedium": "Your car insurance renews on 1 November, in 14 days, and a quick check now makes sure you are covered for the life you live today. Has your address changed? Where your car is kept overnight affects your cover. Are there any new drivers, such as a partner or a teenager who has just passed their test? Is your mileage still right, perhaps since you started working from home? And have you made any changes to your car, from new wheels to a tow bar? If anything has changed, let us know before the renewal date and we will update your policy. Nothing has changed? Then there is nothing to do: your cover renews on its own. You can review your policy in the app or at harbourmutual.example. Harbour Mutual Insurance Ltd, licence 4471. Cover is subject to the terms, conditions and exclusions of your policy.",
"captionLong": "Your car insurance renews on 1 November, in 14 days. Most people never look at their policy between renewals, and that is fine, but a lot can change in a year, so here is a quick, friendly checklist to make sure your cover still fits. First, has your address changed? Where your car is kept overnight, on a drive, in a garage or on the street, affects your cover and your premium, so tell us if you have moved. Second, are there any new drivers? A partner, a housemate or a teenager who has just passed their test needs to be named on the policy before they drive. Third, is your mileage still right? If you now work from home, or have started a longer commute, your annual mileage may be quite different from what we have on file. Fourth, have you made any changes to your car? New wheels, a tow bar, a roof box or a tuned engine can all count as modifications. If anything has changed, let us know before the renewal date and we will update your policy and explain any difference in price. Nothing has changed? Then there is nothing to do: your cover renews on its own and your documents arrive by email. You can review your policy at any time in the app or at harbourmutual.example. Harbour Mutual Insurance Ltd, licence 4471. Cover is subject to the terms, conditions and exclusions of your policy.",
"hashtags": [
"carinsurance",
"renewal",
"insurancetips",
"checklist",
"peaceofmind"
]
}
}
}
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.