Influencer, Haul 1.0.0
| Template | Influencer, tpl_3245d6e9ee79 |
|---|---|
| Variant | Haul |
| Version | 1.0.0, the newest: what a channel following this variant draws |
| Shapes | 9x16, 4x5, 1x1, 16x9, 2x3 |
| Length | 16 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 creator's haul or shopping list: a headline, two to eight items each with a picture, a price and a one-word reaction, the total (sent, or the prices added up) and a call to action. The clip is as long as the items need. 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: the headline, the items one after another, the total and the call to action. | |
clipData.kicker | text | up to 32 characters | Kicker: A short line above the headline, such as Autumn haul or Gym bag restock. | |
clipData.headline | text | yes | up to 60 characters | Headline: What this haul is. |
clipData.currency | text | up to 3 characters | Currency: The ISO code the prices are in, such as EUR, GBP, USD or CHF. | |
clipData.items | list | yes | at least 2, up to 8 | Items: Two to eight items, shown one after another; the clip gets almost two seconds longer for each. |
clipData.items[] | group | Item | ||
clipData.items[].name | text | yes | up to 36 characters | Item: What it is. |
clipData.items[].detail | text | up to 36 characters | Detail: The shade, the size or where it is from. | |
clipData.items[].price | number | 2 decimals | Price: What it cost. Where every item has one, they are added up for the total. | |
clipData.items[].reaction | text | up to 16 characters | Reaction: One word on it, as a sticker, such as Obsessed, Worth it or Meh. | |
clipData.items[].picture | image | media:// file from the media library, alt text up to 120 characters | Picture: The item, cut out or on a plain background, or a photo; any shape works. | |
clipData.total | number | 2 decimals | Total: What it all came to, as paid. Left out, the prices are added up where every item has one. | |
clipData.totalLabel | text | up to 24 characters | Total label: The words beside the total, such as Spent in total. | |
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 100 characters | Small print: A note that must be shown, such as which items were gifted. | |
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 | unbox, receipt | Layout: Unboxing: one item after another, large, and every item together at the end. Receipt: a receipt printing a line per item beside the item, with the total at the bottom. | |
clipData.look.pictures | enum | cutout, photo | Pictures: Cut-out: products shown whole on a card. Photo: pictures fill their frame, for clothes or shots of you wearing them. | |
clipData.look.showTotal | boolean | Show the total: The total at the end, counting up to what was sent or to the prices added up. | ||
clipData.look.logo | enum | auto, free | Logo: The style's own: the logo on the style's plate (a card, a disc, a badge) so it reads on any page. As it is: the logo whole, with no plate, frame or crop, for a logo made to stand on the page, such as one with a transparent background. As it is, make sure your logo reads on the page of the theme you choose. | |
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 headline, such as Autumn haul or Gym bag restock."
},
"headline": {
"type": "string",
"maxLength": 60,
"title": "Headline",
"description": "What this haul is."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The ISO code the prices are in, such as EUR, GBP, USD or CHF."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 36,
"title": "Item",
"description": "What it is."
},
"detail": {
"type": "string",
"maxLength": 36,
"title": "Detail",
"description": "The shade, the size or where it is from."
},
"price": {
"type": "number",
"title": "Price",
"description": "What it cost. Where every item has one, they are added up for the total."
},
"reaction": {
"type": "string",
"maxLength": 16,
"title": "Reaction",
"description": "One word on it, as a sticker, such as Obsessed, Worth it or Meh."
},
"picture": {
"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": "The item, cut out or on a plain background, or a photo; any shape works."
}
},
"required": [
"name"
],
"additionalProperties": false,
"title": "Item"
},
"minItems": 2,
"maxItems": 8,
"title": "Items",
"description": "Two to eight items, shown one after another; the clip gets almost two seconds longer for each."
},
"total": {
"type": "number",
"title": "Total",
"description": "What it all came to, as paid. Left out, the prices are added up where every item has one."
},
"totalLabel": {
"type": "string",
"maxLength": 24,
"title": "Total label",
"description": "The words beside the total, such as Spent in total."
},
"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": 100,
"title": "Small print",
"description": "A note that must be shown, such as which items were gifted."
},
"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": [
"unbox",
"receipt"
],
"title": "Layout",
"description": "Unboxing: one item after another, large, and every item together at the end. Receipt: a receipt printing a line per item beside the item, with the total at the bottom.",
"enumNames": [
"Unboxing",
"Receipt"
]
},
"pictures": {
"type": "string",
"enum": [
"cutout",
"photo"
],
"title": "Pictures",
"description": "Cut-out: products shown whole on a card. Photo: pictures fill their frame, for clothes or shots of you wearing them.",
"enumNames": [
"Cut-out products",
"Photos filling the frame"
]
},
"showTotal": {
"type": "boolean",
"title": "Show the total",
"description": "The total at the end, counting up to what was sent or to the prices added up."
},
"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",
"items"
],
"additionalProperties": false,
"title": "Clip data",
"description": "Everything drawn in the clip: the headline, the items one after another, the total 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 headline, such as Autumn haul or Gym bag restock."
},
"headline": {
"type": "string",
"maxLength": 60,
"title": "Headline",
"description": "What this haul is."
},
"currency": {
"type": "string",
"maxLength": 3,
"title": "Currency",
"description": "The ISO code the prices are in, such as EUR, GBP, USD or CHF."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 36,
"title": "Item",
"description": "What it is."
},
"detail": {
"type": "string",
"maxLength": 36,
"title": "Detail",
"description": "The shade, the size or where it is from."
},
"price": {
"type": "number",
"title": "Price",
"description": "What it cost. Where every item has one, they are added up for the total."
},
"reaction": {
"type": "string",
"maxLength": 16,
"title": "Reaction",
"description": "One word on it, as a sticker, such as Obsessed, Worth it or Meh."
},
"picture": {
"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": "The item, cut out or on a plain background, or a photo; any shape works."
}
},
"required": [
"name"
],
"additionalProperties": false,
"title": "Item"
},
"minItems": 2,
"maxItems": 8,
"title": "Items",
"description": "Two to eight items, shown one after another; the clip gets almost two seconds longer for each."
},
"total": {
"type": "number",
"title": "Total",
"description": "What it all came to, as paid. Left out, the prices are added up where every item has one."
},
"totalLabel": {
"type": "string",
"maxLength": 24,
"title": "Total label",
"description": "The words beside the total, such as Spent in total."
},
"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": 100,
"title": "Small print",
"description": "A note that must be shown, such as which items were gifted."
},
"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": [
"unbox",
"receipt"
],
"title": "Layout",
"description": "Unboxing: one item after another, large, and every item together at the end. Receipt: a receipt printing a line per item beside the item, with the total at the bottom.",
"enumNames": [
"Unboxing",
"Receipt"
]
},
"pictures": {
"type": "string",
"enum": [
"cutout",
"photo"
],
"title": "Pictures",
"description": "Cut-out: products shown whole on a card. Photo: pictures fill their frame, for clothes or shots of you wearing them.",
"enumNames": [
"Cut-out products",
"Photos filling the frame"
]
},
"showTotal": {
"type": "boolean",
"title": "Show the total",
"description": "The total at the end, counting up to what was sent or to the prices added up."
},
"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: the headline, the items one after another, the total 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_3245d6e9ee79?variant=Haul&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": "Autumn beauty haul",
"headline": "Everything I picked up this month, honestly rated",
"currency": "EUR",
"items": [
{
"name": "Velvet Matte Lipstick",
"price": 18.9,
"detail": "Rosewood, from Luma Beauty",
"picture": {
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
},
"reaction": "Obsessed"
},
{
"name": "Warm Nudes Eyeshadow Palette",
"price": 34,
"detail": "Twelve shades, Petal & Co",
"picture": {
"alt": "Hills under an evening sky, drawn in layers",
"url": "media://example-image.svg"
},
"reaction": "Worth it"
},
{
"name": "Bloom Eau de Parfum",
"price": 62,
"detail": "50 ml, Maison Aurel",
"picture": {
"alt": "Clouds of red and blue ink in water",
"url": "media://example-image.png"
},
"reaction": "Dreamy"
},
{
"name": "Soft Blend Brush Trio",
"price": 24.5,
"detail": "Vegan bristles, Luma Beauty",
"picture": {
"alt": "Soft waves of blue, violet and orange",
"url": "media://example-image.jpg"
},
"reaction": "Okay"
},
{
"name": "Gel Shine Nail Duo",
"price": 12,
"detail": "Plum and Berry",
"picture": {
"alt": "Hills under an evening sky, drawn in layers",
"url": "media://example-image.svg"
},
"reaction": "Cute"
},
{
"name": "Vitamin C Glow Serum",
"price": 29.9,
"detail": "30 ml, Clearday",
"picture": {
"alt": "Clouds of red and blue ink in water",
"url": "media://example-image.png"
},
"reaction": "Holy grail"
}
],
"total": 181.3,
"totalLabel": "Spent in total",
"cta": {
"label": "Shop my picks",
"detail": "All links in my bio"
},
"disclaimer": "Bought with my own money, except the serum, which was gifted. Prices as paid.",
"look": {
"theme": "brand",
"pace": "standard",
"corners": "round",
"align": "start",
"layout": "unbox",
"pictures": "cutout",
"showTotal": true,
"logo": "auto"
}
},
"metaData": {
"title": "My autumn beauty haul, honestly rated",
"captionTiny": "Autumn beauty haul: six things I picked up this month, from a matte lipstick to a vitamin C serum, honestly rated.",
"captionShort": "Everything I picked up this month, honestly rated: a velvet matte lipstick, a warm nudes palette, a new perfume, a brush trio, two nail shades and the vitamin C serum I keep repurchasing. Links to all of it are in my bio.",
"captionMedium": "Everything I picked up this month, honestly rated. The Velvet Matte Lipstick in Rosewood is my new everyday shade, the Warm Nudes palette is worth every cent, Bloom smells like a garden after rain, the brush trio is fine but not special, the nail duo is just cute, and the vitamin C serum stays my holy grail. Everything was bought with my own money except the serum, which was gifted. All links are in my bio.",
"captionLong": "Everything I picked up this month, honestly rated. The Velvet Matte Lipstick in Rosewood from Luma Beauty is my new everyday shade and does not dry my lips. The Warm Nudes palette from Petal & Co has twelve shades and every one of them gets used, so it is worth it. Bloom from Maison Aurel smells like a garden after rain. The Soft Blend brush trio is okay, soft enough but nothing special. The Gel Shine nail duo in Plum and Berry is simply cute. And the Vitamin C Glow Serum from Clearday stays my holy grail. Everything was bought with my own money except the serum, which was gifted, and the prices are what I paid. All links are in my bio; tell me what I should try next.",
"hashtags": [
"beautyhaul",
"autumnhaul",
"makeuphaul",
"honestreview",
"miraglow"
]
}
}
}
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.