Skip to main content

Finance (Real estate), Price reduced 1.0.0

TemplateFinance (Real estate), tpl_abd904ec6309
VariantPrice reduced
Version1.0.0, the newest: what a channel following this variant draws
Shapes9x16, 4x5, 1x1, 16x9, 2x3
Length22 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.

FieldTypeRequiredLimitWhat it is
clipDatagroupyesClip 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.statustextup to 24 charactersStatus ribbon: The stage of the listing, on the ribbon over the photos, such as Price reduced, New price or Reduced.
clipData.headlinetextup to 64 charactersHeadline: What makes the home, in a few words, above the prices.
clipData.addresstextyesup to 80 charactersAddress: Where it is: the street and the town, or only the area if you prefer.
clipData.oldPricenumberyesfrom 0, 2 decimalsFormer price: The price before the change, as a number, struck through. The difference to the new price is shown exactly, never rounded.
clipData.newPricenumberyesfrom 0, 2 decimalsNew price: The price now, as a number, set large the way your language writes it.
clipData.currencytextup to 3 charactersCurrency: The prices' currency as a three-letter code, such as EUR, GBP or USD.
clipData.reductionLabeltextup to 24 charactersWord before the new price: A short word over the new price, such as Now or Reduced to.
clipData.factsgroupFacts: The figures of the facts row, each with its icon. A figure left out is not drawn.
clipData.facts.bedroomsintegerfrom 0, to 999Bedrooms: How many bedrooms.
clipData.facts.bathroomsnumberfrom 0, 1 decimalsBathrooms: How many bathrooms, halves allowed, such as 2.5.
clipData.facts.areanumberfrom 0, 2 decimalsArea: The living area, as a number.
clipData.facts.areaUnittextup to 8 charactersArea unit: The unit after the area, such as m² or sq ft.
clipData.facts.parkingintegerfrom 0, to 999Parking: How many parking spaces or garages.
clipData.factLabelsgroupFact 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.bedroomstextup to 16 charactersBedrooms: Under the bedrooms.
clipData.factLabels.bathroomstextup to 16 charactersBathrooms: Under the bathrooms.
clipData.factLabels.areatextup to 16 charactersArea: Under the area.
clipData.factLabels.parkingtextup to 16 charactersParking: Under the parking.
clipData.photoslistyesat least 1, up to 6Photos: The home's photos in the order they are shown, the first the cover. One to six, each adding about three seconds.
clipData.photos[]imagemedia:// file from the media library, alt text up to 120 charactersPhoto: A photo of the home, any shape, with its description as alt text.
clipData.highlightslistup to 3Highlights: Up to three short lines, one over each photo after the first (where there are fewer photos, they share them).
clipData.highlights[]textup to 48 charactersHighlight
clipData.ctagroupCall 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.labeltextyesup to 28 charactersButton: What the button says.
clipData.cta.detailtextup to 48 charactersLine under it: An address, a handle, an app, a phone number.
clipData.brokeragetextyesup to 60 charactersBrokerage: Your licensed brokerage name, set prominently in the header on every frame.
clipData.disclosuretextup to 300 charactersDisclosure: 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.lookgroupLook: 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.themeenumbrand, light, dark, boldTheme: 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.paceenumcalm, standard, punchyPace: How things arrive: calm fades, a standard rhythm, or punchy slams and hard cuts.
clipData.look.cornersenumsquare, soft, roundCorners: The shape of cards, pictures and buttons.
clipData.look.alignenumstart, centreText alignment: Where the text lines up.
clipData.look.logoenumauto, freeLogo: 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.logoSizeenumauto, small, largeLogo 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.
metaDatagroupMeta 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.titletextup to 100 charactersTitle: 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.captionTinytextup to 200 charactersTiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionShorttextup to 500 charactersShort description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.captionMediumtextup to 1500 charactersMedium 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.captionLongtextup to 4000 charactersLong description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit.
metaData.hashtagslistup to 15Hashtags: Written without the #. Up to 15, which every platform takes.
metaData.hashtags[]textup to 60 charactersHashtag

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.