Dynamic Lists in LandinChat let you display real-time, data-driven options inside WhatsApp or Webchat messages—without manually creating each row.
Instead of hardcoding items, Dynamic Lists automatically generate rows using JSON data from API responses, such as:
- Product catalogs
- Appointment slots
- Order lists
- Service options
If your chatbot still shows static menus, you’re wasting automation power.
What Are Dynamic Lists? #
Dynamic Lists are interactive WhatsApp list messages whose rows are generated automatically from a JSON object stored in a custom field.
Each row can display:
- A title (e.g., product name)
- A description (e.g., price + features)
- A hidden value (e.g., link, ID, date)
The list updates itself whenever the API data changes.
Key Characteristics of Dynamic Lists #
- Rows are created dynamically from JSON data
- Data usually comes from an HTTP API integration
- User selection can be saved to a custom field
- Ideal for real-time, personalized conversations
WhatsApp Dynamic List Limitations (Non-Negotiable) #
- Maximum 10 rows per list message
- If you have more than 10 items:
- Split them into multiple list messages
- Each row must be meaningful and concise
Ignoring this will cause message failures.
Example Use Case: Product Catalog #
Assume your API returns this JSON array:
[
{
"product_name": "Apple iPhone 15 Pro",
"price": "$999",
"description": "A17 Pro chip, 48MP camera",
"buy_link": "https://www.apple.com/iphone-15-pro/"
},
{
"product_name": "Samsung Galaxy S24 Ultra",
"price": "$1,199",
"description": "6.8-inch AMOLED display, 200MP camera",
"buy_link": "https://www.samsung.com/galaxy-s24-ultra/"
}
]
Each object becomes one clickable row in WhatsApp.
Step-by-Step: Setting Up Dynamic Lists in LandinChat #
Step 1: Fetch Data Using HTTP API #
- Go to Integrations → HTTP API
- Create or use an existing API
- Fetch the data (products, dates, etc.)
- Save the API response to a custom field
Example:ProductCatalog
⚠️ The response must be valid JSON.
Step 2: Configure Dynamic Rows in Flow Builder #
In the Bot Flow Builder, add an Interactive List block.
Set the following:
Row Generation Method #
- Select Dynamic
Custom Field for Dynamic Rows #
- Choose the custom field containing JSON
Example:#ProductCatalog#
Step 3: Map Row Content #
Row Title (Key) #
- Use a key from your JSON
Example:product_name
This becomes the clickable title:
- Apple iPhone 15 Pro
- Samsung Galaxy S24 Ultra
Row Description Format #
Use this syntax:
#ProductCatalog->price# – #ProductCatalog->description#
Example output:
$999 – A17 Pro chip, 48MP camera
Step 4: Save User Selection #
To store what the user clicks:
- Save Selection To:
Custom field (e.g.,SelectedProductLink) - Key to Save:
buy_link
This saves:
https://www.apple.com/iphone-15-pro/
Now you can:
- Redirect user
- Trigger purchase flow
- Send follow-up messages
Step 5: Test the Dynamic List #
Before going live:
- Preview the list
- Click each row
- Confirm saved values
- Ensure no empty rows appear
Never skip testing. Dynamic data fails silently.
JSON Configuration Examples #
Example 1: Product Catalog (Array) #
[
{
"product_name": "Apple iPhone 15 Pro",
"price": "$999",
"description": "Powerful A17 Pro chip, 48MP camera.",
"buy_link": "https://www.apple.com/iphone-15-pro/"
}
]
Configuration
- Row Title:
product_name - Row Description:
#ProductCatalog->price# – #ProductCatalog->description# - Saved Value:
buy_link
Example 2: Appointment Dates (Simple Object) #
{
"0": "07-01-2025",
"1": "08-01-2025",
"2": "09-01-2025"
}
Configuration
- Dynamic Rows: Enabled
- Custom Field:
#AppointmentDateList# - Row Title: Leave blank
- Saved Value: Leave blank (stores selected date)
Handling Nested JSON #
If your API response looks like this:
{
"success": true,
"available_dates": {
"0": "07-01-2025",
"1": "08-01-2025"
}
}
How to Handle It
- Store
available_datesin a custom field - Set Dynamic Rows to that field
- Use keys inside
available_dates
Nested JSON must be mapped correctly, or nothing renders.
Best Practices (Ignore = Broken UX) #
- Always validate API response format
- Use short, clear row titles
- Avoid long descriptions
- Never exceed 10 rows per message
- Test with real data, not dummy JSON
Dynamic lists are powerful—but fragile if misconfigured.
Key Takeaway #
Dynamic Lists turn WhatsApp messages into:
- Live catalogs
- Smart schedulers
- Interactive menus
- Data-driven experiences
If you’re still hardcoding options, you’re not using LandinChat properly.
Frequently Asked Questions (FAQs) #
1. Do Dynamic Lists work only with APIs? #
Primarily yes. Data must come from JSON stored in custom fields.
2. Can I use Dynamic Lists without HTTP API? #
Only if JSON data is already stored manually—but that defeats the purpose.
3. What happens if API returns more than 10 items? #
Only the first 10 can be shown. Send multiple list messages if needed.
4. Can I save the user’s selection? #
Yes. Save it to a custom field for further automation.
5. Can I show prices, descriptions, and links? #
Yes, using row title + description + saved value mapping.
6. Are Dynamic Lists supported on WhatsApp? #
Yes, fully supported under WhatsApp interactive list messages.
7. What’s the most common mistake? #
Incorrect JSON structure or wrong key mapping.
8. Can I use Dynamic Lists for bookings? #
Yes. Appointment slots are one of the best use cases.
9. Do Dynamic Lists affect quality rating? #
No, as long as users interact positively.
10. Who should use Dynamic Lists? #
Anyone doing:
- eCommerce
- Appointments
- Service menus
- Product discovery
- Lead qualification