Skip to main content
Two message types — buttons and list menus — are marked best-effort. This page explains what that means, because it is the single most likely thing to surprise you.
A 200 on these endpoints means the message was accepted for delivery. It does not mean the recipient’s WhatsApp rendered buttons.

What actually happens

WhatsApp has progressively withdrawn interactive message templates from clients that are not the official Business Platform. Whether one renders depends on the recipient’s app build and their account — things neither you nor we can inspect before sending, and cannot inspect afterwards either. So on any given send, the recipient may see:
  • the buttons or menu, working as you designed; or
  • a plain-text fallback — your title and description as ordinary text, with no tappable anything; or
  • nothing useful at all.
The messaging layer reports the send as successful in every one of those cases, because it genuinely sent something.

How the API tells you

Every successful response from these two endpoints carries two extra fields:
best_effort: true is on the payload every single time, deliberately. A developer reading "status": "sent" and nothing else would reasonably conclude their buttons work — and would find out otherwise from their own customers.

You cannot receive the tap

Even where buttons do render, the response goes into the WhatsApp conversation on the phone. There is no webhook and no endpoint that delivers it to your system. So a row_id or a reply button id is only meaningful to a human reading the chat. It cannot drive your workflow.
Do not design a flow that depends on receiving a button press. That path does not exist in this API — see What is not available yet.

What to do instead

1

Write the message so it works as plain text

If the interactive part vanishes, the message must still make sense on its own. Put the instruction in description, not only in the button labels.Bad: title Confirm your order, buttons Yes / No, nothing else. If the buttons vanish, the customer has no idea what to do.Good: title Confirm your order, description Order #2043 — ₹1,299. Reply YES to confirm or NO to cancel. The buttons become a shortcut, not a requirement.
2

Use a typed reply as the real mechanism

“Reply 1 for morning, 2 for afternoon” works on every WhatsApp client on earth, and — unlike a button press — a person can read it on the phone regardless of how the message rendered.
3

Use a link for anything important

A url button is convenient, but put the same link in the text as well. A link in text is tappable on every client.
4

Never use them for anything critical

Payment confirmations, consent, cancellations, medical or legal choices — none of these should depend on a button appearing.

What IS reliable

Send one to your own number first and look at it on the handset your customers actually use. That is the only real test — and it tells you about your recipients, not about WhatsApp in general.