Interactive messages
Interactive messages show tappable choices. They can be sent inside the 24-hour window. Set type to interactive and pass an interactive object in Meta’s format.
Reply buttons
Section titled “Reply buttons”Up to 3 buttons; titles up to 20 characters; ids unique, up to 256 characters.
curl https://login.meapi.in/api/v1/messages \ -H "Authorization: Bearer $MEAPI_KEY" -H "Content-Type: application/json" \ -d '{ "to": "+919812345678", "type": "interactive", "interactive": { "type": "button", "body": { "text": "Your order #10245 is ready. When should we deliver?" }, "footer": { "text": "Radha Fashions" }, "action": { "buttons": [ { "type": "reply", "reply": { "id": "deliver_today", "title": "Today" } }, { "type": "reply", "reply": { "id": "deliver_tomorrow", "title": "Tomorrow" } }, { "type": "reply", "reply": { "id": "call_me", "title": "Call me" } } ] } } }'const interactive = { type: 'button', body: { text: 'Your order #10245 is ready. When should we deliver?' }, action: { buttons: [ { type: 'reply', reply: { id: 'deliver_today', title: 'Today' } }, { type: 'reply', reply: { id: 'deliver_tomorrow', title: 'Tomorrow' } }, ] },};await fetch('https://login.meapi.in/api/v1/messages', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MEAPI_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ to: '+919812345678', type: 'interactive', interactive }),});<?php$payload = ['to' => '+919812345678', 'type' => 'interactive', 'interactive' => [ 'type' => 'button', 'body' => ['text' => 'When should we deliver order #10245?'], 'action' => ['buttons' => [ ['type' => 'reply', 'reply' => ['id' => 'deliver_today', 'title' => 'Today']], ['type' => 'reply', 'reply' => ['id' => 'deliver_tomorrow', 'title' => 'Tomorrow']], ]],]];$ch = curl_init('https://login.meapi.in/api/v1/messages');curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('MEAPI_KEY'), 'Content-Type: application/json'], CURLOPT_POSTFIELDS => json_encode($payload)]);echo curl_exec($ch);interactive = { "type": "button", "body": {"text": "When should we deliver order #10245?"}, "action": {"buttons": [ {"type": "reply", "reply": {"id": "deliver_today", "title": "Today"}}, {"type": "reply", "reply": {"id": "deliver_tomorrow", "title": "Tomorrow"}}, ]},}requests.post("https://login.meapi.in/api/v1/messages", headers={"Authorization": f"Bearer {MEAPI_KEY}"}, json={"to": "+919812345678", "type": "interactive", "interactive": interactive}, timeout=30)An optional header can be text ({ "type": "text", "text": "…" }, up to 60 characters) or media ({ "type": "image", "image": { "link": "https://…" } }).
List menu
Section titled “List menu”Up to 10 rows in total across up to 10 sections. action.button is the label of the button that opens the list (max 20 characters). Row titles max 24 characters, descriptions max 72. With more than one section, each needs a title.
{ "to": "+919812345678", "type": "interactive", "interactive": { "type": "list", "body": { "text": "What are you shopping for today?" }, "action": { "button": "Categories", "sections": [ { "title": "Clothing", "rows": [ { "id": "men", "title": "Men", "description": "Shirts, kurtas, jeans" }, { "id": "women", "title": "Women", "description": "Sarees, kurtis, dresses" } ] }, { "title": "Other", "rows": [ { "id": "kids", "title": "Kids" } ] } ] } }}A body that breaks these limits returns 400 BAD_INTERACTIVE with the exact problem.
Getting the answer
Section titled “Getting the answer”When the customer taps a button or a row, you receive a message.received webhook. Its message.type is interactive and message.reply holds the choice — { "id": "deliver_today", "title": "Today" } — so you can branch on the id you set. Quick-reply buttons on templates arrive as type button with the button’s payload as reply.id. The reply also appears in the panel’s inbox.
Was this page helpful?
Thank you — we read every comment.
Could not send right now. Please try again later.
© 2026 MeAPI by TheWebStore028 · RADHAMADHAV WEBSTORE LLP · GSTIN 27ABJFR6148J1ZO · Contact us ·Cookie settings