Finance (Real estate), Property tour 1.0.0
| Template | Finance (Real estate), tpl_abd904ec6309 |
|---|---|
| Variant | Property tour |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 23 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 walk through a home, room by room: the first room's photo with the status ribbon, the headline, the price, the address and the numbered rooms, complete on the first frame. Then each room fills the stage with its name, size and note on a caption, then the facts, the agent and the button. The brokerage and the disclosure stay on screen. Three seconds longer per room. metaData is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: the status ribbon, the headline, the price, the address, the rooms with their photos, names, notes and sizes, the facts, the call to action, the brokerage and the disclosure. | |
clipData.status | text | up to 24 characters | Status ribbon: The words on the ribbon over the photos, such as Take the tour, Step inside or Just listed. | |
clipData.headline | text | up to 64 characters | Headline: What the home is, in a few words, above the price on the first frame. | |
clipData.address | text | yes | up to 80 characters | Address: Where it is: the street and the town, or only the area if you prefer. |
clipData.price | number | from 0, 2 decimals | Price: The asking price as a number, set large the way your language writes it, in the currency below. Leave it out to show the price in words instead. | |
clipData.currency | text | up to 3 characters | Currency: The price's currency as a three-letter code, such as EUR, GBP or USD. | |
clipData.priceText | text | up to 32 characters | Price in words: Shown as written where no price is sent, such as Price on application or Offers over 950,000. | |
clipData.rooms | list | yes | at least 2, up to 8 | Rooms: The rooms of the tour in the order they are shown, the first one's photo the cover. Two to eight, each adding three seconds; each is numbered by its place in the list. |
clipData.rooms[] | group | Room | ||
clipData.rooms[].photo | image | yes | media:// file from the media library, alt text up to 120 characters | Photo: A photo of the room, any shape, with its description as alt text. It fills the stage, cropped from its middle. |
clipData.rooms[].name | text | yes | up to 32 characters | Name: The room's name, such as Living room or Main bedroom. |
clipData.rooms[].note | text | up to 72 characters | Note: One line on what makes the room, under its name. | |
clipData.rooms[].size | text | up to 16 characters | Size: The room's size exactly as it should be shown, such as 28 m² or 14 x 16 ft. | |
clipData.facts | group | Facts: The figures of the facts row on the end card, each with its icon. A figure left out is not drawn. | ||
clipData.facts.bedrooms | integer | from 0, to 999 | Bedrooms: How many bedrooms. | |
clipData.facts.bathrooms | number | from 0, 1 decimals | Bathrooms: How many bathrooms, halves allowed, such as 2.5. | |
clipData.facts.area | number | from 0, 2 decimals | Area: The living area, as a number. | |
clipData.facts.areaUnit | text | up to 8 characters | Area unit: The unit after the area, such as m² or sq ft. | |
clipData.facts.parking | integer | from 0, to 999 | Parking: How many parking spaces or garages. | |
clipData.factLabels | group | Fact labels: The word under each figure of the facts row, in your language. A label left out is not drawn; the icon still says which is which. | ||
clipData.factLabels.bedrooms | text | up to 16 characters | Bedrooms: Under the bedrooms. | |
clipData.factLabels.bathrooms | text | up to 16 characters | Bathrooms: Under the bathrooms. | |
clipData.factLabels.area | text | up to 16 characters | Area: Under the area. | |
clipData.factLabels.parking | text | up to 16 characters | Parking: Under the parking. | |
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.brokerage | text | yes | up to 60 characters | Brokerage: Your licensed brokerage name, set prominently in the header on every frame. |
clipData.disclosure | text | up to 300 characters | Disclosure: The licence and the statements the law asks for, shown above your footer line from the first frame to the last. 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, text at the start. | ||
clipData.look.theme | enum | brand, light, dark, bold | Theme: Brand: your brand's own colours and background. Light or dark: a page tinted with your brand colour. Bold: your brand colour as the page. | |
clipData.look.pace | enum | calm, standard, punchy | Pace: How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts. | |
clipData.look.corners | enum | square, soft, round | Corners: The shape of cards, pictures and buttons. | |
clipData.look.align | enum | start, centre | Text alignment: Where the text lines up. | |
clipData.look.logo | enum | auto, free | Logo: The style's own: the logo on a small plate so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose. | |
clipData.look.logoSize | enum | auto, small, large | Logo size: Standard is the style's own size. Small draws the logo a fifth smaller, with its plate. Large draws it a quarter larger wherever the style has room for it, and at the standard size where it has none. | |
metaData | group | Meta data: Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data. | ||
metaData.title | text | up to 100 characters | Title: Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes. | |
metaData.captionTiny | text | up to 200 characters | Tiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionShort | text | up to 500 characters | Short description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionMedium | text | up to 1500 characters | Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok): Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionLong | text | up to 4000 characters | Long description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.hashtags | list | up to 15 | Hashtags: Written without the #. Up to 15, which every platform takes. | |
metaData.hashtags[] | text | up to 60 characters | Hashtag |
locales carries other languages: under each language code, the parts of clipData and metaData that differ, laid over the default, so a language with no copy still renders.
A picture is always a file from your media library: media:// followed by its id or its name.
Anything the table does not list is refused, and so is anything over its limit, with a 400
schema_validation error that names the field.
The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"status": {
"type": "string",
"maxLength": 24,
"title": "Status ribbon",
"description": "The words on the ribbon over the photos, such as Take the tour, Step inside or Just listed."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "What the home is, in a few words, above the price on the first frame."
},
"address": {
"type": "string",
"maxLength": 80,
"title": "Address",
"description": "Where it is: the street and the town, or only the area if you prefer."
},
"price": {
"type": "number",
"minimum": 0,
"title": "Price",
"description": "The asking price as a number, set large the way your language writes it, in the currency below. Leave it out to show the price in words instead."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The price's currency as a three-letter code, such as EUR, GBP or USD."
},
"priceText": {
"type": "string",
"maxLength": 32,
"title": "Price in words",
"description": "Shown as written where no price is sent, such as Price on application or Offers over 950,000."
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"photo": {
"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": "Photo",
"description": "A photo of the room, any shape, with its description as alt text. It fills the stage, cropped from its middle."
},
"name": {
"type": "string",
"maxLength": 32,
"title": "Name",
"description": "The room's name, such as Living room or Main bedroom."
},
"note": {
"type": "string",
"maxLength": 72,
"title": "Note",
"description": "One line on what makes the room, under its name."
},
"size": {
"type": "string",
"maxLength": 16,
"title": "Size",
"description": "The room's size exactly as it should be shown, such as 28 m² or 14 x 16 ft."
}
},
"required": [
"photo",
"name"
],
"additionalProperties": false,
"title": "Room"
},
"minItems": 2,
"maxItems": 8,
"title": "Rooms",
"description": "The rooms of the tour in the order they are shown, the first one's photo the cover. Two to eight, each adding three seconds; each is numbered by its place in the list."
},
"facts": {
"type": "object",
"properties": {
"bedrooms": {
"type": "integer",
"minimum": 0,
"maximum": 999,
"title": "Bedrooms",
"description": "How many bedrooms."
},
"bathrooms": {
"type": "number",
"minimum": 0,
"title": "Bathrooms",
"description": "How many bathrooms, halves allowed, such as 2.5."
},
"area": {
"type": "number",
"minimum": 0,
"title": "Area",
"description": "The living area, as a number."
},
"areaUnit": {
"type": "string",
"maxLength": 8,
"title": "Area unit",
"description": "The unit after the area, such as m² or sq ft."
},
"parking": {
"type": "integer",
"minimum": 0,
"maximum": 999,
"title": "Parking",
"description": "How many parking spaces or garages."
}
},
"additionalProperties": false,
"title": "Facts",
"description": "The figures of the facts row on the end card, each with its icon. A figure left out is not drawn."
},
"factLabels": {
"type": "object",
"properties": {
"bedrooms": {
"type": "string",
"maxLength": 16,
"title": "Bedrooms",
"description": "Under the bedrooms."
},
"bathrooms": {
"type": "string",
"maxLength": 16,
"title": "Bathrooms",
"description": "Under the bathrooms."
},
"area": {
"type": "string",
"maxLength": 16,
"title": "Area",
"description": "Under the area."
},
"parking": {
"type": "string",
"maxLength": 16,
"title": "Parking",
"description": "Under the parking."
}
},
"additionalProperties": false,
"title": "Fact labels",
"description": "The word under each figure of the facts row, in your language. A label left out is not drawn; the icon still says which is which."
},
"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."
},
"brokerage": {
"type": "string",
"maxLength": 60,
"title": "Brokerage",
"description": "Your licensed brokerage name, set prominently in the header on every frame."
},
"disclosure": {
"type": "string",
"maxLength": 300,
"title": "Disclosure",
"description": "The licence and the statements the law asks for, shown above your footer line from the first frame to the last. 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, text at the start."
}
},
"required": [
"address",
"rooms",
"brokerage"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the status ribbon, the headline, the price, the address, the rooms with their photos, names, notes and sizes, the facts, the call to action, the brokerage and the disclosure."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
},
"locales": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"status": {
"type": "string",
"maxLength": 24,
"title": "Status ribbon",
"description": "The words on the ribbon over the photos, such as Take the tour, Step inside or Just listed."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "What the home is, in a few words, above the price on the first frame."
},
"address": {
"type": "string",
"maxLength": 80,
"title": "Address",
"description": "Where it is: the street and the town, or only the area if you prefer."
},
"price": {
"type": "number",
"minimum": 0,
"title": "Price",
"description": "The asking price as a number, set large the way your language writes it, in the currency below. Leave it out to show the price in words instead."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The price's currency as a three-letter code, such as EUR, GBP or USD."
},
"priceText": {
"type": "string",
"maxLength": 32,
"title": "Price in words",
"description": "Shown as written where no price is sent, such as Price on application or Offers over 950,000."
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"photo": {
"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": "Photo",
"description": "A photo of the room, any shape, with its description as alt text. It fills the stage, cropped from its middle."
},
"name": {
"type": "string",
"maxLength": 32,
"title": "Name",
"description": "The room's name, such as Living room or Main bedroom."
},
"note": {
"type": "string",
"maxLength": 72,
"title": "Note",
"description": "One line on what makes the room, under its name."
},
"size": {
"type": "string",
"maxLength": 16,
"title": "Size",
"description": "The room's size exactly as it should be shown, such as 28 m² or 14 x 16 ft."
}
},
"required": [
"photo",
"name"
],
"additionalProperties": false,
"title": "Room"
},
"minItems": 2,
"maxItems": 8,
"title": "Rooms",
"description": "The rooms of the tour in the order they are shown, the first one's photo the cover. Two to eight, each adding three seconds; each is numbered by its place in the list."
},
"facts": {
"type": "object",
"properties": {
"bedrooms": {
"type": "integer",
"minimum": 0,
"maximum": 999,
"title": "Bedrooms",
"description": "How many bedrooms."
},
"bathrooms": {
"type": "number",
"minimum": 0,
"title": "Bathrooms",
"description": "How many bathrooms, halves allowed, such as 2.5."
},
"area": {
"type": "number",
"minimum": 0,
"title": "Area",
"description": "The living area, as a number."
},
"areaUnit": {
"type": "string",
"maxLength": 8,
"title": "Area unit",
"description": "The unit after the area, such as m² or sq ft."
},
"parking": {
"type": "integer",
"minimum": 0,
"maximum": 999,
"title": "Parking",
"description": "How many parking spaces or garages."
}
},
"additionalProperties": false,
"title": "Facts",
"description": "The figures of the facts row on the end card, each with its icon. A figure left out is not drawn."
},
"factLabels": {
"type": "object",
"properties": {
"bedrooms": {
"type": "string",
"maxLength": 16,
"title": "Bedrooms",
"description": "Under the bedrooms."
},
"bathrooms": {
"type": "string",
"maxLength": 16,
"title": "Bathrooms",
"description": "Under the bathrooms."
},
"area": {
"type": "string",
"maxLength": 16,
"title": "Area",
"description": "Under the area."
},
"parking": {
"type": "string",
"maxLength": 16,
"title": "Parking",
"description": "Under the parking."
}
},
"additionalProperties": false,
"title": "Fact labels",
"description": "The word under each figure of the facts row, in your language. A label left out is not drawn; the icon still says which is which."
},
"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."
},
"brokerage": {
"type": "string",
"maxLength": 60,
"title": "Brokerage",
"description": "Your licensed brokerage name, set prominently in the header on every frame."
},
"disclosure": {
"type": "string",
"maxLength": 300,
"title": "Disclosure",
"description": "The licence and the statements the law asks for, shown above your footer line from the first frame to the last. 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, text at the start."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the status ribbon, the headline, the price, the address, the rooms with their photos, names, notes and sizes, the facts, the call to action, the brokerage and the disclosure."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
}
},
"additionalProperties": false
},
"propertyNames": {
"enum": [
"aa",
"ab",
"ae",
"af",
"ak",
"am",
"an",
"ar",
"as",
"av",
"ay",
"az",
"ba",
"be",
"bg",
"bi",
"bm",
"bn",
"bo",
"br",
"bs",
"ca",
"ce",
"ch",
"co",
"cr",
"cs",
"cu",
"cv",
"cy",
"da",
"de",
"dv",
"dz",
"ee",
"el",
"en",
"eo",
"es",
"et",
"eu",
"fa",
"ff",
"fi",
"fj",
"fo",
"fr",
"fy",
"ga",
"gd",
"gl",
"gn",
"gu",
"gv",
"ha",
"he",
"hi",
"ho",
"hr",
"ht",
"hu",
"hy",
"hz",
"ia",
"id",
"ie",
"ig",
"ii",
"ik",
"io",
"is",
"it",
"iu",
"ja",
"jv",
"ka",
"kg",
"ki",
"kj",
"kk",
"kl",
"km",
"kn",
"ko",
"kr",
"ks",
"ku",
"kv",
"kw",
"ky",
"la",
"lb",
"lg",
"li",
"ln",
"lo",
"lt",
"lu",
"lv",
"mg",
"mh",
"mi",
"mk",
"ml",
"mn",
"mr",
"ms",
"mt",
"my",
"na",
"nb",
"nd",
"ne",
"ng",
"nl",
"nn",
"no",
"nr",
"nv",
"ny",
"oc",
"oj",
"om",
"or",
"os",
"pa",
"pi",
"pl",
"ps",
"pt",
"qu",
"rm",
"rn",
"ro",
"ru",
"rw",
"sa",
"sc",
"sd",
"se",
"sg",
"si",
"sk",
"sl",
"sm",
"sn",
"so",
"sq",
"sr",
"ss",
"st",
"su",
"sv",
"sw",
"ta",
"te",
"tg",
"th",
"ti",
"tk",
"tl",
"tn",
"to",
"tr",
"ts",
"tt",
"tw",
"ty",
"ug",
"uk",
"ur",
"uz",
"ve",
"vi",
"vo",
"wa",
"wo",
"xh",
"yi",
"yo",
"za",
"zh",
"zu",
"zh-CN",
"zh-TW",
"pt-BR"
]
}
}
},
"required": [
"clipData"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
Ask Reelwire for the same document yourself, without signing in:
curl "http://localhost:4000/v1/formats/template/tpl_abd904ec6309?variant=Property%20tour&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": {
"status": "Take the tour",
"headline": "Inside a light-filled family home by the park",
"address": "12 Parkside Avenue, Larkspur Hill",
"price": 1250000,
"currency": "EUR",
"priceText": "",
"rooms": [
{
"name": "Living room",
"note": "A wall of glass onto the south-facing garden",
"size": "38 m²",
"photo": {
"alt": "Hills and a lake under a changing sky",
"url": "media://example-image-with-animation.svg"
}
},
{
"name": "Kitchen",
"note": "Built around an oak island under three pendant lights",
"size": "24 m²",
"photo": {
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
}
}
],
"facts": {
"area": 185,
"parking": 2,
"areaUnit": "m²",
"bedrooms": 4,
"bathrooms": 2.5
},
"factLabels": {
"area": "Living area",
"parking": "Parking",
"bedrooms": "Bedrooms",
"bathrooms": "Bathrooms"
},
"cta": {
"label": "Book a viewing",
"detail": "+44 20 7946 0321"
},
"brokerage": "Larkspur Realty Ltd",
"disclosure": "Larkspur Realty Ltd, licence 0612345. Equal housing opportunity.",
"look": {
"logo": "auto",
"pace": "calm",
"align": "start",
"theme": "brand",
"corners": "soft",
"logoSize": "auto"
}
},
"metaData": {
"title": "Take the tour: inside a light-filled family home by the park",
"captionTiny": "Take the tour: living room, kitchen, main bedroom and garden at 12 Parkside Avenue, Larkspur Hill. Book a viewing.",
"captionShort": "Take the tour of 12 Parkside Avenue in Larkspur Hill, room by room: a living room with a wall of glass onto the garden, a kitchen built around an oak island and a main bedroom with its own bathroom. Four bedrooms, 185 m², asking 1,250,000 euros. Book your viewing today.",
"captionMedium": "Take the tour of 12 Parkside Avenue in Larkspur Hill, room by room. The living room opens through a wall of glass onto the south-facing garden, the kitchen is built around an oak island under three pendant lights, and the main bedroom has its own bathroom and a view over the park. Four bedrooms, two and a half bathrooms, 185 m² of living space and parking for two. Asking 1,250,000 euros. Like what you see? Message Sophie Laurent to book a viewing. Larkspur Realty Ltd, licence 0612345. Equal housing opportunity.",
"captionLong": "Take the tour of 12 Parkside Avenue in Larkspur Hill, room by room, before you visit. Step into the living room, 38 m² with a wall of glass that opens onto the south-facing garden and terrace. The kitchen is built around a solid oak island under three pendant lights, with room for the whole family at breakfast. Upstairs, the main bedroom has its own bathroom with a freestanding bath and a view over the park, and three more bedrooms share a family bathroom. Outside, the garden runs down to a timber terrace made for summer evenings. Four bedrooms, two and a half bathrooms, 185 m² of living space and parking for two, a short walk to the park, the schools and the station. Asking 1,250,000 euros. Viewings are by appointment: message Sophie Laurent, our listing agent, to book yours or to ask for the floor plan. Larkspur Realty Ltd, licence 0612345. Equal housing opportunity.",
"hashtags": [
"propertytour",
"hometour",
"realestate",
"justlisted",
"househunting"
]
}
}
}
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.