← Blog

·

WhatsApp 24-hour window: what you can send inside and outside it

Updated on October 29, 2026

The WhatsApp 24-hour window, which Meta calls the customer service window, opens when a user messages or calls the business and resets with every new message from them. While it’s open, you can send free-form messages (text, media, buttons, lists) as well as templates; once it closes, only approved templates. The free entry point window is a different thing: it applies to people who arrive through a Click to WhatsApp ad, lasts up to 7 days and changes only billing, not which messages are allowed.

This article explains both windows, shows how to track the 24-hour window in your code and sums up what is charged in each case under the rules in force since October 1, 2026.

Two windows with different jobs

Many integrations mix the two up. The table separates what each one controls:

Customer service window (24 hours)Free entry point (FEP) window
How it opensThe user messages or calls the businessThe user arrives through a Click to WhatsApp ad (Android or iOS app) and the business replies within the customer service window
Duration24 hours, reset with each user message or callUp to 7 days from the business’s reply
What it controlsWhich messages can be sentWhat Meta charges
EffectAllows free-form (non-template) messagesMarketing, utility, authentication and service messages aren’t charged
Outside itTemplates onlyNormal per-category billing

The 24-hour customer service window

The clock starts with the user’s message (or call). If they write again before it runs out, the timer goes back to 24 hours. Business messages don’t reset anything: only the user opens and renews the window.

Two notes from Meta’s documentation:

  • The window doesn’t replace consent. You still need opt-in to message the user.
  • In rare cases, Meta acknowledges that an incoming message may not allow a reply within the window. Handle the error instead of assuming the window always exists.

What you can send while the window is open

With the window open, you can send any service message without prior approval:

  • text, with or without a link preview;
  • image, video, audio, document and sticker;
  • location, contacts and reactions;
  • interactive messages: reply buttons, lists, CTA URL button, location request, address request and Flows;
  • catalog messages, such as single-product and multi-product messages.

Templates can also be used as replies. The reverse doesn’t hold: a free-form message can never start a conversation. The payloads for each interactive type are in the guide to interactive messages.

What happens when the window closes

Outside the window, the API only accepts type: "template" messages with an approved template. If you send free-form text, the send fails with code 131047, which Meta describes as “more than 24 hours have passed since the recipient last replied to the sender number”. The failure arrives in the status webhook (simplified excerpt):

{
  "statuses": [{
    "id": "wamid.HBgLNTU4NDk5OTk5OTk5OQ...",
    "status": "failed",
    "recipient_id": "5584999999999",
    "errors": [{ "code": 131047 }]
  }]
}

The fix is to resend as a template. That’s why every flow that might fall outside the window needs an equivalent approved template. The guide to WhatsApp API message templates shows how to create one and why the category matters.

Want to try it while you read? Create a Vectalk account and send your first message through the official API. Create free account →

How to track the window in your system

The most direct approach is to record the time of the last message received from each contact from the webhook and compute the window locally.

The incoming message webhook includes timestamp (Unix, in seconds) and from (the user’s wa_id). With Vectalk, this payload arrives exactly as Meta sends it, at the URLs you registered:

// When processing the incoming messages webhook
async function recordIncomingMessage(msg) {
  await db.contacts.upsert({
    wa_id: msg.from,
    last_message_at: new Date(Number(msg.timestamp) * 1000),
  });
}

// Before sending
const WINDOW_MS = 24 * 60 * 60 * 1000;
const MARGIN_MS = 5 * 60 * 1000; // slack for queues and clocks

function windowOpen(contact, now = Date.now()) {
  if (!contact?.last_message_at) return false;
  return now - contact.last_message_at.getTime() < WINDOW_MS - MARGIN_MS;
}

async function reply(contact, text) {
  const body = windowOpen(contact)
    ? { type: "text", text: { body: text } }
    : { type: "template", template: { name: "resume_conversation", language: { code: "en_US" } } };

  return fetch("https://apis.vectalk.com.br/api/messages", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.VECTALK_TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ messaging_product: "whatsapp", to: contact.wa_id, ...body }),
  });
}

Three things to watch:

  1. Use the webhook’s timestamp, not the time your server processed the event. Delayed queues shorten the real window.
  2. Leave a margin. A reply an agent writes at 11:58 p.m. into the window may go out after the deadline.
  3. Calls open the window too. If you use the Calling API, record incoming calls the same way.

If your support team works from a queue, show the time left in the window on the agent’s screen. When it’s running low, the agent can send a question with buttons to encourage the customer to reply and renew the window.

The free entry point (FEP) window

The FEP exists for conversations that start from Click to WhatsApp ads. The flow Meta describes is:

  1. The user taps the ad and sends the message from the Android or iOS app (desktop and web don’t count).
  2. That opens the normal customer service window.
  3. If the business replies within that window with a marketing, utility, authentication or service message, that reply isn’t charged and opens the FEP from that moment.
  4. The FEP can stay open for up to 7 days. During that time, Meta doesn’t charge for marketing, utility, authentication or service messages.

The part that causes confusion: the FEP does not extend the 24-hour window. Free-form messages are still only allowed while the customer service window is open. If the user stops replying, after 24 hours you need a template again, and that template goes out free of charge while the FEP is open.

