WhatsApp interactive messages help customers answer your business by providing them prepared responses in the form of buttons, list rows, or links. They make it easy for customers to reply based on your expectations in cases where free text would leave the customer guessing or could lead to ambiguous communication. You can send these messages only as replies, within 24 hours of a customer’s last message or call. Meta bills buttons and lists as service messages, and each business phone number gets its first 1,000 free every month.
Key Takeaways
- Buttons and lists give customers ready answers, so every reply is clear and your system can act on it without anyone reading free text.
- You can send interactive messages only within 24 hours of a customer’s message or call, and anything later needs an approved template.
- Pick the format by the size of the choice: reply buttons for up to 3 options, a list for up to 10, and a Flow when you need several fields at once.
- Buttons and lists cost the same as any other service message, with the first 1,000 per business phone number each month free.
What Are WhatsApp Interactive Messages?
WhatsApp interactive messages are replies with built-in controls, such as buttons, a list, or a link button. You set the options, and the customer selects the one that fits.
Meta classes reply buttons, lists, and most other interactive types as service messages, free-form messages that need no template approval.[1] You send them through the WhatsApp Cloud API while a customer service window is open. The window opens when a customer messages or calls your business and lasts 24 hours, and every new message or call resets it. The customer must also have opted in to hear from you.
Once the window closes, only approved templates go through. Write any later follow-up as a template and get it through template approval.
Which Interactive Message Types Can You Send?
You can send six interactive types in an open window, each built for a different kind of answer. Match each type to the job in the table before you write any JSON.
| Type | interactive.type | Use it for | Main limit | What the customer does |
|---|---|---|---|---|
| Reply buttons | button | Confirm, move, or cancel | Up to 3 buttons.[2] | Selects one button |
| List | list | Topics or delivery slots | Up to 10 rows across all sections.[3] | Selects one row |
| CTA URL button | cta_url | Linking to a web page | One button that maps a label to a URL.[4] | Opens the page in the browser |
| Media carousel | carousel | Visual options | An image or video header on every card.[5] | Selects a card button |
| Location request | location_request_message | Pickup or delivery point | One send-location button under the body text.[6] | Shares a location |
| Address message | address_message | Delivery address | India-based businesses and customers only.[7] | Enters an address |
Our guide to product and catalog messages covers the interactive messages that show products from a catalog.
How Do Reply Buttons Work?
Reply buttons place a few fixed answers under your text, and the customer’s choice returns to your webhook with the ID you gave that button. Use them when you know every valid answer in advance, such as keeping, moving, or canceling an appointment.
Plan the copy around these field limits, shown here for an appointment reminder:
| Field | Limit | Example |
|---|---|---|
| Body | Required, up to 1,024 characters; URLs become links automatically | “Your appointment is on Friday at 10:00. Keep it?” |
| Button title | Required, up to 20 characters, unique within the message | “Keep it”, “Move it”, “Cancel” |
| Button ID | Required, up to 256 characters, unique per button | move_appt_8812, which names the action and the record |
| Header | Optional text, image, video, or document | “Appointment reminder” |
| Footer | Optional, up to 60 characters | “Reply by Thursday evening” |
For a media header, upload the file first and pass its media ID. Meta marks a media link in the header as “not recommended.”
How Do List Messages Work?
A list message shows one button under your text, and that button opens a menu where the customer selects a single row. Use a list when the answers are known but too many for buttons, such as support topics or delivery slots.
Sections group rows under headings, and the row cap covers all sections combined. These are the field limits, shown here for delivery slots:
| Field | Limit | Example |
|---|---|---|
| Menu button | Required, up to 20 characters | “See slots” |
| Body | Required, up to 4,096 characters | “Pick a delivery slot for your order.” |
| Header | Optional, text only, up to 60 characters | “Delivery slots” |
| Footer | Optional, up to 60 characters | “You can change the slot later” |
| Section title | Required, up to 24 characters, at least one section | “Tuesday” |
| Row ID | Required, up to 200 characters | slot_tue_morning |
| Row title | Required, up to 24 characters | “Morning, 9:00 to 12:00” |
| Row description | Optional, up to 72 characters | “The driver calls before arriving” |
How Do CTA URL Buttons Work?
A CTA URL button puts a web link behind a short label, and the customer opens the page with one click. Use it when the next step happens on a website, such as tracking a parcel or paying an invoice.
The action object takes "name": "cta_url" with parameters.display_text, a label of up to 20 characters, and parameters.url. Keep the body to 1,024 characters. An optional header takes text of up to 60 characters or media from a public URL, and an optional footer holds up to 60 characters.
The page opens in the phone’s default browser, outside WhatsApp. Track the visit on your own site, for example with a campaign parameter in the URL.
How Do Media Carousel Messages Work?
A media carousel sends 2 to 10 cards that the customer scrolls sideways, each with its own image or video and its own button. Use it when the choice is visual, such as picking one of three room types or tour dates.
The structure follows fixed rules:
- Main body: required, up to 1,024 characters. The carousel takes no main header, no footer, and no other interactive components.
- Card header: an image or video on every card. Other header types are unsupported.
- Card body: optional, up to 160 characters with at most 2 line breaks.
- Card buttons: give each card one URL button or at least one quick-reply button, and repeat the same button types and count on every card. Quick-reply IDs take up to 256 characters, and button labels take up to 20.
Because every card repeats the same buttons, write one action that fits all of them, such as “Book this room.” To send a carousel outside the customer service window, use a carousel template, which is a separate format.
How Do You Send an Interactive Message Through the 360Dialog API?
You send every interactive type through 360Dialog with one request format, the same message body Meta documents for the Cloud API.[8] One request builder then covers all six types, and only the interactive part changes between them. 360Dialog, an Official Meta Solution Partner, gives developers direct access to the WhatsApp Business API and includes a testing sandbox.
- Prepare the account: You need an approved account with a registered phone number and the API key for that number.
- Set up the webhook: Point it to an HTTPS URL with a valid SSL certificate, and make it return 200 OK within 80 milliseconds. The WhatsApp Business Platform retries failed deliveries with exponential backoff for up to 7 days.
- Send the request: POST the JSON body to
https://waba-v2.360dialog.io/messageswith your key in theD360-API-KEYheader andContent-Type: application/json. Requests without the key are rejected. - Wait for the status: The API response confirms acceptance, and delivery arrives later as a status webhook. Delivery order is not guaranteed, so when order matters, wait for
deliveredbefore sending the next message.
This request asks a customer to keep, move, or cancel an appointment:
curl -X POST "https://waba-v2.360dialog.io/messages" \
-H "D360-API-KEY: $D360_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"to": "<CUSTOMER_PHONE_NUMBER>",
"type": "interactive",
"interactive": {
"type": "button",
"body": { "text": "Your appointment is on Friday at 10:00. Keep it?" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "keep_appt_8812", "title": "Keep it" } },
{ "type": "reply", "reply": { "id": "move_appt_8812", "title": "Move it" } },
{ "type": "reply", "reply": { "id": "cancel_appt_8812", "title": "Cancel" } }
]
}
}
}'
A reply button or list message sent outside the 24-hour window returns an error.[9] Check the window in your code before each send. Get API access to connect your number through 360Dialog and send this request to your own phone as a first test.
How Do You Read the Customer’s Reply?
The customer’s choice reaches your webhook as an inbound message that carries the ID you set on the button or row. Route on that ID. Your bot then never has to interpret free text for a closed question.
Replies arrive on the messages webhook field, and context.id holds the answered message’s ID.[10] Each action returns its own object:
| Customer action | Message type | Reply object | Fields you get |
|---|---|---|---|
| Selects a reply button | interactive | button_reply | id, title |
| Selects a list row | interactive | list_reply | id, title, description |
| Shares a location | location | Location fields | Latitude, longitude, and optional name and address |
| Submits an address or a Flow | interactive | nfm_reply | response_json |
| Selects a quick reply in a template | button | button | payload, text.[11] |
If one number sends both templates and interactive messages, handle the template shape too.
Flow or Buttons: Which Should You Use?
Use reply buttons or a list when the customer picks one answer from a short, fixed set, and use a Flow when you need typed input or several answers at once. Choosing by the shape of the answer keeps each conversation as short as the task allows.
A booking that needs a date, a time, and a number of guests takes three messages with buttons, and each one is billed once the free tier is used. A WhatsApp Flow is a form that opens inside the chat and collects all three in one reply.
Open questions, such as describing a fault, suit free text later in the chat. For the first message, Meta’s message quality guidance says: “Avoid sending open-ended welcome or introductory messages.”
| Answer you need | Format to use |
|---|---|
| One choice from up to 3 options | Reply buttons |
| One choice from 4 to 10 options | List message |
| One choice that depends on a picture | Media carousel |
| A step that happens on a website | CTA URL button |
| Several fields, dates, or validated input | WhatsApp Flow |
| An open description in the customer’s words | Free text |
Our guide shows how to build a WhatsApp Flow.
Do Interactive Messages Cost Extra?
Interactive messages carry no surcharge for their buttons or lists: Meta bills each delivered one as a service message, the same category as a plain text reply.[12] Budget interactive replies at your market’s service rate.
Since October 1, 2026, each delivered service message costs what a utility or authentication message costs in that market, with no volume tiers. Each business phone number sends its first 1,000 service messages free every month, and the unused allowance does not roll over. Add a payment method to the account, or Meta stops delivering service messages once that free tier is used.
Status webhooks show which messages you pay for under "category": "service": "type": "free_customer_service" inside the free tier, and "type": "regular" with "billable": true once charging starts.
When a customer arrives through a Click to WhatsApp ad on Android or iOS, reply within the customer service window. That opens a free entry point window of up to 7 days, and service messages in it cost nothing. Our service message charging explainer covers the change in detail.
Start with the question your customers answer most often, such as confirming an appointment or picking a delivery slot. With ready answers, customers reply in one step, your team stops chasing what a message meant, and each answer goes straight to the right next action. Get API access to send that first interactive reply through 360Dialog and read the answer on your own webhook.
Frequently Asked Questions
Are WhatsApp Service Messages Still Free in 2026?
WhatsApp service messages are free only within a monthly allowance. Since October 1, 2026, Meta charges each delivered service message after the first 1,000 per business phone number each month. The allowance resets every month, and unused messages do not roll over. A Click to WhatsApp ad can open a free entry point window, and service messages sent in it stay free for up to 7 days.
Can You Send an Interactive Message Outside the 24-Hour Window?
You can send interactive messages only within 24 hours of a customer’s last message or call to your business. Once that customer service window closes, only an approved template can reach the customer. A template can carry its own quick-reply buttons, and the customer’s reply to it opens a new window for interactive messages.
How Do You Ask a Customer for Their Location on WhatsApp?
A location request message asks the customer to share a location through one button under your text. The body holds up to 1,024 characters and can include URLs. When the customer shares, your webhook receives a location message with latitude and longitude. Name and address arrive only when the customer chooses to include them.
Can You Collect a Delivery Address With an Interactive Message?
Address messages collect a delivery address inside WhatsApp and are available only to businesses based in India messaging customers in India. The country parameter is mandatory, and you can prefill values or offer saved addresses. The submitted address returns as an nfm_reply with a response_json field. A client that cannot show the message drops it, and a status webhook reports error 1026, Receiver Incapable.
Why Is My Webhook Not Receiving Button Replies?
Button replies arrive as inbound messages on Meta’s messages webhook, the same channel as text replies. On 360Dialog, your endpoint must use HTTPS with a valid SSL certificate, return 200 OK, and respond within 80 milliseconds. The WhatsApp Business Platform retries failed deliveries with exponential backoff for up to 7 days, and an endpoint you fix within that time still receives the replies it missed.
Sources
[1] Meta for Developers, “Service messages.” Updated May 21, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/send-messages/
[2] Meta for Developers, “Interactive reply buttons messages.” Updated May 21, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/interactive-reply-buttons-messages/
[3] Meta for Developers, “Interactive list messages.” Updated July 2, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/interactive-list-messages/
[4] Meta for Developers, “Interactive CTA URL button messages.” Updated July 2, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/interactive-cta-url-messages/
[5] Meta for Developers, “Interactive media carousel messages.” Updated May 21, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/interactive-media-carousel-messages/
[6] Meta for Developers, “Location request messages.” Updated May 21, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/location-request-messages/
[7] Meta for Developers, “Address messages.” Updated July 2, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/address-messages/
[8] 360Dialog Documentation, “Send and receive messages.” Accessed October 16, 2026. https://docs.360dialog.com/docs/guides/send-and-receive-messages
[9] 360Dialog Documentation, “Interactive messages.” Accessed October 16, 2026. https://docs.360dialog.com/docs/messaging/message-types/interactive
[10] Meta for Developers, “Interactive messages webhook reference.” Updated August 3, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/reference/messages/interactive/
[11] Meta for Developers, “Button messages webhook reference.” Updated June 17, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/reference/messages/button/
[12] Meta for Developers, “Pricing on the WhatsApp Business Platform.” Updated September 30, 2026. Accessed October 16, 2026. https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/




