Testimonial, Keynote minimal 1.0.0
| Template | Testimonial, tpl_f33f87fa1a6e |
|---|---|
| Variant | Keynote minimal |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 18 seconds |
Example video
The 1x1 cut of this version, drawn from its own worked example. Open the video on its own.
What it accepts
A customer's own words: the quote set large with the words that carry it marked, who said it with their picture, name and role, a star rating filling to exactly the rating sent, the product it is about, and up to three more testimonials after it, one at a time. metaData is the post's title, descriptions and hashtags and is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn: a kicker, the quote and the words to mark in it, the rating, the person who gave it, the product it is about, a note, further testimonials and the look. | |
clipData.kicker | text | up to 20 characters | Kicker: A word above the quote, such as CUSTOMER REVIEW or IN THEIR WORDS. Shown over every testimonial. | |
clipData.quote | text | yes | up to 200 characters | Quote: The customer's own words, without quotation marks: the channel language's own are drawn round them. The largest thing on the frame. |
clipData.highlight | text | up to 60 characters | Words to mark: Words from the quote, as they are written there, marked the style's way once the quote has been read, such as not one wrong turn. Left out, nothing is marked. | |
clipData.rating | number | from 0, to 5, 1 decimals | Rating: From 0 to 5, halves and tenths allowed. Drawn as five stars filled to exactly this, never rounded up, with the figure beside them. Left out, no stars are drawn. | |
clipData.person | group | yes | Who said it | |
clipData.person.picture | image | media:// file from the media library, alt text up to 120 characters | Picture: A portrait, framed the style's way, so keep the face in the middle. Left out, the initials of the name stand in its place. | |
clipData.person.name | text | yes | up to 40 characters | Name |
clipData.person.role | text | up to 60 characters | Role: Who they are: a job and a company, a place, how long they have been a customer. | |
clipData.product | group | Product: What the quote is about, shown small after the rating. Left out, nothing is shown. | ||
clipData.product.picture | image | media:// file from the media library, alt text up to 120 characters | Picture: Shown whole in a small frame: a cut-out product, a logo or a picture of the place suits it best. | |
clipData.product.name | text | up to 40 characters | Name | |
clipData.note | text | up to 80 characters | Note: A small line at the foot: a verified purchase, the date of the review. | |
clipData.more | list | at least 0, up to 3 | More testimonials: Further testimonials shown after the first, one at a time, each with its own quote, marked words, rating, person, product and note. Each adds eight seconds; three make about 34 seconds. | |
clipData.more[] | group | Testimonial | ||
clipData.more[].quote | text | yes | up to 200 characters | Quote: The customer's own words, without quotation marks: the channel language's own are drawn round them. The largest thing on the frame. |
clipData.more[].highlight | text | up to 60 characters | Words to mark: Words from the quote, as they are written there, marked the style's way once the quote has been read, such as not one wrong turn. Left out, nothing is marked. | |
clipData.more[].rating | number | from 0, to 5, 1 decimals | Rating: From 0 to 5, halves and tenths allowed. Drawn as five stars filled to exactly this, never rounded up, with the figure beside them. Left out, no stars are drawn. | |
clipData.more[].person | group | yes | Who said it | |
clipData.more[].person.picture | image | media:// file from the media library, alt text up to 120 characters | Picture: A portrait, framed the style's way, so keep the face in the middle. Left out, the initials of the name stand in its place. | |
clipData.more[].person.name | text | yes | up to 40 characters | Name |
clipData.more[].person.role | text | up to 60 characters | Role: Who they are: a job and a company, a place, how long they have been a customer. | |
clipData.more[].product | group | Product: What the quote is about, shown small after the rating. Left out, nothing is shown. | ||
clipData.more[].product.picture | image | media:// file from the media library, alt text up to 120 characters | Picture: Shown whole in a small frame: a cut-out product, a logo or a picture of the place suits it best. | |
clipData.more[].product.name | text | up to 40 characters | Name | |
clipData.more[].note | text | up to 80 characters | Note: A small line at the foot: a verified purchase, the date of the review. | |
clipData.look | group | Look: How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides. | ||
clipData.look.theme | enum | auto, brand, light, dark, bold | Theme: The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page. | |
clipData.look.pace | enum | auto, calm, standard, punchy | Pace: How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts. | |
clipData.look.corners | enum | auto, square, soft, round | Corners: The shape of cards, panels and marks. | |
clipData.look.align | enum | auto, start, centre | Text alignment: Where the text lines up. | |
clipData.look.logo | enum | auto, free | Logo: The style's own: the logo on the style's plate (a card, a disc, a badge) 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. | |
metaData | group | Meta data: Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data. | ||
metaData.title | text | up to 100 characters | Title: Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes. | |
metaData.captionTiny | text | up to 200 characters | Tiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionShort | text | up to 500 characters | Short description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionMedium | text | up to 1500 characters | Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok): Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionLong | text | up to 4000 characters | Long description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.hashtags | list | up to 15 | Hashtags: Written without the #. Up to 15, which every platform takes. | |
metaData.hashtags[] | text | up to 60 characters | Hashtag |
locales carries other languages: under each language code, the parts of clipData and metaData that differ, laid over the default, so a language with no copy still renders.
A picture is always a file from your media library: media:// followed by its id or its name.
Anything the table does not list is refused, and so is anything over its limit, with a 422 that
names the field.
The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"kicker": {
"type": "string",
"maxLength": 20,
"title": "Kicker",
"description": "A word above the quote, such as CUSTOMER REVIEW or IN THEIR WORDS. Shown over every testimonial."
},
"quote": {
"type": "string",
"maxLength": 200,
"title": "Quote",
"description": "The customer's own words, without quotation marks: the channel language's own are drawn round them. The largest thing on the frame."
},
"highlight": {
"type": "string",
"maxLength": 60,
"title": "Words to mark",
"description": "Words from the quote, as they are written there, marked the style's way once the quote has been read, such as not one wrong turn. Left out, nothing is marked."
},
"rating": {
"type": "number",
"minimum": 0,
"maximum": 5,
"title": "Rating",
"description": "From 0 to 5, halves and tenths allowed. Drawn as five stars filled to exactly this, never rounded up, with the figure beside them. Left out, no stars are drawn."
},
"person": {
"type": "object",
"properties": {
"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 portrait, framed the style's way, so keep the face in the middle. Left out, the initials of the name stand in its place."
},
"name": {
"type": "string",
"maxLength": 40,
"title": "Name"
},
"role": {
"type": "string",
"maxLength": 60,
"title": "Role",
"description": "Who they are: a job and a company, a place, how long they have been a customer."
}
},
"required": [
"name"
],
"additionalProperties": false,
"title": "Who said it"
},
"product": {
"type": "object",
"properties": {
"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": "Shown whole in a small frame: a cut-out product, a logo or a picture of the place suits it best."
},
"name": {
"type": "string",
"maxLength": 40,
"title": "Name"
}
},
"additionalProperties": false,
"title": "Product",
"description": "What the quote is about, shown small after the rating. Left out, nothing is shown."
},
"note": {
"type": "string",
"maxLength": 80,
"title": "Note",
"description": "A small line at the foot: a verified purchase, the date of the review."
},
"more": {
"type": "array",
"items": {
"type": "object",
"properties": {
"quote": {
"type": "string",
"maxLength": 200,
"title": "Quote",
"description": "The customer's own words, without quotation marks: the channel language's own are drawn round them. The largest thing on the frame."
},
"highlight": {
"type": "string",
"maxLength": 60,
"title": "Words to mark",
"description": "Words from the quote, as they are written there, marked the style's way once the quote has been read, such as not one wrong turn. Left out, nothing is marked."
},
"rating": {
"type": "number",
"minimum": 0,
"maximum": 5,
"title": "Rating",
"description": "From 0 to 5, halves and tenths allowed. Drawn as five stars filled to exactly this, never rounded up, with the figure beside them. Left out, no stars are drawn."
},
"person": {
"type": "object",
"properties": {
"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 portrait, framed the style's way, so keep the face in the middle. Left out, the initials of the name stand in its place."
},
"name": {
"type": "string",
"maxLength": 40,
"title": "Name"
},
"role": {
"type": "string",
"maxLength": 60,
"title": "Role",
"description": "Who they are: a job and a company, a place, how long they have been a customer."
}
},
"required": [
"name"
],
"additionalProperties": false,
"title": "Who said it"
},
"product": {
"type": "object",
"properties": {
"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": "Shown whole in a small frame: a cut-out product, a logo or a picture of the place suits it best."
},
"name": {
"type": "string",
"maxLength": 40,
"title": "Name"
}
},
"additionalProperties": false,
"title": "Product",
"description": "What the quote is about, shown small after the rating. Left out, nothing is shown."
},
"note": {
"type": "string",
"maxLength": 80,
"title": "Note",
"description": "A small line at the foot: a verified purchase, the date of the review."
}
},
"required": [
"quote",
"person"
],
"additionalProperties": false,
"title": "Testimonial"
},
"minItems": 0,
"maxItems": 3,
"title": "More testimonials",
"description": "Further testimonials shown after the first, one at a time, each with its own quote, marked words, rating, person, product and note. Each adds eight seconds; three make about 34 seconds."
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"auto",
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page.",
"enumNames": [
"The style's own",
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"auto",
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts.",
"enumNames": [
"The style's own",
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"auto",
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, panels and marks.",
"enumNames": [
"The style's own",
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"auto",
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"The style's own",
"At the start of the line",
"Centred"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) 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"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides."
}
},
"required": [
"quote",
"person"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn: a kicker, the quote and the words to mark in it, the rating, the person who gave it, the product it is about, a note, further testimonials and the look."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
},
"locales": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"kicker": {
"type": "string",
"maxLength": 20,
"title": "Kicker",
"description": "A word above the quote, such as CUSTOMER REVIEW or IN THEIR WORDS. Shown over every testimonial."
},
"quote": {
"type": "string",
"maxLength": 200,
"title": "Quote",
"description": "The customer's own words, without quotation marks: the channel language's own are drawn round them. The largest thing on the frame."
},
"highlight": {
"type": "string",
"maxLength": 60,
"title": "Words to mark",
"description": "Words from the quote, as they are written there, marked the style's way once the quote has been read, such as not one wrong turn. Left out, nothing is marked."
},
"rating": {
"type": "number",
"minimum": 0,
"maximum": 5,
"title": "Rating",
"description": "From 0 to 5, halves and tenths allowed. Drawn as five stars filled to exactly this, never rounded up, with the figure beside them. Left out, no stars are drawn."
},
"person": {
"type": "object",
"properties": {
"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 portrait, framed the style's way, so keep the face in the middle. Left out, the initials of the name stand in its place."
},
"name": {
"type": "string",
"maxLength": 40,
"title": "Name"
},
"role": {
"type": "string",
"maxLength": 60,
"title": "Role",
"description": "Who they are: a job and a company, a place, how long they have been a customer."
}
},
"additionalProperties": false,
"title": "Who said it"
},
"product": {
"type": "object",
"properties": {
"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": "Shown whole in a small frame: a cut-out product, a logo or a picture of the place suits it best."
},
"name": {
"type": "string",
"maxLength": 40,
"title": "Name"
}
},
"additionalProperties": false,
"title": "Product",
"description": "What the quote is about, shown small after the rating. Left out, nothing is shown."
},
"note": {
"type": "string",
"maxLength": 80,
"title": "Note",
"description": "A small line at the foot: a verified purchase, the date of the review."
},
"more": {
"type": "array",
"items": {
"type": "object",
"properties": {
"quote": {
"type": "string",
"maxLength": 200,
"title": "Quote",
"description": "The customer's own words, without quotation marks: the channel language's own are drawn round them. The largest thing on the frame."
},
"highlight": {
"type": "string",
"maxLength": 60,
"title": "Words to mark",
"description": "Words from the quote, as they are written there, marked the style's way once the quote has been read, such as not one wrong turn. Left out, nothing is marked."
},
"rating": {
"type": "number",
"minimum": 0,
"maximum": 5,
"title": "Rating",
"description": "From 0 to 5, halves and tenths allowed. Drawn as five stars filled to exactly this, never rounded up, with the figure beside them. Left out, no stars are drawn."
},
"person": {
"type": "object",
"properties": {
"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 portrait, framed the style's way, so keep the face in the middle. Left out, the initials of the name stand in its place."
},
"name": {
"type": "string",
"maxLength": 40,
"title": "Name"
},
"role": {
"type": "string",
"maxLength": 60,
"title": "Role",
"description": "Who they are: a job and a company, a place, how long they have been a customer."
}
},
"required": [
"name"
],
"additionalProperties": false,
"title": "Who said it"
},
"product": {
"type": "object",
"properties": {
"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": "Shown whole in a small frame: a cut-out product, a logo or a picture of the place suits it best."
},
"name": {
"type": "string",
"maxLength": 40,
"title": "Name"
}
},
"additionalProperties": false,
"title": "Product",
"description": "What the quote is about, shown small after the rating. Left out, nothing is shown."
},
"note": {
"type": "string",
"maxLength": 80,
"title": "Note",
"description": "A small line at the foot: a verified purchase, the date of the review."
}
},
"required": [
"quote",
"person"
],
"additionalProperties": false,
"title": "Testimonial"
},
"minItems": 0,
"maxItems": 3,
"title": "More testimonials",
"description": "Further testimonials shown after the first, one at a time, each with its own quote, marked words, rating, person, product and note. Each adds eight seconds; three make about 34 seconds."
},
"look": {
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"auto",
"brand",
"light",
"dark",
"bold"
],
"title": "Theme",
"description": "The style's own choice; your brand's own colours and background; a light or dark page tinted with your brand colour; or your brand colour as the page.",
"enumNames": [
"The style's own",
"Brand colours",
"Light",
"Dark",
"Bold brand colour"
]
},
"pace": {
"type": "string",
"enum": [
"auto",
"calm",
"standard",
"punchy"
],
"title": "Pace",
"description": "How things arrive: the style's own rhythm, calm fades, a standard rhythm, or punchy slams and cuts.",
"enumNames": [
"The style's own",
"Calm",
"Standard",
"Punchy"
]
},
"corners": {
"type": "string",
"enum": [
"auto",
"square",
"soft",
"round"
],
"title": "Corners",
"description": "The shape of cards, panels and marks.",
"enumNames": [
"The style's own",
"Square",
"Softly rounded",
"Round"
]
},
"align": {
"type": "string",
"enum": [
"auto",
"start",
"centre"
],
"title": "Text alignment",
"description": "Where the text lines up.",
"enumNames": [
"The style's own",
"At the start of the line",
"Centred"
]
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) 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"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves within its style. The same five switches in every format of the collections. Leave a switch out, or set it to the style's own, and the style decides."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn: a kicker, the quote and the words to mark in it, the rating, the person who gave it, the product it is about, a note, further testimonials and the look."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
}
},
"additionalProperties": false
},
"propertyNames": {
"enum": [
"aa",
"ab",
"ae",
"af",
"ak",
"am",
"an",
"ar",
"as",
"av",
"ay",
"az",
"ba",
"be",
"bg",
"bi",
"bm",
"bn",
"bo",
"br",
"bs",
"ca",
"ce",
"ch",
"co",
"cr",
"cs",
"cu",
"cv",
"cy",
"da",
"de",
"dv",
"dz",
"ee",
"el",
"en",
"eo",
"es",
"et",
"eu",
"fa",
"ff",
"fi",
"fj",
"fo",
"fr",
"fy",
"ga",
"gd",
"gl",
"gn",
"gu",
"gv",
"ha",
"he",
"hi",
"ho",
"hr",
"ht",
"hu",
"hy",
"hz",
"ia",
"id",
"ie",
"ig",
"ii",
"ik",
"io",
"is",
"it",
"iu",
"ja",
"jv",
"ka",
"kg",
"ki",
"kj",
"kk",
"kl",
"km",
"kn",
"ko",
"kr",
"ks",
"ku",
"kv",
"kw",
"ky",
"la",
"lb",
"lg",
"li",
"ln",
"lo",
"lt",
"lu",
"lv",
"mg",
"mh",
"mi",
"mk",
"ml",
"mn",
"mr",
"ms",
"mt",
"my",
"na",
"nb",
"nd",
"ne",
"ng",
"nl",
"nn",
"no",
"nr",
"nv",
"ny",
"oc",
"oj",
"om",
"or",
"os",
"pa",
"pi",
"pl",
"ps",
"pt",
"qu",
"rm",
"rn",
"ro",
"ru",
"rw",
"sa",
"sc",
"sd",
"se",
"sg",
"si",
"sk",
"sl",
"sm",
"sn",
"so",
"sq",
"sr",
"ss",
"st",
"su",
"sv",
"sw",
"ta",
"te",
"tg",
"th",
"ti",
"tk",
"tl",
"tn",
"to",
"tr",
"ts",
"tt",
"tw",
"ty",
"ug",
"uk",
"ur",
"uz",
"ve",
"vi",
"vo",
"wa",
"wo",
"xh",
"yi",
"yo",
"za",
"zh",
"zu",
"zh-CN",
"zh-TW",
"pt-BR"
]
}
}
},
"required": [
"clipData"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
Ask Reelwire for the same document yourself, without signing in:
curl "http://localhost:4000/v1/formats/template/tpl_f33f87fa1a6e?variant=Keynote%20minimal&version=1.0.0"
Delivery JSON
Your own system sends this to one of your streams, POST /v1/stream, and every channel listening to
that stream draws it with its template. data is the document described above; a stream with an
empty field map passes it to the template unchanged. Try it first on POST /v1/stream/validate,
which answers the same without publishing anything. Streams and feeds
explains the rest, including how to map a document of your own shape instead.
{
"streamId": "st_your_stream_id",
"eventId": "01M2SQMKK3G1NVFXV31DCBVB95",
"occurredAt": "2026-09-23T07:00:00Z",
"locale": "en",
"data": {
"clipData": {
"kicker": "Guest review",
"quote": "Three days, three lakes and not one wrong turn. The route notes were spot on, our bags were waiting at every inn, and the last climb gave us the best view of the whole trip.",
"highlight": "not one wrong turn",
"rating": 4.5,
"person": {
"picture": {
"alt": "Lena Marsh's profile picture, a gradient of violet and blue",
"url": "media://example-image.jpg"
},
"name": "Lena Marsh",
"role": "Walked the trail with two friends in September"
},
"product": {
"picture": {
"alt": "A mountain range under a pale morning sky",
"url": "media://example-image.svg"
},
"name": "Three Lakes Trail, three days"
},
"note": "Verified booking. Review left on 2 October 2026",
"more": [
{
"note": "Verified booking",
"quote": "Booking took five minutes and the walk took my breath away. I am already planning the coast route for the spring.",
"person": {
"name": "Tomás Ortega",
"role": "First walking holiday, June 2026"
},
"rating": 5,
"highlight": "took my breath away"
}
],
"look": {
"theme": "auto",
"pace": "auto",
"corners": "auto",
"align": "auto",
"logo": "auto"
}
},
"metaData": {
"title": "Three days, three lakes and not one wrong turn: two guests on the Three Lakes Trail",
"captionTiny": "Three days, three lakes and not one wrong turn. Lena Marsh gives the Three Lakes Trail four and a half stars, and Tomás Ortega gives his first walking holiday five.",
"captionShort": "Three days, three lakes and not one wrong turn. Lena Marsh walked the Three Lakes Trail with two friends in September: the route notes were spot on, the bags were waiting at every inn, and the last climb gave them the best view of the trip. Four and a half stars from a verified booking. Tomás Ortega, on his first walking holiday in June, gives it five and is already planning the coast route. Read more guest reviews on our site, or ask us about dates for next season.",
"captionMedium": "Three days, three lakes and not one wrong turn. That is how Lena Marsh starts her review of the Three Lakes Trail, which she walked with two friends in September.\n\nWhat worked for her: route notes that were right at every junction, bags carried ahead and waiting at each inn in the evening, and a last climb on the third morning that gave the best view of the whole trip. She gives it four and a half stars.\n\nTomás Ortega walked the same trail in June, on his first walking holiday. Booking took him five minutes, he says, and the walk took his breath away. He gives it five stars and is already planning the coast route for the spring.\n\nEvery review we share comes from a verified booking, and we publish the critical ones too. If you are thinking about a walking holiday, ask us about dates for next season: the trail runs from April to October, with luggage transfer and a night in a lakeside inn at every stage.\n\nThe trail, the company and the guests in this clip are fictional.",
"captionLong": "Three days, three lakes and not one wrong turn. That is how Lena Marsh starts her review of the Three Lakes Trail, which she walked with two friends in September.\n\nWhat worked for her: route notes that were right at every junction, bags carried ahead and waiting at each inn in the evening, and a last climb on the third morning that gave the best view of the whole trip. She gives it four and a half stars. The half star she kept back, she tells us, is for the second evening, when the inn's kitchen closed earlier than the notes said. We have corrected the notes and spoken to the inn.\n\nTomás Ortega walked the same trail in June, on his first walking holiday. Booking took him five minutes, he says, and the walk took his breath away. He gives it five stars and is already planning the coast route for the spring.\n\nHow the trail works: you walk on your own, at your own pace, with route notes and a map we send before you leave. Every morning your luggage goes ahead to the next inn, so you carry only a day pack. Each stage is between 14 and 19 kilometres, with one long climb on the last day and a lake to swim in at the end of each stage when the weather allows. The inns are small and family run, and every room has its own bathroom.\n\nEvery review we share comes from a verified booking, and we publish the critical ones beside the glowing ones, because somebody deciding whether a walking holiday suits them deserves both. If you are thinking about one, ask us about dates for next season: the trail runs from April to October, and groups of up to six can book together.\n\nThe trail, the company and the guests in this clip are fictional, and the reviews are an illustration of the format.",
"hashtags": [
"walking",
"hiking",
"review",
"travel",
"guestreview",
"outdoors"
]
}
}
}
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.