WhatsApp Flow Components Reference
Meta WhatsApp Flows supports 23 distinct UI components categorized into text blocks, form inputs, selection controls, date pickers, media containers, navigation menus, and conditional containers.
Below is the complete reference dictionary, property requirements, and version compatibility matrix.
1. Component Availability Matrix
| Component Type | Category | Required Version | SMSPort Simulator Support | Primary Purpose |
|---|---|---|---|---|
TextHeading |
Typography | 2.1+ | Full | Primary section titles and screen headers |
TextSubheading |
Typography | 2.1+ | Full | Secondary section titles |
TextBody |
Typography | 2.1+ | Full | Explanatory paragraphs with Markdown support |
TextCaption |
Typography | 2.1+ | Full | Small helper text, footnotes, and external links |
RichText |
Typography | 5.1+ | Full | Structured markdown documents and terms lists |
TextInput |
Input | 2.1+ | Full | Single-line alphanumeric text, email, phone, or regex validated input |
TextArea |
Input | 2.1+ | Full | Multi-line text entry for comments, feedback, or addresses |
Dropdown |
Selection | 2.1+ | Full (Native Bottom Sheet) | Full-screen searchable picker sheet for long option lists |
RadioButtonsGroup |
Selection | 2.1+ | Full | Single-choice list with title and optional description subtitles |
CheckboxGroup |
Selection | 2.1+ | Full | Multi-choice list with min/max selection bounds |
ChipsSelector |
Selection | 6.3+ | Full | Compact horizontal pills for multi-tagging and quick selections |
DatePicker |
Date & Time | 2.1+ | Full | Standard calendar date selector |
CalendarPicker |
Date & Time | 6.1+ | Full | Interactive monthly calendar grid for appointment bookings |
PhotoPicker |
Media / Input | 4.0+ | Full | Capture or select photos from camera or gallery (JPEG/PNG/WebP, up to 30 files, 25MB cap) |
DocumentPicker |
Media / Input | 4.0+ | Full | Upload PDF and generic document attachments (up to 30 files, 25MB cap) |
OptIn |
Control | 2.1+ | Full | Mandatory or optional legal consent checkbox |
EmbeddedLink |
Control | 2.1+ | Full | Clickable hyperlink to external URLs or internal sub-screens |
Footer |
Control | 2.1+ | Full | Primary action button anchored to screen bottom |
Image |
Media | 2.1+ | Full | Static banners or product images (URL or Base64) |
ImageCarousel |
Media | 7.1+ | Full | Horizontal swipeable image slider with pagination dots |
NavigationList |
Navigation | 6.2+ | Full | Clickable chevron (>) menu for nested sub-screen hierarchies |
If |
Logic | 2.1+ | Full | Conditional component rendering based on form/data expressions |
Switch |
Logic | 2.1+ | Full | Multi-branch case switching container |
2. Text & Typography Components
`TextHeading`, `TextSubheading`, `TextBody`, `TextCaption`
{
"type": "TextHeading",
"text": "Book Your Consultation"
},
{
"type": "TextBody",
"text": "Please choose your preferred branch and consultation mode.",
"markdown": true
}`RichText` (Flow 5.1+)
Accepts an array of markdown strings formatted with headers, bold text, and bullet lists:
{
"type": "RichText",
"text": [
"# Terms of Service",
"Please read these conditions carefully before submitting:",
"- All bookings require 24 hours cancellation notice.",
"- Consultation fees are charged upon appointment arrival."
]
}3. Interactive Input Fields
`TextInput`
{
"type": "TextInput",
"name": "patient_email",
"label": "Email address",
"input-type": "email",
"required": true,
"helper-text": "We will send your confirmation slip here"
}Supported input-type values: "text", "number", "email", "phone", "password". Regex patterns can be provided via "pattern": "^[0-9]{10}$".
`TextArea`
{
"type": "TextArea",
"name": "symptoms_description",
"label": "Reason for visit",
"max-length": "500",
"required": false
}4. Selection Components
`Dropdown`
In SMSPort's simulator and client devices, Dropdown opens a native full-screen bottom sheet with live search filtering:
{
"type": "Dropdown",
"name": "preferred_branch",
"label": "Select medical centre",
"data-source": "${data.branch_list}",
"required": true
}`RadioButtonsGroup` & `CheckboxGroup`
{
"type": "RadioButtonsGroup",
"name": "consultation_type",
"label": "Choose appointment type",
"data-source": [
{ "id": "in_person", "title": "In-Person Clinic Visit", "description": "Meet with doctor at clinic" },
{ "id": "video", "title": "Video Tele-Consultation", "description": "15-minute secure video call" }
],
"required": true
}`ChipsSelector` (Flow 6.3+)
{
"type": "ChipsSelector",
"name": "health_concerns",
"label": "Select topics",
"data-source": "${data.concern_chips}",
"max-selected-items": 3
}5. Advanced Controls (Meta 6.1+ & 7.1+)
`CalendarPicker` (Flow 6.1+)
Interactive month grid allowing single date or range selection:
{
"type": "CalendarPicker",
"name": "appointment_date",
"label": "Appointment date",
"mode": "single",
"min-date": "2026-05-01",
"max-date": "2026-12-31"
}`NavigationList` (Flow 6.2+)
Renders row menu items with chevrons (>) that transition directly to sub-screens:
{
"type": "NavigationList",
"name": "department_menu",
"list-items": "${data.departments}",
"on-click-action": {
"name": "navigate",
"next": { "type": "screen", "name": "DOCTOR_SELECTION" },
"payload": { "dept_id": "${form.department_menu}" }
}
}`ImageCarousel` (Flow 7.1+)
Horizontal swipeable gallery with pagination dots and aspect ratio enforcement (1:1, 4:3, 16:9):
{
"type": "ImageCarousel",
"aspect-ratio": "16:9",
"images": "${data.hospital_photos}"
}6. Media Upload Components (Flow 4.0+)
WhatsApp Flows v4.0+ introduces native file upload components allowing users to capture or attach media within a Flow session.
`PhotoPicker`
Enables users to take a photo using their device camera or select images from their photo gallery:
{
"type": "PhotoPicker",
"name": "kyc_selfie",
"label": "Identity verification selfie",
"description": "Please take a clear photo of your face in good lighting.",
"photo-source": "camera",
"min-uploaded-photos": 1,
"max-uploaded-photos": 2,
"max-file-size-kb": 10240
}Properties:
| Property | Type | Default | Description |
|---|---|---|---|
name |
string | Required | Form field identifier in screen submission data |
label |
string | - | Primary label above the upload trigger |
description |
string | - | Explanatory subtitle text |
photo-source |
enum | "camera_gallery" |
Allowed photo source: "camera", "gallery", or "camera_gallery" |
min-uploaded-photos |
number | 0 |
Minimum photos required before submitting (0 to 30) |
max-uploaded-photos |
number | 1 |
Maximum allowed photos (1 to 30, must be >= min-uploaded-photos) |
max-file-size-kb |
number | 25600 |
Maximum file size in kilobytes (cap is 25600 KB / 25 MiB) |
`DocumentPicker`
Allows users to upload documents (such as PDF files, invoices, contracts, or diagnostic reports):
{
"type": "DocumentPicker",
"name": "signed_contract",
"label": "Upload signed agreement",
"description": "Attach the signed PDF copy of your agreement.",
"allowed-mime-types": ["application/pdf"],
"min-uploaded-documents": 1,
"max-uploaded-documents": 5,
"max-file-size-kb": 5120
}Properties:
| Property | Type | Default | Description |
|---|---|---|---|
name |
string | Required | Form field identifier in screen submission data |
label |
string | - | Primary label above the upload trigger |
description |
string | - | Explanatory subtitle text |
allowed-mime-types |
string[] | [] |
Array of permitted MIME types (e.g., ["application/pdf"]) |
min-uploaded-documents |
number | 0 |
Minimum documents required before submitting (0 to 30) |
max-uploaded-documents |
number | 1 |
Maximum allowed documents (1 to 30, must be >= min-uploaded-documents) |
max-file-size-kb |
number | 25600 |
Maximum file size in kilobytes (cap is 25600 KB / 25 MiB) |
Critical Meta Constraints for Media Pickers:
- Flow JSON Version: Minimum Flow JSON version 4.0 is required.
- One Media Picker Per Screen: A screen may contain at most one
PhotoPickeror oneDocumentPicker. - Mutual Exclusion:
PhotoPickerandDocumentPickercannot exist together on the same screen. - Form
init-valuesProhibited: Media pickers cannot be pre-populated or referenced in Forminit-values. - No
navigateAction Payloads: Media picker values cannot be forwarded insidenavigateaction payloads between screens. They can only be submitted to dynamic endpoints viadata_exchangeor completed viacompleteaction. - Encrypted CDN Storage: Files uploaded through WhatsApp Flows are automatically end-to-end encrypted and stored on WhatsApp's MMG CDN. Your endpoint receives download URLs alongside AES-256 decryption metadata.