Other details:

  • The FEP is tracked per business and user pair, not per account. If several Messaging accounts send from the same business phone number, they all share the same window, even if a different account paid for the ad.
  • Meta Business Agent messages (Meta’s own AI agent) are still charged inside the FEP.
  • In the status webhook, the pricing object carries type: "free_entry_point" for messages that weren’t charged because they were sent inside this window.
{
  "pricing": {
    "billable": false,
    "pricing_model": "PMP",
    "type": "free_entry_point",
    "category": "marketing"
  }
}

To connect ad clicks to sales, see how to track Click to WhatsApp ads.

What is charged in each situation

On October 1, 2026, Meta started charging again for two kinds of messages that had been free: service (free-form) messages and utility templates sent inside the customer service window. For service, each phone number gets 1,000 free delivered service messages per month, with no rollover; billing starts at message 1,001. The details of the change are in utility messages inside the service window.

SituationWhat you can sendMeta charges
24-hour window open, no FEPFree-form message or templateService: 1,000 free per number/month, then charged. Templates: charged by category, including utility
24-hour window open, with FEPFree-form message or templateNo charge (except Meta Business Agent)
Window closed, FEP openTemplates onlyNo charge
Window closed, no FEPTemplates onlyCharged by category

Per-category rates for recipients in Brazil are in WhatsApp API pricing in Brazil; for other markets, see WhatsApp API pricing by country, since Meta’s rate depends on the recipient’s country code. The status webhook shows what was charged in pricing.billable and pricing.type (regular for charged messages, free_customer_service for service messages within the monthly free tier, free_entry_point for messages inside an open FEP window). Meta has announced that billable will be deprecated in a future versioned release, so rely on pricing.type and pricing.category. Since October 12, 2026, the pricing object can also carry a subtype field with the value paid_exempt for free service messages from eligible government and non-profit organizations.

Meta also warns that, without a payment method on file, it delivers the service messages in the free tier and stops delivering the ones after it. With Vectalk, billing works with a monthly fee plus a prepaid balance: Vectalk puts its own line of credit on your number and each delivered message is deducted from your balance, so you don’t need to register a card with Meta for replies to keep going out after the thousandth.

How to keep the conversation inside the window

A few practices reduce how many templates you need to send:

  • Get the customer to start. wa.me links with pre-filled text and QR codes on your website, receipt or packaging lead the user to open the conversation. You can build these links with the WhatsApp link generator. With Vectalk, QR codes with a pre-filled message are created via POST /api/qr-codes, which returns the short link and the image.
  • Ask for a reply, not a click away. Quick reply buttons send a user message when tapped, which opens or renews the window. A link button only opens the browser.
  • Reply fast. A bot that answers in seconds has the whole window to solve the case. The article on an AI chatbot with the WhatsApp API covers this, and welcome and away messages helps outside business hours.
  • Bundle information. Instead of three separate messages after the window closes, send one template with the key information and a button for the customer to continue.

Common integration mistakes

Some problems show up in almost every project that deals with the window:

  • Computing the window from the business’s last send. Only the user’s message counts. A contact who received ten messages from you today but replied to none has a closed window.
  • Storing the time per conversation instead of per contact and number. If you run several numbers, the window applies to the pair formed by the business number and the user. Record both.
  • Ignoring the failure webhook. The API answers with success when the request is accepted; the failed status with 131047 comes later, through the webhook. If you don’t handle that event, the message disappears without the agent knowing.
  • Not having a re-engagement template. Keep at least one approved utility template to resume open cases, with text tied to the customer’s case (ticket, order) so it isn’t classified as marketing.

Frequently asked questions

Does a message sent by the business reset the 24-hour window?

No. Only messages or calls from the user open and reset the customer service window.

If the customer taps a quick reply button on a template, does the window open?

Yes. The tap sends a user message to the business, and a user message opens the customer service window. Meta’s documentation on per-user marketing limits confirms that a user’s reply to a marketing message starts a 24-hour customer service window.

Does the free entry point window apply to people who tap the WhatsApp button on my Facebook Page?

Meta’s pricing documentation, updated for the October 2026 rules, describes the FEP only for Click to WhatsApp ads opened in the Android or iOS app.

Can I send free-form text during the 7 days of the FEP?

Only while the 24-hour window is also open. The FEP changes billing; the customer service window is what allows free-form messages.

Do the rules change with coexistence with the WhatsApp Business app?

The article on coexistence has a section on pricing and the customer service window when the same number is used in the app and the API.

Make the window work for you with Vectalk

With Vectalk, webhooks arrive in the format of Meta’s documentation, so the timestamp and the pricing object you use to track window and cost are the same. You use one token for all your accounts, get coexistence with the WhatsApp Business app and pay through a monthly fee plus prepaid balance, with no card registered with Meta. Create your account at apps.vectalk.com.br/register, see the endpoints at docs.vectalk.com.br or get answers in the Help Center.


Sources checked on October 29, 2026: Send messages and the customer service window, Pricing on the WhatsApp Business Platform, Pricing updates for service, utility and Meta Business Agent messages, Error codes, Status webhook reference, Per-user marketing template message limits.

Put your business on the official WhatsApp

Create your account, connect your number to the official API (you can keep the app with coexistence) and start serving customers and sending messages.