Public bodies, Event invite 1.0.0
| Template | Public bodies, tpl_4f9a6b9f3068 |
|---|---|
| Variant | Event invite |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 15 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 community event invitation: the event's name, date, time and place, one to three pictures, a programme of up to six entries with their times, the entry price or that it is free, and a call to action. The clip is as long as the programme needs. metaData is the post's title, descriptions and hashtags and is never drawn.
| Field | Type | Required | Limit | What it is |
|---|---|---|---|---|
clipData | group | yes | Clip data: Everything drawn in the clip: what the event is, when and where, its pictures, its programme, what entry costs and the call to action. | |
clipData.kicker | text | up to 32 characters | Kicker: A short line above the name, such as Save the date or Free for everyone. | |
clipData.headline | text | yes | up to 60 characters | Event: The event's name, or a line that says what it is. |
clipData.subline | text | up to 120 characters | What to expect: One or two sentences on what happens there. | |
clipData.date | text | yes | up to 40 characters | Date: The day or days, as they should be read, such as Saturday 18 October. |
clipData.time | text | up to 32 characters | Time: When it starts and ends, as it should be read. | |
clipData.place | text | up to 60 characters | Place: Where it is: a venue, an address or Online. | |
clipData.pictures | list | at least 1, up to 3 | Pictures: One to three pictures of the event or the place, any shape. Without any, the date stands where they would. | |
clipData.pictures[] | image | media:// file from the media library, alt text up to 120 characters | Picture: A picture of the event, the place or last year's crowd. | |
clipData.programme | list | at least 1, up to 6 | Programme: One to six entries in the order they happen, each with its time; the clip gets a second and a half longer for each. | |
clipData.programme[] | group | Entry | ||
clipData.programme[].time | text | yes | up to 16 characters | Time: When it happens, such as 14:00 or 14:00 to 16:00. |
clipData.programme[].title | text | yes | up to 48 characters | What: What happens then. |
clipData.programme[].detail | text | up to 48 characters | Detail: Where exactly, who, or what to bring. | |
clipData.programme[].icon | enum | check, circle-check, x, arrow-right, arrow-up-right, plus, star, heart, thumbs-up, sparkles, zap, clock, calendar, map-pin, info, triangle-alert, lightbulb, target, award, crown, gem, flame, timer, list-checks, clipboard-check, badge-check, hand-heart, rocket, trophy, megaphone, bell, qr-code, ticket, gift, key-round, book-open, graduation-cap, house, phone, mail, globe, users, user, building, bus, train-front, bike, car, leaf, recycle, trees, file-text, thermometer, droplets, sun, cloud-rain, snowflake, wind, stethoscope, school, trash, accessibility, hand-helping | Icon: A line icon for the entry. Without one, a dot on the timeline marks it. | |
clipData.entry | text | up to 40 characters | Entry: What entry costs or who goes free, as it should be read, such as Free entry or Children under 14 free. | |
clipData.price | number | from 0, 2 decimals | Price: The ticket price, where there is one. Leave it out for a free event and say so under Entry. | |
clipData.currency | text | up to 3 characters | Currency: The ISO code the price is in, such as EUR, GBP, USD or CHF. | |
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, a phone number. | |
clipData.disclaimer | text | up to 120 characters | Small print: Notes that must be shown, such as access or changes to the programme. | |
clipData.look | group | Look: How the clip looks and moves. The same five switches in every format (theme, pace, corners, alignment, logo), plus this format's own. Leave any out for the format's default. | ||
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.layout | enum | framed, poster | Layout: Framed: the pictures in a mosaic beside the words. Poster: the pictures fill the frame and the words stand over them. | |
clipData.look.ticket | boolean | Details as a ticket: Date, time, place and entry drawn as a ticket with a tear-off stub, or as plain lines. | ||
clipData.look.logo | enum | auto, free | Logo: The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose. | |
metaData | group | Meta data: Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data. | ||
metaData.title | text | up to 100 characters | Title: Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes. | |
metaData.captionTiny | text | up to 200 characters | Tiny description (Pinterest, Threads, X): Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionShort | text | up to 500 characters | Short description (Telegram, Threema, WeChat, WhatsApp): Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionMedium | text | up to 1500 characters | Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok): Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.captionLong | text | up to 4000 characters | Long description (Facebook Feed, YouTube): Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit. | |
metaData.hashtags | list | up to 15 | Hashtags: Written without the #. Up to 15, which every platform takes. | |
metaData.hashtags[] | text | up to 60 characters | Hashtag |
locales carries other languages: under each language code, the parts of clipData and metaData that differ, laid over the default, so a language with no copy still renders.
A picture is always a file from your media library: media:// followed by its id or its name.
Anything the table does not list is refused, and so is anything over its limit, with a 422 that
names the field.
The JSON Schema
{
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"kicker": {
"type": "string",
"maxLength": 32,
"title": "Kicker",
"description": "A short line above the name, such as Save the date or Free for everyone."
},
"headline": {
"type": "string",
"maxLength": 60,
"title": "Event",
"description": "The event's name, or a line that says what it is."
},
"subline": {
"type": "string",
"maxLength": 120,
"title": "What to expect",
"description": "One or two sentences on what happens there."
},
"date": {
"type": "string",
"maxLength": 40,
"title": "Date",
"description": "The day or days, as they should be read, such as Saturday 18 October."
},
"time": {
"type": "string",
"maxLength": 32,
"title": "Time",
"description": "When it starts and ends, as it should be read."
},
"place": {
"type": "string",
"maxLength": 60,
"title": "Place",
"description": "Where it is: a venue, an address or Online."
},
"pictures": {
"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": "Picture",
"description": "A picture of the event, the place or last year's crowd."
},
"minItems": 1,
"maxItems": 3,
"title": "Pictures",
"description": "One to three pictures of the event or the place, any shape. Without any, the date stands where they would."
},
"programme": {
"type": "array",
"items": {
"type": "object",
"properties": {
"time": {
"type": "string",
"maxLength": 16,
"title": "Time",
"description": "When it happens, such as 14:00 or 14:00 to 16:00."
},
"title": {
"type": "string",
"maxLength": 48,
"title": "What",
"description": "What happens then."
},
"detail": {
"type": "string",
"maxLength": 48,
"title": "Detail",
"description": "Where exactly, who, or what to bring."
},
"icon": {
"type": "string",
"enum": [
"check",
"circle-check",
"x",
"arrow-right",
"arrow-up-right",
"plus",
"star",
"heart",
"thumbs-up",
"sparkles",
"zap",
"clock",
"calendar",
"map-pin",
"info",
"triangle-alert",
"lightbulb",
"target",
"award",
"crown",
"gem",
"flame",
"timer",
"list-checks",
"clipboard-check",
"badge-check",
"hand-heart",
"rocket",
"trophy",
"megaphone",
"bell",
"qr-code",
"ticket",
"gift",
"key-round",
"book-open",
"graduation-cap",
"house",
"phone",
"mail",
"globe",
"users",
"user",
"building",
"bus",
"train-front",
"bike",
"car",
"leaf",
"recycle",
"trees",
"file-text",
"thermometer",
"droplets",
"sun",
"cloud-rain",
"snowflake",
"wind",
"stethoscope",
"school",
"trash",
"accessibility",
"hand-helping"
],
"title": "Icon",
"description": "A line icon for the entry. Without one, a dot on the timeline marks it.",
"enumNames": [
"Check",
"Circle check",
"X",
"Arrow right",
"Arrow up right",
"Plus",
"Star",
"Heart",
"Thumbs up",
"Sparkles",
"Zap",
"Clock",
"Calendar",
"Map pin",
"Info",
"Triangle alert",
"Lightbulb",
"Target",
"Award",
"Crown",
"Gem",
"Flame",
"Timer",
"List checks",
"Clipboard check",
"Badge check",
"Hand heart",
"Rocket",
"Trophy",
"Megaphone",
"Bell",
"Qr code",
"Ticket",
"Gift",
"Key round",
"Book open",
"Graduation cap",
"House",
"Phone",
"Mail",
"Globe",
"Users",
"User",
"Building",
"Bus",
"Train front",
"Bike",
"Car",
"Leaf",
"Recycle",
"Trees",
"File text",
"Thermometer",
"Droplets",
"Sun",
"Cloud rain",
"Snowflake",
"Wind",
"Stethoscope",
"School",
"Trash",
"Accessibility",
"Hand helping"
]
}
},
"required": [
"time",
"title"
],
"additionalProperties": false,
"title": "Entry"
},
"minItems": 1,
"maxItems": 6,
"title": "Programme",
"description": "One to six entries in the order they happen, each with its time; the clip gets a second and a half longer for each."
},
"entry": {
"type": "string",
"maxLength": 40,
"title": "Entry",
"description": "What entry costs or who goes free, as it should be read, such as Free entry or Children under 14 free."
},
"price": {
"type": "number",
"minimum": 0,
"title": "Price",
"description": "The ticket price, where there is one. Leave it out for a free event and say so under Entry."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The ISO code the price is in, such as EUR, GBP, USD or CHF."
},
"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, 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."
},
"disclaimer": {
"type": "string",
"maxLength": 120,
"title": "Small print",
"description": "Notes that must be shown, such as access or changes to the programme."
},
"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"
]
},
"layout": {
"type": "string",
"enum": [
"framed",
"poster"
],
"title": "Layout",
"description": "Framed: the pictures in a mosaic beside the words. Poster: the pictures fill the frame and the words stand over them.",
"enumNames": [
"Pictures framed",
"Pictures as a poster"
]
},
"ticket": {
"type": "boolean",
"title": "Details as a ticket",
"description": "Date, time, place and entry drawn as a ticket with a tear-off stub, or as plain lines."
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.",
"enumNames": [
"The style's own",
"As it is, no plate or crop"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves. The same five switches in every format (theme, pace, corners, alignment, logo), plus this format's own. Leave any out for the format's default."
}
},
"required": [
"headline",
"date"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: what the event is, when and where, its pictures, its programme, what entry costs and the call to action."
},
"metaData": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"title": "Title",
"description": "Used where the platform has a title of its own: Facebook Feed, LinkedIn, Pinterest and YouTube. Up to 100 characters, which every one of them takes."
},
"captionTiny": {
"type": "string",
"maxLength": 200,
"title": "Tiny description (Pinterest, Threads, X)",
"description": "Up to 200 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionShort": {
"type": "string",
"maxLength": 500,
"title": "Short description (Telegram, Threema, WeChat, WhatsApp)",
"description": "Up to 500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionMedium": {
"type": "string",
"maxLength": 1500,
"title": "Medium description (Discord, Facebook Reels, Instagram, LinkedIn, Signal, Slack, TikTok)",
"description": "Up to 1500 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"captionLong": {
"type": "string",
"maxLength": 4000,
"title": "Long description (Facebook Feed, YouTube)",
"description": "Up to 4000 characters. The brand's description, link and hashtags follow it within the platform's limit."
},
"hashtags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"title": "Hashtag"
},
"maxItems": 15,
"title": "Hashtags",
"description": "Written without the #. Up to 15, which every platform takes."
}
},
"additionalProperties": false,
"title": "Meta data",
"description": "Everything about the post that is never drawn in the clip: its title, its description in four lengths, one per kind of platform, and its hashtags. Reelwire adds the brand's description, link and hashtags after it. Left out, the post text is generated from the clip data."
},
"locales": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"clipData": {
"type": "object",
"properties": {
"kicker": {
"type": "string",
"maxLength": 32,
"title": "Kicker",
"description": "A short line above the name, such as Save the date or Free for everyone."
},
"headline": {
"type": "string",
"maxLength": 60,
"title": "Event",
"description": "The event's name, or a line that says what it is."
},
"subline": {
"type": "string",
"maxLength": 120,
"title": "What to expect",
"description": "One or two sentences on what happens there."
},
"date": {
"type": "string",
"maxLength": 40,
"title": "Date",
"description": "The day or days, as they should be read, such as Saturday 18 October."
},
"time": {
"type": "string",
"maxLength": 32,
"title": "Time",
"description": "When it starts and ends, as it should be read."
},
"place": {
"type": "string",
"maxLength": 60,
"title": "Place",
"description": "Where it is: a venue, an address or Online."
},
"pictures": {
"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": "Picture",
"description": "A picture of the event, the place or last year's crowd."
},
"minItems": 1,
"maxItems": 3,
"title": "Pictures",
"description": "One to three pictures of the event or the place, any shape. Without any, the date stands where they would."
},
"programme": {
"type": "array",
"items": {
"type": "object",
"properties": {
"time": {
"type": "string",
"maxLength": 16,
"title": "Time",
"description": "When it happens, such as 14:00 or 14:00 to 16:00."
},
"title": {
"type": "string",
"maxLength": 48,
"title": "What",
"description": "What happens then."
},
"detail": {
"type": "string",
"maxLength": 48,
"title": "Detail",
"description": "Where exactly, who, or what to bring."
},
"icon": {
"type": "string",
"enum": [
"check",
"circle-check",
"x",
"arrow-right",
"arrow-up-right",
"plus",
"star",
"heart",
"thumbs-up",
"sparkles",
"zap",
"clock",
"calendar",
"map-pin",
"info",
"triangle-alert",
"lightbulb",
"target",
"award",
"crown",
"gem",
"flame",
"timer",
"list-checks",
"clipboard-check",
"badge-check",
"hand-heart",
"rocket",
"trophy",
"megaphone",
"bell",
"qr-code",
"ticket",
"gift",
"key-round",
"book-open",
"graduation-cap",
"house",
"phone",
"mail",
"globe",
"users",
"user",
"building",
"bus",
"train-front",
"bike",
"car",
"leaf",
"recycle",
"trees",
"file-text",
"thermometer",
"droplets",
"sun",
"cloud-rain",
"snowflake",
"wind",
"stethoscope",
"school",
"trash",
"accessibility",
"hand-helping"
],
"title": "Icon",
"description": "A line icon for the entry. Without one, a dot on the timeline marks it.",
"enumNames": [
"Check",
"Circle check",
"X",
"Arrow right",
"Arrow up right",
"Plus",
"Star",
"Heart",
"Thumbs up",
"Sparkles",
"Zap",
"Clock",
"Calendar",
"Map pin",
"Info",
"Triangle alert",
"Lightbulb",
"Target",
"Award",
"Crown",
"Gem",
"Flame",
"Timer",
"List checks",
"Clipboard check",
"Badge check",
"Hand heart",
"Rocket",
"Trophy",
"Megaphone",
"Bell",
"Qr code",
"Ticket",
"Gift",
"Key round",
"Book open",
"Graduation cap",
"House",
"Phone",
"Mail",
"Globe",
"Users",
"User",
"Building",
"Bus",
"Train front",
"Bike",
"Car",
"Leaf",
"Recycle",
"Trees",
"File text",
"Thermometer",
"Droplets",
"Sun",
"Cloud rain",
"Snowflake",
"Wind",
"Stethoscope",
"School",
"Trash",
"Accessibility",
"Hand helping"
]
}
},
"required": [
"time",
"title"
],
"additionalProperties": false,
"title": "Entry"
},
"minItems": 1,
"maxItems": 6,
"title": "Programme",
"description": "One to six entries in the order they happen, each with its time; the clip gets a second and a half longer for each."
},
"entry": {
"type": "string",
"maxLength": 40,
"title": "Entry",
"description": "What entry costs or who goes free, as it should be read, such as Free entry or Children under 14 free."
},
"price": {
"type": "number",
"minimum": 0,
"title": "Price",
"description": "The ticket price, where there is one. Leave it out for a free event and say so under Entry."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The ISO code the price is in, such as EUR, GBP, USD or CHF."
},
"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, 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."
},
"disclaimer": {
"type": "string",
"maxLength": 120,
"title": "Small print",
"description": "Notes that must be shown, such as access or changes to the programme."
},
"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"
]
},
"layout": {
"type": "string",
"enum": [
"framed",
"poster"
],
"title": "Layout",
"description": "Framed: the pictures in a mosaic beside the words. Poster: the pictures fill the frame and the words stand over them.",
"enumNames": [
"Pictures framed",
"Pictures as a poster"
]
},
"ticket": {
"type": "boolean",
"title": "Details as a ticket",
"description": "Date, time, place and entry drawn as a ticket with a tear-off stub, or as plain lines."
},
"logo": {
"type": "string",
"enum": [
"auto",
"free"
],
"title": "Logo",
"description": "The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose.",
"enumNames": [
"The style's own",
"As it is, no plate or crop"
]
}
},
"additionalProperties": false,
"title": "Look",
"description": "How the clip looks and moves. The same five switches in every format (theme, pace, corners, alignment, logo), plus this format's own. Leave any out for the format's default."
}
},
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: what the event is, when and where, its pictures, its programme, what entry costs and the call to action."
},
"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_4f9a6b9f3068?variant=Event%20invite&version=1.0.0"
Delivery JSON
Your own system sends this to one of your streams, POST /v1/stream, and every channel listening to
that stream draws it with its template. data is the document described above; a stream with an
empty field map passes it to the template unchanged. Try it first on POST /v1/stream/validate,
which answers the same without publishing anything. Streams and feeds
explains the rest, including how to map a document of your own shape instead.
{
"streamId": "st_your_stream_id",
"eventId": "01M2SQMKK3G1NVFXV31DCBVB95",
"occurredAt": "2026-09-23T07:00:00Z",
"locale": "en",
"data": {
"clipData": {
"kicker": "A day out for the whole family",
"headline": "Westbrook River Festival on the Old Town promenade",
"subline": "A day of live music, food stalls and boat rides along the river, with a lantern parade when the sun goes down.",
"date": "Saturday 18 October 2026",
"time": "11:00 to 22:00",
"place": "River promenade, between Mill Bridge and the Town Hall",
"pictures": [
{
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
},
{
"alt": "Hills under an evening sky, drawn in layers",
"url": "media://example-image.svg"
},
{
"alt": "Clouds of red and blue ink in water",
"url": "media://example-image.png"
}
],
"programme": [
{
"icon": "megaphone",
"time": "11:00",
"title": "Opening with the Mayor and the brass band",
"detail": "On the Town Hall steps"
},
{
"icon": "users",
"time": "12:00",
"title": "Food stalls and the regional market open",
"detail": "All along the promenade"
},
{
"icon": "sun",
"time": "14:00",
"title": "Boat rides and the children's art corner",
"detail": "Mill Bridge landing stage"
},
{
"icon": "star",
"time": "18:30",
"title": "Live music on the river stage",
"detail": "Three local bands until late"
},
{
"icon": "sparkles",
"time": "21:00",
"title": "Lantern parade along the water",
"detail": "Lanterns handed out at the Town Hall"
}
],
"entry": "Day ticket, children under 14 go free",
"price": 5,
"currency": "EUR",
"cta": {
"label": "Plan your visit",
"detail": "westbrook.example/riverfestival"
},
"disclaimer": "Programme subject to change. The promenade is step-free, with accessible toilets at the Town Hall.",
"look": {
"theme": "brand",
"pace": "standard",
"corners": "round",
"align": "start",
"layout": "framed",
"ticket": true,
"logo": "auto"
}
},
"metaData": {
"title": "Westbrook River Festival, Saturday 18 October",
"captionTiny": "Westbrook River Festival on Saturday 18 October: music, food stalls, boat rides and a lantern parade on the Old Town promenade.",
"captionShort": "Join us for the Westbrook River Festival on Saturday 18 October, from 11:00 to 22:00 on the river promenade. Live music, food stalls, boat rides, a children's art corner and a lantern parade at nine. Day tickets 5 euros, children under 14 go free.",
"captionMedium": "The Westbrook River Festival returns to the Old Town promenade on Saturday 18 October, from 11:00 to 22:00. The Mayor and the brass band open the day on the Town Hall steps, the regional market and food stalls line the river from noon, and there are boat rides and a children's art corner at Mill Bridge in the afternoon. Three local bands play the river stage from 18:30, and the day ends with a lantern parade along the water. Day tickets cost 5 euros and children under 14 go free. The promenade is step-free. Plan your visit on our website.",
"captionLong": "The Westbrook River Festival returns to the Old Town promenade on Saturday 18 October, from 11:00 to 22:00, between Mill Bridge and the Town Hall. The Mayor and the Westbrook brass band open the day on the Town Hall steps at eleven. From noon the regional market and food stalls line the river, and in the afternoon there are boat rides from the Mill Bridge landing stage and a children's art corner. Three local bands play the river stage from half past six, and at nine the day ends with a lantern parade along the water; lanterns are handed out at the Town Hall. Day tickets cost 5 euros and children under 14 go free. The promenade is step-free, with accessible toilets at the Town Hall. The programme may change, so plan your visit on our website before you come.",
"hashtags": [
"westbrook",
"riverfestival",
"community",
"familyday"
]
}
}
}
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.