Tech and industry (Hardware and electronics), Warranty 1.0.0
| Template | Tech and industry (Hardware and electronics), tpl_3864905dddda |
|---|---|
| Variant | Warranty |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 24 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 warranty as a keynote shows one: the years of cover as a huge figure with its label and terms, the product on the brand's ground, complete on the first frame. Then what it covers, each with a tick, and what it does not, each with a cross, then how to claim in up to four steps. Then the button. The footnote stays throughout. 1.5 seconds more per step. metaData is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: the eyebrow, the product's picture, the years of cover with their unit, label and terms, what it covers and what it does not with their headings, the steps to claim, the call to action and the footnote. | |
clipData.eyebrow | text | up to 24 characters | Eyebrow: A word or two above the figure in the brand colour, such as Peace of mind. | |
clipData.picture | image | media:// file from the media library, alt text up to 120 characters | Product picture: The product the warranty covers, from the media library. A cut-out (a PNG with a transparent background) stands whole on the ground with a soft shadow under it; a photograph fills a rounded frame. Left out, the figure takes the whole frame. | |
clipData.qualifier | text | up to 16 characters | Above the figure: A word or two set small above the figure, such as Up to. | |
clipData.years | number | yes | from 0, 1 decimals | Years of cover: How long the warranty runs, set huge, such as 3. Written in the channel's language with the decimals it is sent with. |
clipData.unit | text | yes | up to 16 characters | Unit: Set small after the figure, such as years or months. |
clipData.label | text | yes | up to 72 characters | What it is: What the figure is, in a few words under it. |
clipData.terms | text | yes | up to 220 characters | Terms in short: Shown small under the figure wherever it stands: from when it runs, for whom, where it applies, and that it adds to the buyer's legal rights rather than limiting them. Never cut: a long one is set smaller. |
clipData.coveredTitle | text | up to 32 characters | Heading over what it covers: Set over the ticked list, such as What it covers. Left out, no heading is drawn. | |
clipData.covered | list | yes | at least 1, up to 6 | What it covers: One to six things the warranty covers, each with a tick drawn on in the brand's positive colour, in turn. |
clipData.covered[] | group | Item | ||
clipData.covered[].label | text | yes | up to 64 characters | Item: What is covered, in a few words. |
clipData.notCoveredTitle | text | up to 32 characters | Heading over what it does not cover: Set over the list with crosses, such as What it does not cover. Left out, no heading is drawn. | |
clipData.notCovered | list | up to 6 | What it does not cover: Up to six things the warranty does not cover, each with a cross in the brand's negative colour, in turn. Being open about them builds trust. | |
clipData.notCovered[] | group | Item | ||
clipData.notCovered[].label | text | yes | up to 64 characters | Item: What is not covered, in a few words. |
clipData.claimTitle | text | up to 32 characters | Heading over how to claim: Set over the steps, such as How to claim. Left out, no heading is drawn. | |
clipData.steps | list | up to 4 | How to claim: Up to four steps, numbered in the channel's language, each arriving in turn. Each adds 1.5 seconds. | |
clipData.steps[] | group | Step | ||
clipData.steps[].title | text | yes | up to 48 characters | Step: What to do, in a few words. |
clipData.steps[].detail | text | up to 100 characters | In a sentence: Where or how, in a sentence under the step. | |
clipData.cta | group | Call to action: The button at the end and the line under it, such as a web address, a handle or a phone number. | ||
clipData.cta.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 handle, an app, a phone number. | |
clipData.footnote | text | up to 400 characters | Footnote: Shown small above your footer line on every frame: who gives the warranty and their address, which products it applies to, where to read the full terms, whose trademarks are named. A long one is set smaller, never 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, calm, softly rounded, centred. | ||
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": {
"eyebrow": {
"type": "string",
"maxLength": 24,
"title": "Eyebrow",
"description": "A word or two above the figure in the brand colour, such as Peace of mind."
},
"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": "Product picture",
"description": "The product the warranty covers, from the media library. A cut-out (a PNG with a transparent background) stands whole on the ground with a soft shadow under it; a photograph fills a rounded frame. Left out, the figure takes the whole frame."
},
"qualifier": {
"type": "string",
"maxLength": 16,
"title": "Above the figure",
"description": "A word or two set small above the figure, such as Up to."
},
"years": {
"type": "number",
"minimum": 0,
"title": "Years of cover",
"description": "How long the warranty runs, set huge, such as 3. Written in the channel's language with the decimals it is sent with."
},
"unit": {
"type": "string",
"maxLength": 16,
"title": "Unit",
"description": "Set small after the figure, such as years or months."
},
"label": {
"type": "string",
"maxLength": 72,
"title": "What it is",
"description": "What the figure is, in a few words under it."
},
"terms": {
"type": "string",
"maxLength": 220,
"title": "Terms in short",
"description": "Shown small under the figure wherever it stands: from when it runs, for whom, where it applies, and that it adds to the buyer's legal rights rather than limiting them. Never cut: a long one is set smaller."
},
"coveredTitle": {
"type": "string",
"maxLength": 32,
"title": "Heading over what it covers",
"description": "Set over the ticked list, such as What it covers. Left out, no heading is drawn."
},
"covered": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 64,
"title": "Item",
"description": "What is covered, in a few words."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Item"
},
"minItems": 1,
"maxItems": 6,
"title": "What it covers",
"description": "One to six things the warranty covers, each with a tick drawn on in the brand's positive colour, in turn."
},
"notCoveredTitle": {
"type": "string",
"maxLength": 32,
"title": "Heading over what it does not cover",
"description": "Set over the list with crosses, such as What it does not cover. Left out, no heading is drawn."
},
"notCovered": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 64,
"title": "Item",
"description": "What is not covered, in a few words."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Item"
},
"maxItems": 6,
"title": "What it does not cover",
"description": "Up to six things the warranty does not cover, each with a cross in the brand's negative colour, in turn. Being open about them builds trust."
},
"claimTitle": {
"type": "string",
"maxLength": 32,
"title": "Heading over how to claim",
"description": "Set over the steps, such as How to claim. Left out, no heading is drawn."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 48,
"title": "Step",
"description": "What to do, in a few words."
},
"detail": {
"type": "string",
"maxLength": 100,
"title": "In a sentence",
"description": "Where or how, in a sentence under the step."
}
},
"required": [
"title"
],
"additionalProperties": false,
"title": "Step"
},
"maxItems": 4,
"title": "How to claim",
"description": "Up to four steps, numbered in the channel's language, each arriving in turn. Each adds 1.5 seconds."
},
"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 handle, an app, a phone number."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Call to action",
"description": "The button at the end and the line under it, such as a web address, a handle or a phone number."
},
"footnote": {
"type": "string",
"maxLength": 400,
"title": "Footnote",
"description": "Shown small above your footer line on every frame: who gives the warranty and their address, which products it applies to, where to read the full terms, whose trademarks are named. A long one is set smaller, never 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, calm, softly rounded, centred."
}
},
"required": [
"years",
"unit",
"label",
"terms",
"covered"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the eyebrow, the product's picture, the years of cover with their unit, label and terms, what it covers and what it does not with their headings, the steps to claim, the call to action and the footnote."
},
"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": {
"eyebrow": {
"type": "string",
"maxLength": 24,
"title": "Eyebrow",
"description": "A word or two above the figure in the brand colour, such as Peace of mind."
},
"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": "Product picture",
"description": "The product the warranty covers, from the media library. A cut-out (a PNG with a transparent background) stands whole on the ground with a soft shadow under it; a photograph fills a rounded frame. Left out, the figure takes the whole frame."
},
"qualifier": {
"type": "string",
"maxLength": 16,
"title": "Above the figure",
"description": "A word or two set small above the figure, such as Up to."
},
"years": {
"type": "number",
"minimum": 0,
"title": "Years of cover",
"description": "How long the warranty runs, set huge, such as 3. Written in the channel's language with the decimals it is sent with."
},
"unit": {
"type": "string",
"maxLength": 16,
"title": "Unit",
"description": "Set small after the figure, such as years or months."
},
"label": {
"type": "string",
"maxLength": 72,
"title": "What it is",
"description": "What the figure is, in a few words under it."
},
"terms": {
"type": "string",
"maxLength": 220,
"title": "Terms in short",
"description": "Shown small under the figure wherever it stands: from when it runs, for whom, where it applies, and that it adds to the buyer's legal rights rather than limiting them. Never cut: a long one is set smaller."
},
"coveredTitle": {
"type": "string",
"maxLength": 32,
"title": "Heading over what it covers",
"description": "Set over the ticked list, such as What it covers. Left out, no heading is drawn."
},
"covered": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 64,
"title": "Item",
"description": "What is covered, in a few words."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Item"
},
"minItems": 1,
"maxItems": 6,
"title": "What it covers",
"description": "One to six things the warranty covers, each with a tick drawn on in the brand's positive colour, in turn."
},
"notCoveredTitle": {
"type": "string",
"maxLength": 32,
"title": "Heading over what it does not cover",
"description": "Set over the list with crosses, such as What it does not cover. Left out, no heading is drawn."
},
"notCovered": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 64,
"title": "Item",
"description": "What is not covered, in a few words."
}
},
"required": [
"label"
],
"additionalProperties": false,
"title": "Item"
},
"maxItems": 6,
"title": "What it does not cover",
"description": "Up to six things the warranty does not cover, each with a cross in the brand's negative colour, in turn. Being open about them builds trust."
},
"claimTitle": {
"type": "string",
"maxLength": 32,
"title": "Heading over how to claim",
"description": "Set over the steps, such as How to claim. Left out, no heading is drawn."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 48,
"title": "Step",
"description": "What to do, in a few words."
},
"detail": {
"type": "string",
"maxLength": 100,
"title": "In a sentence",
"description": "Where or how, in a sentence under the step."
}
},
"required": [
"title"
],
"additionalProperties": false,
"title": "Step"
},
"maxItems": 4,
"title": "How to claim",
"description": "Up to four steps, numbered in the channel's language, each arriving in turn. Each adds 1.5 seconds."
},
"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 handle, an app, a phone number."
}
},
"additionalProperties": false,
"title": "Call to action",
"description": "The button at the end and the line under it, such as a web address, a handle or a phone number."
},
"footnote": {
"type": "string",
"maxLength": 400,
"title": "Footnote",
"description": "Shown small above your footer line on every frame: who gives the warranty and their address, which products it applies to, where to read the full terms, whose trademarks are named. A long one is set smaller, never 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, calm, softly rounded, centred."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the eyebrow, the product's picture, the years of cover with their unit, label and terms, what it covers and what it does not with their headings, the steps to claim, the call to action and the footnote."
},
"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_3864905dddda?variant=Warranty&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": {
"eyebrow": "Peace of mind",
"picture": {
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
},
"qualifier": "",
"years": 3,
"unit": "years",
"label": "of warranty on every Arc 2, at no extra cost",
"terms": "From the day of purchase, for the first owner, in the EU, the UK and Switzerland. It adds to your legal rights as a buyer and does not limit them.",
"coveredTitle": "What it covers",
"covered": [
{
"label": "Faults in materials and workmanship"
},
{
"label": "The battery, if it holds under 80% of its charge"
},
{
"label": "Hinges, headband and buttons"
},
{
"label": "The charging case and cable"
},
{
"label": "Repair or replacement, shipping both ways"
}
],
"notCoveredTitle": "What it does not cover",
"notCovered": [
{
"label": "Accidental drops and liquid damage"
},
{
"label": "Normal wear of the ear cushions"
},
{
"label": "Loss or theft"
},
{
"label": "Repairs by anyone other than Halden"
}
],
"claimTitle": "How to claim",
"steps": [
{
"title": "Find your order number",
"detail": "In your confirmation email or in the Halden app."
},
{
"title": "Start a claim online",
"detail": "At halden.example/warranty, in about two minutes."
},
{
"title": "Send them to us for free",
"detail": "We email you a prepaid label and the nearest drop-off point."
},
{
"title": "Back in about a week",
"detail": "Repaired or replaced, with the rest of your warranty."
}
],
"cta": {
"label": "Start a claim",
"detail": "halden.example/warranty"
},
"footnote": "The warranty is given by Halden Audio GmbH, Musterstrasse 1, 10115 Berlin, for products bought new from Halden or an authorised retailer. Full terms at halden.example/warranty.",
"look": {
"logo": "auto",
"pace": "calm",
"align": "centre",
"theme": "brand",
"corners": "soft",
"logoSize": "auto"
}
},
"metaData": {
"title": "3 years of warranty on every Arc 2",
"captionTiny": "Every Arc 2 comes with 3 years of warranty at no extra cost. Here is what it covers and how to claim.",
"captionShort": "Every Arc 2 comes with 3 years of warranty at no extra cost: faults, the battery, hinges and buttons, the case and cable, with shipping both ways. Not covered: drops, liquid, worn cushions, loss. Claim online in two minutes at halden.example/warranty.",
"captionMedium": "We build Arc 2 to last, so every pair comes with 3 years of warranty at no extra cost, from the day you buy them. It covers faults in materials and workmanship, a battery that holds under 80% of its charge, the hinges, headband and buttons, and the case and cable, with free shipping both ways. It does not cover drops, liquid damage, worn ear cushions or loss. To claim, find your order number and start a claim at halden.example/warranty: we send a prepaid label and have them back to you in about a week. It adds to your legal rights and does not limit them.",
"captionLong": "We build Arc 2 to last, and we stand behind that: every pair comes with 3 years of warranty at no extra cost, from the day you buy them, for the first owner in the EU, the UK and Switzerland. It covers faults in materials and workmanship, a battery that holds under 80% of its charge, the hinges, headband and buttons, and the charging case and cable, and we pay for shipping both ways. To be clear about what it does not cover: accidental drops and liquid damage, normal wear of the ear cushions, loss or theft, and repairs by anyone other than Halden. Claiming takes four steps: find your order number in your confirmation email or the Halden app, start a claim at halden.example/warranty in about two minutes, send your headphones with the prepaid label we email you, and have them back, repaired or replaced, in about a week. Our warranty adds to your legal rights as a buyer and does not limit them. Full terms at halden.example/warranty.",
"hashtags": [
"warranty",
"headphones",
"builttolast",
"customercare",
"audio"
]
}
}
}
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.