Finance (Real estate), Price reduced 1.0.0
| Template | Finance (Real estate), tpl_abd904ec6309 |
|---|---|
| Variant | Price reduced |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 22 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 price change: the photo with the status ribbon, the headline, the former price struck through, the new price large and the facts, complete on the first frame. Then the new price settles from the former one, each photo turns with a highlight, then the agent and the button. The brokerage and the disclosure stay throughout. About three seconds longer per photo. 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 former and the new price, the address, the facts, the photos and their highlights, the call to action, the brokerage and the disclosure. | |
clipData.status | text | up to 24 characters | Status ribbon: The stage of the listing, on the ribbon over the photos, such as Price reduced, New price or Reduced. | |
clipData.headline | text | up to 64 characters | Headline: What makes the home, in a few words, above the prices. | |
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.oldPrice | number | yes | from 0, 2 decimals | Former price: The price before the change, as a number, struck through. The difference to the new price is shown exactly, never rounded. |
clipData.newPrice | number | yes | from 0, 2 decimals | New price: The price now, as a number, set large the way your language writes it. |
clipData.currency | text | up to 3 characters | Currency: The prices' currency as a three-letter code, such as EUR, GBP or USD. | |
clipData.reductionLabel | text | up to 24 characters | Word before the new price: A short word over the new price, such as Now or Reduced to. | |
clipData.facts | group | Facts: The figures of the facts row, 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.photos | list | yes | at least 1, up to 6 | Photos: The home's photos in the order they are shown, the first the cover. One to six, each adding about three seconds. |
clipData.photos[] | image | media:// file from the media library, alt text up to 120 characters | Photo: A photo of the home, any shape, with its description as alt text. | |
clipData.highlights | list | up to 3 | Highlights: Up to three short lines, one over each photo after the first (where there are fewer photos, they share them). | |
clipData.highlights[] | text | up to 48 characters | Highlight | |
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 stage of the listing, on the ribbon over the photos, such as Price reduced, New price or Reduced."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "What makes the home, in a few words, above the prices."
},
"address": {
"type": "string",
"maxLength": 80,
"title": "Address",
"description": "Where it is: the street and the town, or only the area if you prefer."
},
"oldPrice": {
"type": "number",
"minimum": 0,
"title": "Former price",
"description": "The price before the change, as a number, struck through. The difference to the new price is shown exactly, never rounded."
},
"newPrice": {
"type": "number",
"minimum": 0,
"title": "New price",
"description": "The price now, as a number, set large the way your language writes it."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The prices' currency as a three-letter code, such as EUR, GBP or USD."
},
"reductionLabel": {
"type": "string",
"maxLength": 24,
"title": "Word before the new price",
"description": "A short word over the new price, such as Now or Reduced to."
},
"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, 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."
},
"photos": {
"type": "array",
"items": {
"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 home, any shape, with its description as alt text."
},
"minItems": 1,
"maxItems": 6,
"title": "Photos",
"description": "The home's photos in the order they are shown, the first the cover. One to six, each adding about three seconds."
},
"highlights": {
"type": "array",
"items": {
"type": "string",
"maxLength": 48,
"title": "Highlight"
},
"maxItems": 3,
"title": "Highlights",
"description": "Up to three short lines, one over each photo after the first (where there are fewer photos, they share them)."
},
"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",
"oldPrice",
"newPrice",
"photos",
"brokerage"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the status ribbon, the headline, the former and the new price, the address, the facts, the photos and their highlights, 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 stage of the listing, on the ribbon over the photos, such as Price reduced, New price or Reduced."
},
"headline": {
"type": "string",
"maxLength": 64,
"title": "Headline",
"description": "What makes the home, in a few words, above the prices."
},
"address": {
"type": "string",
"maxLength": 80,
"title": "Address",
"description": "Where it is: the street and the town, or only the area if you prefer."
},
"oldPrice": {
"type": "number",
"minimum": 0,
"title": "Former price",
"description": "The price before the change, as a number, struck through. The difference to the new price is shown exactly, never rounded."
},
"newPrice": {
"type": "number",
"minimum": 0,
"title": "New price",
"description": "The price now, as a number, set large the way your language writes it."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The prices' currency as a three-letter code, such as EUR, GBP or USD."
},
"reductionLabel": {
"type": "string",
"maxLength": 24,
"title": "Word before the new price",
"description": "A short word over the new price, such as Now or Reduced to."
},
"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, 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."
},
"photos": {
"type": "array",
"items": {
"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 home, any shape, with its description as alt text."
},
"minItems": 1,
"maxItems": 6,
"title": "Photos",
"description": "The home's photos in the order they are shown, the first the cover. One to six, each adding about three seconds."
},
"highlights": {
"type": "array",
"items": {
"type": "string",
"maxLength": 48,
"title": "Highlight"
},
"maxItems": 3,
"title": "Highlights",
"description": "Up to three short lines, one over each photo after the first (where there are fewer photos, they share them)."
},
"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 former and the new price, the address, the facts, the photos and their highlights, 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=Price%20reduced&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": "Price reduced",
"headline": "Now within reach: a family home by the park",
"address": "12 Parkside Avenue, Larkspur Hill",
"oldPrice": 1350000,
"newPrice": 1250000,
"currency": "EUR",
"reductionLabel": "Now",
"facts": {
"area": 185,
"parking": 2,
"areaUnit": "m²",
"bedrooms": 4,
"bathrooms": 2.5
},
"factLabels": {
"area": "Living area",
"parking": "Parking",
"bedrooms": "Bedrooms",
"bathrooms": "Bathrooms"
},
"photos": [
{
"alt": "Hills and a lake under a changing sky",
"url": "media://example-image-with-animation.svg"
},
{
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
}
],
"highlights": [
"South-facing garden with a terrace",
"Open-plan kitchen and living room"
],
"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": "Price reduced: a family home by the park, now 1,250,000 euros",
"captionTiny": "Price reduced: 4 bedrooms, 2.5 bathrooms, 185 m² by the park in Larkspur Hill, now 1,250,000 euros. Book a viewing.",
"captionShort": "Price reduced: our family home by the park in Larkspur Hill is now 1,250,000 euros, down from 1,350,000. Four bedrooms, two and a half bathrooms, 185 m² of living space and a south-facing garden with a terrace. Book your viewing today.",
"captionMedium": "Price reduced: our light-filled family home by the park in Larkspur Hill is now asking 1,250,000 euros, down from 1,350,000. Four bedrooms, two and a half bathrooms and 185 m² of living space over two floors, with an open-plan kitchen and living room that opens onto a south-facing garden and terrace. Parking for two, a short walk to the park, the schools and the station. If it was just out of reach before, now is the time to take a look: message Sophie Laurent to book a viewing. Larkspur Realty Ltd, licence 0612345. Equal housing opportunity.",
"captionLong": "Price reduced: our light-filled family home by the park in Larkspur Hill is now asking 1,250,000 euros, down from 1,350,000. Four bedrooms, two and a half bathrooms and 185 m² of living space over two floors. The open-plan kitchen and living room run the full depth of the house and open through a wall of glass onto a south-facing garden and terrace, made for long summer evenings. Upstairs, the main bedroom has its own bathroom and a view over the park. Parking for two, a short walk to the park, the schools and the station, and every room ready to move into. The sellers have found their next home and are ready to agree a sale. If it was just out of reach before, now is the time to take a look: message Sophie Laurent, our listing agent, to book a viewing or to ask for the floor plan. Larkspur Realty Ltd, licence 0612345. Equal housing opportunity.",
"hashtags": [
"pricereduced",
"realestate",
"newprice",
"familyhome",
"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.