Finance (Insurance), Customer story 1.0.0
| Template | Finance (Insurance), tpl_466386ca3ac5 |
|---|---|
| Variant | Customer story |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 20 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 claim told by the customer: their portrait, the headline and two to four moments along a soft path, complete on the first frame, each told in turn, then how it ended with a tick and up to two figures counting up, the customer's own words, the button and your agent. The disclosure stays on screen throughout. Sixteen seconds with two moments, two more per moment. 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 customer, the moments of the story, the outcome and its figures, the quote, 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 Home insurance or Travel cover. | |
clipData.headline | text | yes | up to 64 characters | Headline: The title of the story. |
clipData.customer | group | yes | Customer: Who tells the story: their name, where they live and a picture of them, on the cover beside the headline and there to the end. | |
clipData.customer.name | text | yes | up to 32 characters | Name: The customer's name, or how they would like to be called, such as Sarah M. |
clipData.customer.place | text | up to 32 characters | Place: Where they live, under the name. | |
clipData.customer.picture | image | media:// file from the media library, alt text up to 120 characters | Picture: A picture of the customer from the media library, shown in a circle. Without one the first letters of their name are shown. | |
clipData.story | list | yes | at least 2, up to 4 | The story: Two to four moments of the claim as the customer lived it, in order, each on a soft card along a path: when it was and what happened. All are there on the first frame, then each is told in turn. Where the frame is short of height they turn pages. |
clipData.story[] | group | Moment | ||
clipData.story[].label | text | yes | up to 32 characters | When: When it happened, or what it was, such as Monday, 7 am. |
clipData.story[].text | text | yes | up to 120 characters | What happened: What happened, in a sentence or two, in the customer's words or yours. |
clipData.outcome | text | up to 100 characters | Outcome: How it ended, in a line after the story, beside a tick, such as Paid in full in six days. | |
clipData.stats | list | up to 2 | Figures: Up to two figures from the claim under the outcome, each counting up to exactly the value sent, such as 24 hours until the assessor visited. | |
clipData.stats[] | group | Figure | ||
clipData.stats[].value | number | yes | from 0, to 999999, 2 decimals | Figure: The figure itself, such as 24. Shown exactly as sent, with the decimals it was sent with, in the channel's language. |
clipData.stats[].unit | text | up to 8 characters | Unit: Beside the figure, such as hours, days or %. | |
clipData.stats[].label | text | up to 32 characters | Label: What the figure is, under it. | |
clipData.quote | text | up to 180 characters | Quote: The customer's own words, large and warm after the outcome. | |
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 Home insurance or Travel cover."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "The title of the story."
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 32,
"title": "Name",
"description": "The customer's name, or how they would like to be called, such as Sarah M."
},
"place": {
"type": "string",
"maxLength": 32,
"title": "Place",
"description": "Where they live, under the name."
},
"picture": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Picture",
"description": "A file from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 120,
"title": "Alt text",
"description": "What the picture shows, for anyone who cannot see it."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Picture",
"description": "A picture of the customer from the media library, shown in a circle. Without one the first letters of their name are shown."
}
},
"required": [
"name"
],
"additionalProperties": false,
"title": "Customer",
"description": "Who tells the story: their name, where they live and a picture of them, on the cover beside the headline and there to the end."
},
"story": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 32,
"title": "When",
"description": "When it happened, or what it was, such as Monday, 7 am."
},
"text": {
"type": "string",
"maxLength": 120,
"title": "What happened",
"description": "What happened, in a sentence or two, in the customer's words or yours."
}
},
"required": [
"label",
"text"
],
"additionalProperties": false,
"title": "Moment"
},
"minItems": 2,
"maxItems": 4,
"title": "The story",
"description": "Two to four moments of the claim as the customer lived it, in order, each on a soft card along a path: when it was and what happened. All are there on the first frame, then each is told in turn. Where the frame is short of height they turn pages."
},
"outcome": {
"type": "string",
"maxLength": 100,
"title": "Outcome",
"description": "How it ended, in a line after the story, beside a tick, such as Paid in full in six days."
},
"stats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "number",
"minimum": 0,
"maximum": 999999,
"title": "Figure",
"description": "The figure itself, such as 24. Shown exactly as sent, with the decimals it was sent with, in the channel's language."
},
"unit": {
"type": "string",
"maxLength": 8,
"title": "Unit",
"description": "Beside the figure, such as hours, days or %."
},
"label": {
"type": "string",
"maxLength": 32,
"title": "Label",
"description": "What the figure is, under it."
}
},
"required": [
"value"
],
"additionalProperties": false,
"title": "Figure"
},
"maxItems": 2,
"title": "Figures",
"description": "Up to two figures from the claim under the outcome, each counting up to exactly the value sent, such as 24 hours until the assessor visited."
},
"quote": {
"type": "string",
"maxLength": 180,
"title": "Quote",
"description": "The customer's own words, large and warm after the outcome."
},
"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",
"customer",
"story"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the section, the headline, the customer, the moments of the story, the outcome and its figures, the quote, 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 Home insurance or Travel cover."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "The title of the story."
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 32,
"title": "Name",
"description": "The customer's name, or how they would like to be called, such as Sarah M."
},
"place": {
"type": "string",
"maxLength": 32,
"title": "Place",
"description": "Where they live, under the name."
},
"picture": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Picture",
"description": "A file from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 120,
"title": "Alt text",
"description": "What the picture shows, for anyone who cannot see it."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Picture",
"description": "A picture of the customer from the media library, shown in a circle. Without one the first letters of their name are shown."
}
},
"additionalProperties": false,
"title": "Customer",
"description": "Who tells the story: their name, where they live and a picture of them, on the cover beside the headline and there to the end."
},
"story": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 32,
"title": "When",
"description": "When it happened, or what it was, such as Monday, 7 am."
},
"text": {
"type": "string",
"maxLength": 120,
"title": "What happened",
"description": "What happened, in a sentence or two, in the customer's words or yours."
}
},
"required": [
"label",
"text"
],
"additionalProperties": false,
"title": "Moment"
},
"minItems": 2,
"maxItems": 4,
"title": "The story",
"description": "Two to four moments of the claim as the customer lived it, in order, each on a soft card along a path: when it was and what happened. All are there on the first frame, then each is told in turn. Where the frame is short of height they turn pages."
},
"outcome": {
"type": "string",
"maxLength": 100,
"title": "Outcome",
"description": "How it ended, in a line after the story, beside a tick, such as Paid in full in six days."
},
"stats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "number",
"minimum": 0,
"maximum": 999999,
"title": "Figure",
"description": "The figure itself, such as 24. Shown exactly as sent, with the decimals it was sent with, in the channel's language."
},
"unit": {
"type": "string",
"maxLength": 8,
"title": "Unit",
"description": "Beside the figure, such as hours, days or %."
},
"label": {
"type": "string",
"maxLength": 32,
"title": "Label",
"description": "What the figure is, under it."
}
},
"required": [
"value"
],
"additionalProperties": false,
"title": "Figure"
},
"maxItems": 2,
"title": "Figures",
"description": "Up to two figures from the claim under the outcome, each counting up to exactly the value sent, such as 24 hours until the assessor visited."
},
"quote": {
"type": "string",
"maxLength": 180,
"title": "Quote",
"description": "The customer's own words, large and warm after the outcome."
},
"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 customer, the moments of the story, the outcome and its figures, the quote, 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=Customer%20story&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": "Customer stories",
"headline": "The kitchen after the flood",
"customer": {
"name": "Sarah Mitchell",
"place": "Leeds, West Yorkshire",
"picture": {
"alt": "A person's silhouette on a round green ground",
"url": "media://example-badge.png"
}
},
"story": [
{
"text": "A pipe burst under the sink overnight. By morning the whole kitchen floor was under water.",
"label": "Monday, 7 am"
},
{
"text": "One call to the claims line. They sent an emergency plumber and told us what to photograph.",
"label": "Monday, 8 am"
},
{
"text": "The assessor came the next day, agreed the repairs with us and booked the drying team.",
"label": "Tuesday"
},
{
"text": "The money was in our account, and our builder could start on the new kitchen straight away.",
"label": "Day six"
}
],
"outcome": "Paid in full in six days",
"stats": [
{
"unit": "hours",
"label": "Until the assessor visited",
"value": 24
},
{
"unit": "weeks",
"label": "Until the new kitchen was in",
"value": 3
}
],
"quote": "I expected forms and arguments. Instead somebody called me back within the hour, and three weeks later we were cooking in a new kitchen.",
"cta": {
"label": "Read more stories",
"detail": "harbourmutual.example/stories"
},
"disclosure": "Harbour Mutual Insurance Ltd, licence 4471. A real claim, shared with the customer's permission. 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": "The kitchen after the flood: Sarah's claim, in her words",
"captionTiny": "A burst pipe flooded Sarah's kitchen overnight. Six days later her claim was paid in full. Here is how it went, in her words.",
"captionShort": "A pipe burst under Sarah's sink overnight, and by morning the whole kitchen floor was under water. One call to our claims line brought an emergency plumber. Our assessor came the next day and agreed the repairs, and six days later the claim was paid in full. \"I expected forms and arguments. Instead somebody called me back within the hour.\" Shared with Sarah's permission. Cover is subject to the terms, conditions and exclusions of your policy.",
"captionMedium": "Sarah woke up on a Monday to a kitchen under water: a pipe had burst under the sink overnight. At 8 am she made one call to our claims line. We sent an emergency plumber to stop the leak and told her exactly what to photograph before she started clearing up. The next day our assessor visited, agreed the repairs with her and booked a drying team. On day six the money was in her account, and her builder could start on the new kitchen straight away. Three weeks later the family was cooking in it. \"I expected forms and arguments. Instead somebody called me back within the hour, and three weeks later we were cooking in a new kitchen.\" Thank you, Sarah, for letting us share your story. If something goes wrong at home, we are here 24 hours a day. Harbour Mutual Insurance Ltd, licence 4471. Cover is subject to the terms, conditions and exclusions of your policy.",
"captionLong": "Some claims are about paperwork. Sarah's was about a family kitchen. On a Monday morning she came downstairs to find the whole floor under water: a pipe had burst under the sink overnight, the units were soaked and the flooring was lifting. At 8 am she made one call to our claims line. The adviser who answered sent an emergency plumber to stop the leak, told her to switch off the electrics in the kitchen, and explained exactly what to photograph before she started clearing up: every damaged unit, the floor, the appliances and the pipe itself. The next day our assessor visited. Together they went through the damage, agreed which repairs were needed and booked a drying team, so the new kitchen would not be fitted onto a damp floor. Sarah sent her photos and her builder's quote through the app, and on day six the money was in her account. Her builder started straight away, and three weeks after the flood the family was cooking in a new kitchen. In her own words: \"I expected forms and arguments. Instead somebody called me back within the hour, and three weeks later we were cooking in a new kitchen.\" A few things that helped Sarah's claim go smoothly: she made the leak safe first, she took photos before tidying up, and she kept the receipt for the emergency plumber. If something goes wrong at home, our claims team is here 24 hours a day, every day of the year. Thank you, Sarah, for letting us share your story. Harbour Mutual Insurance Ltd, licence 4471. Cover is subject to the terms, conditions and exclusions of your policy.",
"hashtags": [
"customerstory",
"homeinsurance",
"insuranceclaim",
"escapeofwater",
"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.