# Shared blocks

Source: https://kirora.io/docs/api/reference/shared-blocks

A shared block is a block kept once and placed in many templates, such as a footer or a product card. Editing one changes every draft that places it; a published template, a scheduled campaign and a live journey keep the copy they froze until they are published or saved again. Check its usage before changing it.

## Endpoints

- [List shared blocks](https://kirora.io/docs/api/reference/listSharedBlocks): `GET /v1/shared-blocks`
- [Create a shared block](https://kirora.io/docs/api/reference/createSharedBlock): `POST /v1/shared-blocks`
- [Retrieve a shared block](https://kirora.io/docs/api/reference/getSharedBlock): `GET /v1/shared-blocks/{id}`
- [Update a shared block](https://kirora.io/docs/api/reference/updateSharedBlock): `PATCH /v1/shared-blocks/{id}`
- [Delete a shared block](https://kirora.io/docs/api/reference/deleteSharedBlock): `DELETE /v1/shared-blocks/{id}`
- [Retrieve a shared block's usage](https://kirora.io/docs/api/reference/getSharedBlockUsage): `GET /v1/shared-blocks/{id}/usage`

## The SharedBlock object

```json
{
  "id": "0192f3d1-3c4d-7e5f-8a61-7c8d9e0f1a2b",
  "name": "Footer note",
  "blocks": [
    {
      "id": "footer-note",
      "type": "text",
      "text": "Juniper Kitchen, 12 Market Street, London. Questions? Reply to this email.",
      "align": "center"
    }
  ],
  "createdAt": "2026-10-01T09:30:00.000Z",
  "updatedAt": "2026-10-01T09:30:00.000Z"
}
```

- `id` (string, required, uuid)
- `name` (string, required)
- `blocks` (object[], required, at least 1 item, at most 200 items) — The blocks, rendered top to bottom: at most 200 across the whole tree and five levels including the root. The footer stays at the root.
  - One of: **HeaderBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("header", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `src` (string, optional, up to 2,048 characters) — The logo image's URL; without one, the brand kit's logo.
    - `alt` (string, optional, up to 100,000 characters) — The logo's alt text. Without `src` or a brand kit logo, it shows as a wordmark in the heading font; gallery samples set it to `{{ org.name }}`.
    - `width` (string, optional) — A share of the row ("100%", "66%", "50%"), or a fixed width from "16px" to "600px", such as "120px" for a logo. Never wider than the row.
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
    - `href` (string, optional, up to 2,048 characters) — Where it links: an `https:`, `http:`, `mailto:` or `tel:` address, or a merge tag. `https://` is added to a bare address such as `acme.com/setup`. A draft may hold anything; a button or video whose link is none of these cannot be published or sent.
  - One of: **HeadingBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("heading", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `text` (string, optional, up to 100,000 characters)
    - `size` (string, optional, one of `28px`, `22px`, `18px`)
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
    - `weight` (string, optional, one of `regular`, `bold`)
  - One of: **TextBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("text", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `text` (string, optional, up to 100,000 characters)
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
  - One of: **ImageBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("image", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `src` (string, optional, up to 2,048 characters)
    - `alt` (string, optional, up to 100,000 characters)
    - `width` (string, optional) — A share of the row ("100%", "66%", "50%"), or a fixed width from "16px" to "600px", such as "120px" for a logo. Never wider than the row.
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
    - `href` (string, optional, up to 2,048 characters) — Where it links: an `https:`, `http:`, `mailto:` or `tel:` address, or a merge tag. `https://` is added to a bare address such as `acme.com/setup`. A draft may hold anything; a button or video whose link is none of these cannot be published or sent.
  - One of: **ButtonBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("button", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `text` (string, optional, up to 100,000 characters)
    - `href` (string, optional, up to 2,048 characters) — Where it links: an `https:`, `http:`, `mailto:` or `tel:` address, or a merge tag. `https://` is added to a bare address such as `acme.com/setup`. A draft may hold anything; a button or video whose link is none of these cannot be published or sent.
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
    - `fullWidth` (boolean, optional)
    - `color` (string, optional) — A hex colour, or a theme reference: `accent`, `canvas`, or `accent-tint` / `canvas-tint` (a light tint of it), which follows the theme.
    - `buttonStyle` (string, optional, one of `solid`, `outline`) — This button's style, in place of the theme's.
  - One of: **DividerBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("divider", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `thickness` (integer, optional, min 1, max 10) — Line weight in px.
    - `color` (string, optional) — A hex colour, or a theme reference: `accent`, `canvas`, or `accent-tint` / `canvas-tint` (a light tint of it), which follows the theme.
    - `lineStyle` (string, optional, one of `solid`, `dashed`, `dotted`)
    - `width` (string, optional, one of `100%`, `75%`, `50%`, `25%`) — How much of the row the line spans.
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
  - One of: **SpacerBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("spacer", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `size` (string, optional, pattern `^\d{1,3}px$`) — The height, from "4px" to "200px".
  - One of: **ColumnsBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("columns", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `widths` (integer[], optional, at least 2 items, at most 2 items) — Each column's share of the row in percent, left to right, one per column and adding up to 100, such as [33, 67]. Omit for equal columns.
    - `valign` (string, optional, one of `top`, `middle`, `bottom`) — Where shorter columns sit against the tallest one.
    - `stackOnMobile` (boolean, optional) — False keeps the columns side by side on phones too, such as a two-across product grid; by default they stack.
    - `columns` (object[][], required, at least 2 items, at most 2 items) — The child blocks of each column, left to right: exactly 2 arrays.
  - One of: **Columns3Block**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("columns3", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `widths` (integer[], optional, at least 3 items, at most 3 items) — Each column's share of the row in percent, left to right, one per column and adding up to 100, such as [33, 67]. Omit for equal columns.
    - `valign` (string, optional, one of `top`, `middle`, `bottom`) — Where shorter columns sit against the tallest one.
    - `stackOnMobile` (boolean, optional) — False keeps the columns side by side on phones too, such as a two-across product grid; by default they stack.
    - `columns` (object[][], required, at least 3 items, at most 3 items) — The child blocks of each column, left to right: exactly 3 arrays.
  - One of: **ImageTextBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("imagetext", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `src` (string, optional, up to 2,048 characters)
    - `alt` (string, optional, up to 100,000 characters)
    - `text` (string, optional, up to 100,000 characters)
    - `side` (string, optional, one of `left`, `right`) — Which side the image sits on; unset, the start of the reading direction (left, or right in a right-to-left language).
  - One of: **ImageGroupBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("imagegroup", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `count` (2 | 3, optional)
    - `images` (object[], optional, at most 3 items)
      - `src` (string, optional, up to 2,048 characters)
      - `alt` (string, optional, up to 100,000 characters)
  - One of: **BoxedBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("boxed", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `text` (string, optional, up to 100,000 characters)
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
  - One of: **QuoteBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("quote", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `text` (string, optional, up to 100,000 characters)
    - `text2` (string, optional, up to 100,000 characters)
  - One of: **ListBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("list", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `text` (string, optional, up to 100,000 characters)
  - One of: **ProductBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("product", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `weight` (string, optional, one of `regular`, `bold`) — The name and price in bold (the default) or regular weight.
    - `text` (string, optional, up to 100,000 characters)
    - `text2` (string, optional, up to 100,000 characters)
    - `desc` (string, optional, up to 100,000 characters)
    - `href` (string, optional, up to 2,048 characters) — Where it links: an `https:`, `http:`, `mailto:` or `tel:` address, or a merge tag. `https://` is added to a bare address such as `acme.com/setup`. A draft may hold anything; a button or video whose link is none of these cannot be published or sent.
    - `src` (string, optional, up to 2,048 characters)
    - `alt` (string, optional, up to 100,000 characters)
  - One of: **VideoBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("video", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `src` (string, optional, up to 2,048 characters)
    - `alt` (string, optional, up to 100,000 characters)
    - `text` (string, optional, up to 100,000 characters)
    - `href` (string, optional, up to 2,048 characters) — Where it links: an `https:`, `http:`, `mailto:` or `tel:` address, or a merge tag. `https://` is added to a bare address such as `acme.com/setup`. A draft may hold anything; a button or video whose link is none of these cannot be published or sent.
  - One of: **SocialBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("social", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
    - `links` (object[], optional, at most 10 items) — The profiles to show; without any, the brand kit's social links.
      - `label` (string, required, 1–80 characters)
      - `href` (string, required, uri, pattern `^[^\s{}]*$`, up to 2,048 characters)
    - `display` (string, optional, one of `icons`, `both`, `text`) — Each link as its network's icon (the default), the icon and its label, or the label alone. The network is read from the link's address; any other address shows a globe.
    - `iconStyle` (string, optional, one of `color`, `dark`, `light`) — Icons in each network's colour (the default), near-black, or white for a dark background.
  - One of: **MenuBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("menu", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `links` (object[], optional, at most 8 items) — The entries, left to right: at most 8 { label, href }.
      - `label` (string, required, 1–80 characters)
      - `href` (string, required, uri, pattern `^[^\s{}]*$`, up to 2,048 characters)
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
    - `separator` (string, optional, one of `none`, `bar`, `dot`) — What stands between entries: space only, a bar or a dot.
  - One of: **HtmlBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("html", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `text` (string, optional, up to 100,000 characters)
  - One of: **SectionBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("section", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `backgroundImage` (string, optional, pattern `^https:\/\/[^\s"'()<>\\{}]+$`, up to 2,048 characters) — A photo behind the section's blocks, covering the box. Needs `style.backgroundColor`, which Outlook for Windows and clients with images off show instead, and which text is made readable on.
    - `blocks` (object[], required, at least 1 item, at most 200 items) — The section's child blocks, drawn inside its box.
  - One of: **FooterBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("footer", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `text` (string, optional, up to 100,000 characters)
    - `locked` (true, optional)
    - `align` (string, optional, one of `left`, `center`, `right`) — When unset, headings, text, buttons and boxed text start from the reading side (left, or right in a right-to-left language); other blocks centre.
    - `unsubscribeLink` (boolean, optional) — False leaves out the unsubscribe link, for a transactional email (a receipt, a sign-in code). A marketing send adds the sender's own link anyway.
    - `unsubscribeLabel` (string, optional, up to 80 characters) — The words of the unsubscribe link, "Unsubscribe" by default. The link opens a page that also manages topic preferences, so "Unsubscribe or manage preferences" is accurate.
  - One of: **RepeatBlock**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("repeat", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIf` ([object](https://kirora.io/docs/api/models#segment-rules), optional) — Show the block only to contacts these segment rules match, checked as each message is rendered. Omit to show it to everyone.
      - Any of: **Match all**
        - `all` (object[], required, at least 1 item, at most 20 items) — Every rule or nested group must match.
      - Any of: **Match any**
        - `any` (object[], required, at least 1 item, at most 20 items) — At least one rule or nested group must match.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `list` (string, required, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — The list to repeat over: `event.properties.<name>` (a journey's event, or a transactional send's `data`) or `contact.attributes.<name>`.
    - `limit` (integer, optional, min 1, max 100)
    - `blocks` (object[], required, at least 1 item, at most 200 items) — The blocks written out once per item of `list`, where `{{ item.<field> }}` reads that item. Repeats do not nest.
  - One of: **SharedBlockReference**
    - `id` (string, required, 1–128 characters) — Identifies the block within the template; unique among its blocks.
    - `type` ("shared", required)
    - `style` (EmailBlockStyle, optional) — Visual overrides for this block, such as colours, font and spacing.
      - `backgroundColor` (string, optional) — Fill behind the block.
      - `fontFamily` (string, optional, one of `arial`, `verdana`, `georgia`, `tahoma`, `times-new-roman`, `courier-new`, `inter`, `roboto`, `open-sans`, `lato`, `montserrat`, `poppins`, `dm-sans`, `nunito`, `work-sans`, `oswald`, `ubuntu`, `mulish`, `manrope`, `quicksand`, `rubik`, `josefin-sans`, `epilogue`, `noto-sans`, `space-grotesk`, `plus-jakarta-sans`, `outfit`, `bricolage-grotesque`, `sora`, `ibm-plex-sans`, `geist`, `space-mono`, `playfair-display`, `merriweather`, `lora`, `libre-baskerville`, `eb-garamond`, `fraunces`, `source-serif-4`, `cormorant-garamond`) — A font id: one every client has (arial, verdana, georgia, tahoma, times-new-roman, courier-new), or a web font, which shows where the client loads it and falls back to a safe font elsewhere. Form themes use the same ids.
      - `fontSize` (integer, optional, min 12, max 72) — Text size in px, 12 to 72.
      - `mobileFontSize` (integer, optional, min 12, max 72) — Text size in px on phones (screens up to 620px), 12 to 72. Email apps that ignore mobile styles use `fontSize`.
      - `padding` (object, optional) — Space inside the block in px, 0 to 100 per side; omitted sides keep their default.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `mobilePadding` (object, optional) — Space inside the block in px on phones (screens up to 620px), 0 to 100 per side; omitted sides keep the block's `padding` (or its default). Email apps that ignore mobile styles use `padding`.
        - `top` (integer, optional, min 0, max 100)
        - `right` (integer, optional, min 0, max 100)
        - `bottom` (integer, optional, min 0, max 100)
        - `left` (integer, optional, min 0, max 100)
      - `borderWidth` (integer, optional, min 0, max 10) — Border thickness in px; 0 for none.
      - `borderStyle` (string, optional, one of `solid`, `dashed`, `dotted`) — Border line style.
      - `borderColor` (string, optional) — Border colour.
      - `borderRadius` (integer, optional, min 0, max 100) — Corner rounding in px, 0 to 100.
      - `textColor` (string, optional) — Text colour.
      - `linkColor` (string, optional) — Colour of links in the text.
      - `linkUnderline` (boolean, optional) — Set to false for links without an underline, such as a row of rating numbers or stars.
      - `letterSpacing` (number, optional, min -2, max 20) — Space between letters in px, such as 3 for a spaced-out eyebrow line.
      - `textTransform` (string, optional, one of `none`, `uppercase`) — Set to `uppercase` to capitalise all text.
      - `lineHeight` (number, optional, min 1, max 3) — A multiple of the font size.
      - `fontWeight` (string, optional, one of `regular`, `bold`) — Text weight.
      - `fontStyle` (string, optional, one of `normal`, `italic`) — Text style.
      - `inset` (boolean, optional) — Draw the background and border as a box within the content width, not across the whole row.
    - `visibleIfPresent` (string, optional, pattern `^(?:contact\.attributes\.[\p{L}\p{N}\p{M}_.-]{1,64}|(?:event\.properties|data)\.[A-Za-z0-9_.-]+)$`) — Show the block only when this value is present (not missing, empty or false), such as `data.vat` for a VAT row; checked as each message is rendered.
    - `showOn` (string, optional, one of `mobile`, `desktop`) — Show the block only on phones (screens up to 620px) or only on wider screens. Clients that ignore screen size show the desktop version, and so does plain text. Omit to show it everywhere.
    - `sharedBlockId` (string, required, uuid) — The workspace's shared block placed here, by reference.
    - `override` (object[], optional, at least 1 item, at most 200 items) — Edited here only: these blocks render instead of the shared content. Omit to follow the shared block.
- `createdAt` (string, required, date-time)
- `updatedAt` (string, required, date-time)
