Almost every WhatsApp integration hits the same wall in its first week, and most teams diagnose it wrong.
The symptom: messages sent during development go through perfectly. Messages sent from production, days later, are rejected. Nothing in the code changed.
What is actually happening#
WhatsApp treats a conversation the customer started differently from one the business started.
- When a customer messages you, a customer service window opens. For 24 hours from their most recent message you may reply freely: any wording, no approval needed.
- Outside that window, free-form messages are not delayed or queued. They are refused. The only thing that goes through is a template — a message format approved in advance by Meta, such as "Your order {{1}} has shipped".
In development you were inside the window, because you had just messaged the test number from your own phone. In production you were not.
Interactive figure
The 24-hour window
Window open. This will send. A free-form reply is allowed while the window is open — no template, no approval. Rates and what counts as billable have changed more than once — Meta moved to per-message billing on 1 July 2025. Check the pricing page rather than a blog post. WhatsApp pricing.
The rule is simple. What breaks integrations is that it is a state that changes over time, and most sending code treats it as a fixed setting.
One conversation, from the platform's point of view
- 01Closed
No customer message on file, or the last one is more than 24 hours old. Only a template may be sent.
- 02The customer writes
The window opens. Free-form replies are allowed from this moment.
- 03Open
Twenty-four hours from that message. Reply in your own words, no template review needed.
- 04The customer writes again
The window restarts from the newest message, not the first.
- 05It expires
Back to closed. A free-form reply at hour twenty-five is rejected, not delayed.
Why the rule exists#
The window exists because the alternative — any business with your number messaging you whenever it likes — is what filled SMS inboxes with spam. Template approval is the price of a channel where people still read their messages. Treat it as a feature of the medium and the design decisions get easier.
Most channels have some version of this asymmetry. WhatsApp's is the most visible because its API says no. Email's version is enforced by a spam filter that says nothing at all.
Inside and outside the window#
| Inside the window | Outside it | |
|---|---|---|
| What you may send | Free-form, in your own words, or a template | An approved template only |
| Review | None for free-form replies | Template approval in advance, per language |
| Cost | Since 1 October 2026, free-form replies are charged after 1,000 free per business number each month, and utility templates are charged too | Charged per delivered template, by category and country |
| Who may start | The customer already did | You, with a template that fits an approved category |
| Typical failure | Rare | A rejected send exactly when you needed it |
Since 1 July 2025 Meta charges per delivered message rather than per conversation, with rates set by category (marketing, utility, authentication) and the recipient's country. Free-form replies inside the window, which Meta calls service messages, had been free since November 2024. Since 1 October 2026 they are charged again: each business phone number gets 1,000 free service messages a month, unused ones do not roll over, and the rest are charged at a rate that, market by market, matches the utility and authentication rate. Utility templates sent inside an open window, free from 1 July 2025, are charged from the same date. Check Meta's current pricing page for rates, which change. One related rule: when a customer arrives from a click-to-WhatsApp ad or a Facebook Page button, a longer free entry point window of 72 hours applies, and messages sent in it carry no delivery charge.
Two windows, two lengths
The details teams get wrong#
The clock restarts on every customer message. It is measured from the customer's latest inbound message, not from the start of the conversation.
It is one window per customer and business number. A customer who writes to sales and is transferred to support has one window, and both teams are spending it.
Queue time spends the window. If your target is "reply within four hours", you have plenty of headroom — until a public holiday, when a queue of open conversations silently becomes a queue of template sends.
Checking at queue time is too early. A message queued at hour twenty-three and sent at hour twenty-five is rejected. Check at the last possible moment.
A template is not a reply. You can answer a support question with a template, but it changes the cost and the tone.
What to build#
- Model the conversation. Store, per customer and business number, the timestamp of the last inbound message. The window state is derived from it, never stored as a flag.
- Let the send path decide. Before sending, read the state and pick free-form or template. Log which one you used, because the billing question will come later.
- Have templates approved before you need them. Approval is not instant. A support team that discovers at 2 a.m. that it needs an unfiled template does not reply until morning.
- Show the clock to agents. An inbox that shows time left on each conversation lets people pick up the right one next.
- Batch the expiring. Conversations about to close that need a follow-up are a scheduled job, not a surprise.
A short, honest pattern helps too: if a follow-up is likely, end with a question. The customer's reply restarts the window — the medium working as designed, not a trick.
What the send path decides, at the last possible moment
- 01Did this customer write to this business number in the last 24 hours?YesReply free-form, in your own wordsNo
- 02Is an approved template for this message on file?YesSend the template, and log that you didNoNothing goes out — which is why templates are approved before they are needed
The cost model this implies#
Replies inside the window are no longer simply free. Since 1 October 2026 each business number gets 1,000 free service messages a month, and every reply after that is charged at the market's service rate. Being responsive still pays, for a different reason: a reply inside the window can be written in your own words and costs at most the service rate, while the same message after the window closes needs an approved template, which costs the same or more and must already exist. A team that answers in ten minutes keeps its conversations inside the window; a team that answers in ten hours pushes more of them into templates, before counting customer satisfaction.
Treat replies as a budget line. Estimate the service messages each number sends in a month, subtract the 1,000 free ones, and price the rest from Meta's rate card. Log the type of every message you send, because the invoice will distinguish them.
Where to go next#
- WhatsApp template strategy — the next step in this track.
- WhatsApp 101 — the whole channel, including what Meta charges as of October 2026.
- Choosing a channel per message — when WhatsApp is the right channel at all.
- The support queue as a system — staffing a queue that spends the window.
Sources
Every claim worth checking, with somewhere to check it.
- WhatsApp Cloud API documentationMeta for Developers
- Pricing on the WhatsApp Business PlatformMeta for Developers · accessed 2026-10
- Upcoming pricing updates for Meta Business Agent, service and utility messagesMeta for Developers · 2026-09-30
- Updates to WhatsApp Business Platform pricingMeta for Developers