> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skyfree.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Flow Content and Settings

> Every element you can add to a WhatsApp Flow screen, what its settings do, and the limits WhatsApp enforces.

## What is this?

This page is the reference for the **Add content** palette in the [Flow Builder](/workspace/whatsapp/flows/builder): each element you can put on a screen, the settings it shows in the right-hand panel when you select it, and the limits WhatsApp enforces. The limits are checked when you click **Save**.

\[SCREENSHOT: flows-content-component-settings — The settings panel for a Short answer element showing Label, Field name, Required, Input type, Min chars, Max chars, Validation pattern, Helper text, and the Response tagging section]

<Info>
  Names below are the ones shown in the palette. Text and answer limits are counted in characters. Where a limit can be exceeded, you'll see a **Could not save** message naming the element — see [Troubleshooting in the Flow Builder](/workspace/whatsapp/flows/builder#troubleshooting-/-technical-notes).
</Info>

## What can I do here?

* Look up which element fits what you want to ask or show
* Check the character and count limits before you build
* Find out what each setting in the panel means

## How to use it

### Settings every answer element shares

Elements that collect an answer — everything in **Text answer** and **Selection**, plus **Upload** and **Navigation list** — share these settings:

| Setting | What it does |
| - | - |
| **Label** | The question or field title customers see. The length limit depends on the element (listed below) |
| **Field name** | The internal name of the answer. It is cleaned up automatically (lower case, with underscores) and kept unique across the whole flow — if you duplicate an element or pick a name already in use, a letter suffix is added. If an **If** or **Switch** refers to a field, it uses this name |
| **Required** | When ticked, the customer must answer. Available on **Short answer**, **Paragraph**, **Date picker**, **Calendar**, **Single choice**, **Multiple choice**, **Dropdown**, **Chips**, and **Upload** |
| **Response tagging → Map to custom field** | Where the answer is saved on the contact. Required before you can save — see [Map answers to custom fields](/workspace/whatsapp/flows/builder#map-answers-to-custom-fields) |

<Tip>
  Pick a **Field name** you'll recognize — it is the name your If and Switch rules and your custom-field mappings use. Avoid relying on digits in field names, because WhatsApp may adjust them when the flow is saved.
</Tip>

### Text

Plain text on the screen. Selecting one shows a single **Text** box. The text can't be empty.

| Element | Use it for | Limit |
| - | - | - |
| **Large heading** | The main title of the screen | 80 characters |
| **Small heading** | A section title | 80 characters |
| **Body** | A paragraph of text | 4096 characters |
| **Caption** | Small print under content | 409 characters |
| **Rich text** | Long formatted text, such as terms | Text required |

### Text answer

| Element | Settings | Limits |
| - | - | - |
| **Short answer** — one line: name, email, phone or number | **Label**, **Field name**, **Required**, **Input type**, **Min chars**, **Max chars**, **Validation pattern**, **Helper text** | Label 20; Helper text 80; **Max chars** starts at 80 |
| **Paragraph** — a longer written answer | **Label**, **Field name**, **Required**, **Max length**, **Helper text** | Label 20; Helper text 80; **Max length** starts at 600 |
| **Date picker** — pick a date | **Label**, **Field name**, **Required**, **Min Date**, **Max Date**, **Helper text**, **Error message** | Label 40; Helper text 80 |
| **Calendar** — pick a date | **Label**, **Field name**, **Required**, **Min Date**, **Max Date**, **Unavailable Dates**, **Include days (comma separated)**, **Helper text**, **Error message** | Label 40; Helper text 80; Error message 80 |

**Input type** for **Short answer** can be **Text**, **Number**, **Email**, **Password**, **Passcode**, or **Phone**. Choosing a type fills in a **Validation pattern** and **Helper text** for you where one makes sense (for example "Use digits only" for **Number**, "Enter a valid email (example: [name@company.com](mailto:name@company.com))" for **Email**, "Enter 4 to 8 digits" for **Passcode**, "Include country code when possible" for **Phone**). Changing the type again replaces them, so edit them after you pick the type.

**Validation pattern (optional regex)** must be a valid regular expression, for example `^[0-9]+$`. Use it only for the pattern — put wording for customers in **Helper text**. A pattern requires **Helper text**. **Min chars** can't be greater than **Max chars**.

**Date picker and Calendar dates.** For **Min Date** and **Max Date**, choose **Static** and pick a date, or **Dynamic** and then a **Source mode**: **Current date** ("Uses current date at runtime.") or **Endpoint** (enter an **Endpoint URL**; see [Dynamic options and endpoints](/workspace/whatsapp/flows/dynamic-data#dates-from-an-endpoint)). The minimum date can't be later than the maximum. The **Date picker** ignores **Error message** when the flow is sent to WhatsApp — use **Helper text** instead.

**Calendar only.** **Unavailable Dates** are blocked days: with **Static**, type one date per line (for example `2026-04-20`); with **Dynamic**, give an endpoint that returns them. **Include days** is a comma-separated list of the weekdays customers can pick, written `Mon,Tue,Wed,Thu,Fri,Sat,Sun`.

### Selection

| Element | Use it for | Options and limits |
| - | - | - |
| **Single choice** | Choose one option | 1 to 20 options; Label 30 |
| **Multiple choice** | Choose several options | 1 to 20 options; Label 30 |
| **Dropdown** | Choose one from a long list | 1 to 200 options; Label 20 |
| **Chips** | Choose several from short tags | 2 to 20 options; Label 80 |
| **Opt-in** | A consent tick box | Label up to 120 characters; at most 5 per screen; can't be marked **Required** |

For every option in **Single choice**, **Multiple choice**, and **Dropdown**, the option title is up to 30 characters. New elements start with **Option 1** and **Option 2**.

Under **Static / Dynamic source**, choose **Static** to type your options, or **Dynamic** to load them while the flow runs. With **Static**, **Static options** lists each option's title with a **Delete** icon and an **Add** button. **Chips** also has **Selection limits** — **Min items** and **Max items** (for example 1 and 3) — and has no helper text. The **Navigation list** works the same way (see below). **Opt-in**'s **Label** is the consent sentence customers tick; its default is "I agree to the policy".

### Media

| Element | Settings | Limits |
| - | - | - |
| **Image** — show a picture | **Upload Image**, or a pasted image value | JPG, JPEG, or PNG; up to 3 per screen |
| **Image carousel** — swipe through up to 3 pictures | **Carousel images** with **Add**, **Upload**, and a delete icon for each | 1 to 3 images; up to 2 per screen and 3 in the whole flow |
| **Upload** — customer sends a photo or document | **Picker type**, **Label**, **Field name**, **Description**, **Max file size (KB)**, and photo or document settings | One per screen; Label 80, Description 300 |

**Image.** Click **Upload Image** to choose a JPG or PNG; a thumbnail appears. The box below it accepts a base64 image or a reference like `${data.image_src}` that your endpoint fills in. Every picture needs an image before you can save.

**Image carousel.** Each slide has an image box (paste a value or click **Upload**) and a trash icon. Click **Add** for another slide. Every slide needs an image.

**Upload.** **Picker type** chooses **PhotoPicker** or **DocumentPicker**:

* **PhotoPicker** — **Photo source** (**Camera + Gallery**, **Camera only**, **Gallery only**), **Min photos**, and **Max photos**.
* **DocumentPicker** — **Min documents**, **Max documents**, and **Allowed MIME types (comma separated)**, for example `application/pdf, image/jpeg`.

Ticking **Required** makes the minimum at least 1. Across the whole flow, uploads are capped at 10 files and 102400 KB in total, so **Max file size (KB)** is limited automatically based on the maximum number of files (and never above 25600 KB per file). Lower the numbers if you see a **Flow media uploads exceed ...** message.

### Links and lists

| Element | Settings | Limits |
| - | - | - |
| **Navigation list** — a list of options that open screens | **Label**, **Field name**, **Navigation items** (a title and description for each) | 1 to 20 items; Label 80; item title 30; item description 20; up to 2 per screen |
| **Link** — a tappable text link | **Link text**, **URL** | Link text 25 characters; up to 2 per screen |

**Navigation list.** A screen with a **Navigation list** can't contain anything else, and it can't be on the final screen. Because it replaces the Button, the Button is left off that screen. Under **Static / Dynamic source**, **Static** lets you edit the **Navigation items**; **Dynamic** loads them from your endpoint.

**Link.** **URL** must be a full `https://` address, or a reference such as `${data.link_url}`. If you type a bare domain like `example.com`, `https://` is added when you leave the box.

### Logic

**If** and **Switch** show different content depending on earlier answers. They have their own page: [Logic: If and Switch](/workspace/whatsapp/flows/logic-and-branches).

### The Button

Every screen's button has a **Button label** (up to 35 characters) and optional captions (each up to 15 characters, either a **Center caption** alone or a **Left caption** and **Right caption** together). See [The Button](/workspace/whatsapp/flows/builder#the-button).

### Per-screen and per-flow limits

| Limit | Value |
| - | - |
| Components on one screen | 50 |
| Screens in one flow | 100 |
| Screen title | 30 characters |
| **Upload** elements on one screen | 1 |
| **Opt-in** elements on one screen | 5 |
| **Link** elements on one screen | 2 |
| **Image** elements on one screen | 3 |
| **Image carousel** elements | 2 per screen, 3 per flow |
| **Navigation list** elements on one screen | 2 |
| Buttons on one screen | 1 |
| Files collected by uploads across the flow | 10 files, 102400 KB in total |
| Size of the whole flow | 10 MB |

## Troubleshooting / Technical Notes

* **I can't tick Required on an Opt-in.** **Opt-in** doesn't have a **Required** setting.
* **My field name changed after I typed it.** Field names are cleaned up automatically and made unique across the whole flow. Pick a different name if you need an exact one.
* **I changed Input type and my pattern disappeared.** Choosing an input type fills in its own **Validation pattern** and **Helper text**. Set your own after choosing the type.
* **Dates in Unavailable Dates aren't accepted.** Use one date per line in the form `2026-04-20`.
* **The Image shows only a placeholder.** The element has no picture yet — click **Upload Image**.
* **The palette item is greyed out.** The screen has reached 50 components, or you're viewing a locked published flow. For **Upload**, a screen can have only one.

## Related docs

* [Flow Builder](/workspace/whatsapp/flows/builder)
* [Logic: If and Switch](/workspace/whatsapp/flows/logic-and-branches)
* [Dynamic options and endpoints](/workspace/whatsapp/flows/dynamic-data)
* [Flows](/workspace/whatsapp/flow)
* [Custom Fields](/workspace/contacts/custom-fields)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.