Overlay, Split-flap 1.0.0
| Template | Overlay, tpl_a1c7ad75ad42 |
|---|---|
| Variant | Split-flap |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 10 seconds |
Example video
The 1x1 cut of this version, drawn from its own worked example. Open the video on its own.
What it accepts
Your own video, full frame with its own sound, with your brand laid over it like a reel: logo, title and label, the presenter's lower third, captions and footer line, clear of what the platforms draw. As long as the video, up to three minutes. 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 over your video: the video itself, the title and its label, the captions, which of your brand's parts show and for how long, and the look. | |
clipData.video | video | yes | media:// video from the media library; the clip is as long as the video | Video: A video from your media library, shown full frame and as it was filmed, with its own sound. The clip is as long as the video, at most three minutes. Your brand's soundtrack, intro, outro and stinger are left off, so only the video's own sound plays. |
clipData.crop | enum | centre, top, bottom, start, end | Crop: Each shape is filled by cropping the video, never by shrinking or stretching it. Choose which part stays in view: the middle, the top, the bottom, the left or the right. | |
clipData.label | text | up to 18 characters | Label: A short tag the style draws its own way near the title, such as LIVE, NEW or TIP. Left out, none is drawn. | |
clipData.title | text | up to 80 characters | Title: One or two lines at the top, in your brand's headline face. Left out, the top shows only the logo and the label. | |
clipData.titleShows | enum | whole, start | Title shows: Keep the title and its label on the whole clip, or only for the first five seconds. | |
clipData.captions | list | up to 20 | Captions: Lines shown one page at a time in a strip near the foot, such as what is being said. Each page starts at its own second where you give one; the others share the time between evenly. | |
clipData.captions[] | group | Caption page | ||
clipData.captions[].text | text | yes | up to 120 characters | Text: What the page says. |
clipData.captions[].at | number | from 0, to 180, 1 decimals | Starts at (seconds): When the page appears, in seconds from the start of the video. Left out, the page shares the time evenly with its neighbours. The first page always shows from the start. | |
clipData.brandLine | boolean | Brand line when there are no captions: With no captions, the caption strip holds your brand's title line for the whole clip. Switch off to leave the strip out. | ||
clipData.logo | enum | auto, top-start, top-end, bottom-start, bottom-end, off | Logo: Which corner your logo stands in, or no logo. The style's own corner is where that style puts it. | |
clipData.logoShows | enum | whole, start | Logo shows: Keep the logo on the whole clip, or only for the first five seconds. | |
clipData.presenter | enum | auto, start, whole, off | Presenter: The name and role from your brand's badge, with its picture where it has one, sliding in after a second above the platform's own buttons. It leaves after about five seconds or stays to the end. The style's own is what that style does. | |
clipData.footer | boolean | Footer line: Your brand's legal or contact line at the foot of the frame. | ||
clipData.look | group | Look: How the parts over the video look and move within the style. Leave a switch out, or set it to the style's own, and the style decides. The video itself is never changed. | ||
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. | |
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": {
"video": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Video",
"description": "A video from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 200,
"title": "Description",
"description": "What the video shows, for anyone who cannot see it."
},
"durationMs": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 86400000,
"title": "Length",
"description": "Measured by Reelwire from the file; a value sent here is replaced."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Video",
"description": "A video from your media library, shown full frame and as it was filmed, with its own sound. The clip is as long as the video, at most three minutes. Your brand's soundtrack, intro, outro and stinger are left off, so only the video's own sound plays."
},
"crop": {
"type": "string",
"enum": [
"centre",
"top",
"bottom",
"start",
"end"
],
"title": "Crop",
"description": "Each shape is filled by cropping the video, never by shrinking or stretching it. Choose which part stays in view: the middle, the top, the bottom, the left or the right.",
"enumNames": [
"The middle",
"The top",
"The bottom",
"The left",
"The right"
]
},
"label": {
"type": "string",
"maxLength": 18,
"title": "Label",
"description": "A short tag the style draws its own way near the title, such as LIVE, NEW or TIP. Left out, none is drawn."
},
"title": {
"type": "string",
"maxLength": 80,
"title": "Title",
"description": "One or two lines at the top, in your brand's headline face. Left out, the top shows only the logo and the label."
},
"titleShows": {
"type": "string",
"enum": [
"whole",
"start"
],
"title": "Title shows",
"description": "Keep the title and its label on the whole clip, or only for the first five seconds.",
"enumNames": [
"The whole clip",
"The first five seconds"
]
},
"captions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 120,
"title": "Text",
"description": "What the page says."
},
"at": {
"type": "number",
"minimum": 0,
"maximum": 180,
"title": "Starts at (seconds)",
"description": "When the page appears, in seconds from the start of the video. Left out, the page shares the time evenly with its neighbours. The first page always shows from the start."
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Caption page"
},
"maxItems": 20,
"title": "Captions",
"description": "Lines shown one page at a time in a strip near the foot, such as what is being said. Each page starts at its own second where you give one; the others share the time between evenly."
},
"brandLine": {
"type": "boolean",
"title": "Brand line when there are no captions",
"description": "With no captions, the caption strip holds your brand's title line for the whole clip. Switch off to leave the strip out."
},
"logo": {
"type": "string",
"enum": [
"auto",
"top-start",
"top-end",
"bottom-start",
"bottom-end",
"off"
],
"title": "Logo",
"description": "Which corner your logo stands in, or no logo. The style's own corner is where that style puts it.",
"enumNames": [
"The style's own",
"Top, at the start of the line",
"Top, at the end of the line",
"Bottom, at the start of the line",
"Bottom, at the end of the line",
"No logo"
]
},
"logoShows": {
"type": "string",
"enum": [
"whole",
"start"
],
"title": "Logo shows",
"description": "Keep the logo on the whole clip, or only for the first five seconds.",
"enumNames": [
"The whole clip",
"The first five seconds"
]
},
"presenter": {
"type": "string",
"enum": [
"auto",
"start",
"whole",
"off"
],
"title": "Presenter",
"description": "The name and role from your brand's badge, with its picture where it has one, sliding in after a second above the platform's own buttons. It leaves after about five seconds or stays to the end. The style's own is what that style does.",
"enumNames": [
"The style's own",
"In, then away after a few seconds",
"Stays to the end",
"No presenter"
]
},
"footer": {
"type": "boolean",
"title": "Footer line",
"description": "Your brand's legal or contact line at the foot of the frame."
},
"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"
]
},
"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 parts over the video look and move within the style. Leave a switch out, or set it to the style's own, and the style decides. The video itself is never changed."
}
},
"required": [
"video"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn over your video: the video itself, the title and its label, the captions, which of your brand's parts show and for how long, 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": {
"video": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"pattern": "^media:\\/\\/[^\\s/\\\\\\u0000-\\u001f][^/\\\\\\u0000-\\u001f]{0,254}$",
"title": "Video",
"description": "A video from the workspace's media library, written media:// and the file's id or name. A web address is refused."
},
"alt": {
"type": "string",
"maxLength": 200,
"title": "Description",
"description": "What the video shows, for anyone who cannot see it."
},
"durationMs": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 86400000,
"title": "Length",
"description": "Measured by Reelwire from the file; a value sent here is replaced."
}
},
"required": [
"url"
],
"additionalProperties": false,
"title": "Video",
"description": "A video from your media library, shown full frame and as it was filmed, with its own sound. The clip is as long as the video, at most three minutes. Your brand's soundtrack, intro, outro and stinger are left off, so only the video's own sound plays."
},
"crop": {
"type": "string",
"enum": [
"centre",
"top",
"bottom",
"start",
"end"
],
"title": "Crop",
"description": "Each shape is filled by cropping the video, never by shrinking or stretching it. Choose which part stays in view: the middle, the top, the bottom, the left or the right.",
"enumNames": [
"The middle",
"The top",
"The bottom",
"The left",
"The right"
]
},
"label": {
"type": "string",
"maxLength": 18,
"title": "Label",
"description": "A short tag the style draws its own way near the title, such as LIVE, NEW or TIP. Left out, none is drawn."
},
"title": {
"type": "string",
"maxLength": 80,
"title": "Title",
"description": "One or two lines at the top, in your brand's headline face. Left out, the top shows only the logo and the label."
},
"titleShows": {
"type": "string",
"enum": [
"whole",
"start"
],
"title": "Title shows",
"description": "Keep the title and its label on the whole clip, or only for the first five seconds.",
"enumNames": [
"The whole clip",
"The first five seconds"
]
},
"captions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 120,
"title": "Text",
"description": "What the page says."
},
"at": {
"type": "number",
"minimum": 0,
"maximum": 180,
"title": "Starts at (seconds)",
"description": "When the page appears, in seconds from the start of the video. Left out, the page shares the time evenly with its neighbours. The first page always shows from the start."
}
},
"required": [
"text"
],
"additionalProperties": false,
"title": "Caption page"
},
"maxItems": 20,
"title": "Captions",
"description": "Lines shown one page at a time in a strip near the foot, such as what is being said. Each page starts at its own second where you give one; the others share the time between evenly."
},
"brandLine": {
"type": "boolean",
"title": "Brand line when there are no captions",
"description": "With no captions, the caption strip holds your brand's title line for the whole clip. Switch off to leave the strip out."
},
"logo": {
"type": "string",
"enum": [
"auto",
"top-start",
"top-end",
"bottom-start",
"bottom-end",
"off"
],
"title": "Logo",
"description": "Which corner your logo stands in, or no logo. The style's own corner is where that style puts it.",
"enumNames": [
"The style's own",
"Top, at the start of the line",
"Top, at the end of the line",
"Bottom, at the start of the line",
"Bottom, at the end of the line",
"No logo"
]
},
"logoShows": {
"type": "string",
"enum": [
"whole",
"start"
],
"title": "Logo shows",
"description": "Keep the logo on the whole clip, or only for the first five seconds.",
"enumNames": [
"The whole clip",
"The first five seconds"
]
},
"presenter": {
"type": "string",
"enum": [
"auto",
"start",
"whole",
"off"
],
"title": "Presenter",
"description": "The name and role from your brand's badge, with its picture where it has one, sliding in after a second above the platform's own buttons. It leaves after about five seconds or stays to the end. The style's own is what that style does.",
"enumNames": [
"The style's own",
"In, then away after a few seconds",
"Stays to the end",
"No presenter"
]
},
"footer": {
"type": "boolean",
"title": "Footer line",
"description": "Your brand's legal or contact line at the foot of the frame."
},
"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"
]
},
"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 parts over the video look and move within the style. Leave a switch out, or set it to the style's own, and the style decides. The video itself is never changed."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn over your video: the video itself, the title and its label, the captions, which of your brand's parts show and for how long, 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_a1c7ad75ad42?variant=Split-flap&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": {
"video": {
"alt": "A dark placeholder frame saying your video goes here",
"url": "media://example-video.mp4"
},
"crop": "centre",
"label": "NEW",
"title": "Three things that moved markets this week",
"titleShows": "whole",
"captions": [
{
"text": "Rates held steady, and the market barely moved."
},
{
"at": 5,
"text": "Energy prices fell for a third week running."
},
{
"text": "Next week: the jobs report on Friday."
}
],
"brandLine": true,
"logo": "auto",
"logoShows": "whole",
"presenter": "auto",
"footer": true,
"look": {
"theme": "auto",
"pace": "auto",
"corners": "auto",
"align": "auto",
"logo": "auto",
"logoSize": "auto"
}
},
"metaData": {
"title": "Three things that moved markets this week",
"captionTiny": "This week in a minute: rates, energy and what comes next.",
"captionShort": "This week in a minute: rates held steady, energy prices fell again, and the jobs report is due on Friday.",
"captionMedium": "This week in a minute: rates held steady and the market barely moved, energy prices fell for a third week running, and next week brings the jobs report on Friday. Follow for a new recap every week.",
"captionLong": "This week in a minute. Rates held steady and the market barely moved. Energy prices fell for a third week running. Next week brings the jobs report on Friday, the one to watch. Follow for a new recap every week, and tell us in the comments what you want covered next.",
"hashtags": [
"weeklyrecap",
"markets"
]
}
}
}
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.