What WhatsApp will and will not let you do

These are Meta's rules, not ours. Every one of them has broken somebody's launch, and knowing them now is cheaper than finding out on the day.

Templates have to be approved, and that takes time

Any message outside the 24-hour window must be an approved template. Approval is Meta's, not ours, and it takes anywhere from a few minutes to a couple of days. Templates are rejected for things that are not obvious: promotional wording in a UTILITY template, a variable at the very start or end of the body, a URL in a place Meta did not expect.

Plan for it. Get your templates approved before you ship, not during onboarding. GET /v1/templates tells you what is actually approved; build your install flow so a missing template is a visible warning rather than a send that fails later.

The 24-hour window

A business may send free-form messages for 24 hours after the customer's last message to it. After that, only a template.

The clock resets every time the customer writes. It does not reset when the business writes.

In practice: anything you initiate must be a template. Order confirmations, shipping updates, COD confirmation, abandoned-cart recovery and OTP all fall outside the window almost every time. POST /v1/messages/text is for answering somebody who just wrote in.

Marketing delivery is not guaranteed

This is the one that surprises people.

Meta deliberately throttles marketing-category template messages to protect users from being flooded. A quarter to a third of marketing sends are commonly dropped, answered with error 131049 ("This message was not delivered to maintain healthy ecosystem engagement"). The message was accepted, charged in some cases, and simply never shown.

There is no setting that turns this off. What actually helps:

  • Use the right category. An order confirmation is UTILITY, not MARKETING. Utility messages are not throttled this way. Sending a genuine transactional message under a marketing template is the most common self-inflicted version of this problem.
  • Message people who want it. The throttle is applied per recipient, based on how much marketing they are already receiving and whether they engage.
  • Do not treat sent as delivered. Subscribe to message.delivered and message.failed, and design your flow so a 131049 is expected rather than an incident.

Other limits worth knowing

  • Messaging limits. A new business number can start somebody new at a limited rate per day (often 250), rising as quality holds up. A bulk import on day one will hit it.
  • Quality rating. Blocks and "report" taps lower a number's quality. Low quality lowers the messaging limit, and can get the number flagged. An integration that messages people who did not ask is how a business loses its number.
  • Opt-out is a product rule, not a suggestion. Anyone who sends STOP is opted out here and cannot be messaged by anything, including this API. Do not build a flow that assumes a send will go through.
  • The workspace's own allowance. Each plan includes a number of messages per month. When it is gone, sends answer 403 message_quota_exceeded and nothing goes out until the plan is upgraded or the month rolls over.