Start free
All posts

WhatsApp service message pricing: one goes down, the other never will

On 1 October 2026 Meta starts charging for two things that are free today, and the market is adding them up as if they pulled in the same direction. One of them starts counting toward your volume tier and can make what you already pay cheaper; about the other, Meta wrote in plain words that there will be no tiers at all.

CCX EngineeringPlatform · Cost · Aug 26, 2026 · 9 min read
Painting of an old cash register with a receipt and coins on the counter
Two changes on the same date, heading opposite ways: one walks down the volume tier ladder, the other runs straight into a closed ceiling. Illustration.

What you'll take away

  • Why two changes landing on the same date pull in opposite directions — and why adding them up gets the math wrong
  • The webhook field that separates service from utility, and it is neither billable nor type
  • The Brazilian deadline that is not a price rise but a delivery cut-off: 30 June 2027

The two October changes pull in opposite directions

On 1 October 2026 Meta starts charging for service messages and for utility templates delivered inside the 24-hour window. Both are free today and both hit the invoice on the same day — and that is where the similarity ends. Utility starts counting toward the volume tier counter, which it does not do today, and can push your market into a cheaper tier. Service gets no tiers at all: it is rate card, every month.

Deriving the first half is short, and it is the half almost everyone skipped. The accumulation rule sits in the pricing documentation in one literal sentence: “Only messages that are charged count toward the tiers”. Only charged messages count. And that same page lists, today, what does not count — utility delivered inside an open window, and utility delivered inside the free entry point window. The reason that utility does not count today is that it is free; the day it stops being free, it satisfies the rule. This is not a forecast, it is two published rules composed.

The second half needs no derivation at all, because Meta wrote it in a box of its own: “Volume tiers: None. Meta does not offer volume tiers for service messages. Meta continues to offer volume tiers for utility and authentication messages.”

Adding the two up in the same direction is the mistake we keep seeing. One can give part of the increase back through the tier; the other gives nothing back, in any month.

A service message is the non-template reply, and it never gets on the ladder

A service message is any non-template message: the free-form reply an agent or a bot sends while the customer service window is open. It has been free since 1 November 2024 and becomes billable on 1 October 2026, at the same rate as utility and authentication in that market — only without volume tiers.

Rate parity plus no tiers contradict each other in your wallet: you will pay the same rate card price for a service message that you pay for a utility one, without ever walking down the ladder utility walks down. In a growing operation that gap opens every month and never closes.

It is worth rereading how the tier counter works, because four details decide the outcome. Tiers are per market–category pair, and the categories are utility and authentication: marketing has no volume tiers, so comparing Brazil–utility with Brazil–marketing compares a counter against something that does not count — the right counterpart is Brazil–authentication. Aggregation happens at the business portfolio level, not per WABA, so an operation split across several WABAs under one portfolio adds its volume up. And the counter resets every month: a tier is not a permanent achievement, it is a race that restarts on the 1st.

The fourth detail is the most decisive of the four and the one we saw cited least: rates are tier-specific and do not apply retroactively. Crossing a threshold does not reprice what was already billed before it in the same month. Meta writes “Rates are tier-specific” and closes the bill as each tier's rate times the messages that landed in it — the same mechanics as income tax brackets.

Put the four together with the accumulation rule and October's effect is clear. Today, all the utility volume you deliver inside the window is invisible to your market's counter. On 1 October it stops being invisible all at once, not gradually: the market–category pair crosses the threshold earlier in the month, and the utility you deliver from there on comes out at the cheaper rate. What was billed before the crossing stays as it was. The gain applies to the volume left in the month, not to the whole month — the earlier the turn happens, the more messages catch the lower price. The size depends on your market's thresholds, your mix and the day the turn lands, and there is no single number that holds for everyone. The direction, that we can state: it is downward.

Since 1 August, the billing category depends on who wrote the message

Meta created a new message category, Meta Business Agent, alongside service. Every non-template message that does not come from Meta's agent is a service message; the one that does is billed per token, at US$ 2.00 per million, since 1 August 2026. Same text, same window, same customer, different billing units.

The sentence in the documentation is short and does all the work: “Any non-template message that is not powered by Meta Business Agent is a service message.” The category stopped being a property of the content and became a property of the author. Until now Meta priced by what the message was — template or not, utility or marketing. Now it also prices by the engine that produced the text.

The token math gives you an order of magnitude that is easy to carry around. Meta estimates a message consumes between 20,000 and 25,000 tokens, which at US$ 2.00 per million works out to 4 to 5 US cents per message — a single global rate, no per-market rate card and no volume tiers, the same number in Brazil and in Germany.

There is a containment rule that works in the operator's favour, and we have not seen anyone write about it: billing is single. A non-template message is billed as Meta Business Agent or as service, never as both. And the detail that closes the scariest door: promotional content inside a non-template message does not trigger an additional marketing charge.

The operational consequence is to record, for every non-template reply, which engine produced it — Meta's agent, your own AI, a third-party AI, a human. From August on that is a cost attribute, not a product one, and whoever does not store that field will not reconcile the invoice later.

The 24-hour window is not going away; what changes is the price of what goes through it

Nothing Meta published talks about ending the customer service window. It still opens with the customer's message, still lasts 24 hours and still separates free-form replies from templates. The free entry point window still lasts 72 hours. What changes is the price of what travels inside both.

The free entry point window deserves a second look now, because it is no longer the shelter it used to be. It lasts 72 hours, opens through two doors only — a Click-to-WhatsApp ad or a Page's CTA button — and only on Android and iOS. Delivery inside it is unchanged. But since 1 August 2026 a Meta Business Agent message is billed per token even in there: the 72-hour window stopped being the place where everything is free and became the place where delivery is free.

Meta itself published the example that shows the pile-up, and it is the most uncomfortable figure in the document: the same one-hour interaction, with the same customer, goes from one charge on 1 July 2026 to three on 1 August — one marketing plus two Meta Business Agent — and to five on 1 October, adding one service and one utility.

Note what the example does not say: five charges are not five times the money, because the four new lines have different units and different rates from one another. What changes shape is the count — and it is the count that breaks any dashboard built on the assumption of one charge per conversation.

What answering a customer in Brazil will cost after October

Meta published a table for 10,000 AI reply messages in Brazil, and it is the only per-market cost table in that document. With a third-party AI on a simple interaction, about US$ 268; with Meta Business Agent, US$ 400 to 500; with a third-party AI on a complex interaction, about US$ 968. It is a comparison between Meta's product and third-party ones, made by Meta, with the numbers in the open — and it is worth reading what it actually says.

The first thing that falls out of it: the Meta Business Agent column is the token math and nothing else. Ten thousand messages at 4 or 5 cents is exactly US$ 400 to 500, and there is no delivery line added on top — the token is the entire charge.

The second: the delivery line is the same in both service scenarios. Ten thousand messages at 0.68 US cents is US$ 68, in both. Those 0.68 cents are the current utility and authentication rate in Brazil, which is what Meta uses there as the delivery line. They are not the future service rate, which has no published number yet, and they should not be copied into a spreadsheet under that label.

The third is the one that changes the meeting: the difference between US$ 268 and US$ 968 is not Meta's. It is US$ 700, and it is entirely the cost of your own AI — US$ 200 in the simple scenario, US$ 900 in the complex one. Meta charges US$ 68 in both. On the most expensive row of the table, 93% of the value is the price of your model and 7% is the price of WhatsApp.

There is no winner between the two options: for a simple interaction the third-party AI is cheaper, for a complex one Meta's agent is cheaper, and the tipping point sits between the first two rows. The question you take into the meeting stops being “how much more will Meta charge me” and becomes “how many tokens does my AI burn to resolve one interaction, and how much of that was conversation that needed no model at all”.

The webhook field that separates service from utility

The pricing object in the status webhook has four fields, and what tells today's two free cases apart is category: service for the non-template reply, utility for the template inside the window. In both, billable is false and type is free_customer_service. After October, billed service comes out with billable true and type regular; in the analytics endpoint the same message shows up as pricing_type REGULAR and pricing_category SERVICE.

Anyone who built cost telemetry reading only billable and type has a problem with a date on it: those two fields are identical across the two free cases. A filter on them merges utility and service into one number — and those are exactly the two things October pulls apart, in opposite directions. Without category stored, your August and September data cannot be reprocessed later.

Meta Business Agent is missing from that snippet, and it is missing on purpose: its analytics and webhook format is still marked forthcoming in the documentation. Do not build a parser on top of a field you have never seen.

And there is an instrumentation detail that saves a week of wrong work. There is an account_update webhook with the VOLUME_BASED_PRICING_TIER_UPDATE event, live since 1 October 2025 — but Meta itself warns that “currently, tiering information is not included in any webhooks”. Volume tiers do not arrive by webhook: you query the pricing_analytics endpoint, which returns your progress within the current month. Since the counter resets on the 1st, intra-month progress is the only reading that lets you act in time.

The question worth taking to your current provider before 1 September: can it hand back August's messages split by category — service on one side, utility on the other — and by market–category pair? If the answer is a single total of “free messages”, you start October without a baseline. None of this is a vendor advantage, by the way: it is Meta's rule and it applies identically to any BSP. What differs between providers is the margin on top of the fee and how much of your consumption they can actually show you.

What fits in the time left, and the Brazilian deadline almost nobody marked

Meta committed to publishing the 1 October rates, service included, by 1 September 2026. That is up to a month between the number appearing and the number applying. Whoever reaches September with a baseline ready does the math that month; whoever reaches it without one spends September instrumenting and October guessing.

What fits in the time left is short and it is all instrumentation: store category on every delivery status, record the engine behind every non-template reply, measure the August and September baseline per market–category pair, and read tier progress from pricing_analytics during the month rather than from the statement after it. One recommendation of ours, which is not Meta's rule: count by the webhook timestamp, not by your server's — queues, retries and time zones shift a message across days, and with a counter that resets on the 1st, a message shifted across a day is a message counted in the wrong month.

The rest of the calendar is predictable: prices only change on 1 January, April, July or October, with at least one month's notice for a rate card change, three months for an addition to the model and six months for a change to the model itself. There is already an update announced for 1 October, with nine markets leaving the “Rest of” regions. Brazil is not on the list, but the list is worded as “at least these markets” — it is not closed.

The Brazilian date is a different one, and it is hard. Local billing has been in force since 1 July 2026: eligible customers create WABAs in BRL, the BRL rates are already published and the charge comes from Facebook Brazil. The deadline to migrate every WABA in the portfolio is 30 June 2027, and from 1 July 2027 Meta stops delivering messages from non-BRL WABAs belonging to eligible customers. That is not a price-rise notice; it is a delivery cut-off.

You do not need to recreate a WABA for that: the WABA Currency Migration APIs have been live since 1 June 2026 and the currency can be migrated by API. It is a little over 300 days to the deadline, which sounds like plenty and is not — a currency migration touches contracts, invoicing and reconciliation, and none of the three moves at API speed.

One reading warning to close. The platform's commercial page was still live on 26 August 2026 saying Meta does not charge for service messages or for utility messages sent in reply to a user. Same company, two pages, two states of the same fact. When they disagree, the developer documentation is the one that matches your invoice.

The rules that stick

01Two changes, opposite directionsOn 1 Oct 2026 service and in-window utility become billable. Utility joins the volume tier and brings the cheaper band forward; service gets no tiers at all.
02Nothing is repriced backwardsRates are tier-specific. Crossing the threshold cheapens what comes after it within the month, never what was billed before.
03Who wrote it decides the unitSince 1 Aug 2026 a Meta Business Agent non-template message is billed per token, at US$ 2.00 per 1M. Every non-template that is not from it is service.
04One charge per messageMeta Business Agent or service, never both. Promotional content inside a non-template message triggers no extra marketing charge.
05Store category, not just billableToday's two free cases are identical on billable and type. Category is what separates what October separates.
06Tiers do not arrive by webhookTier progress is queried from pricing_analytics, during the month. The counter resets on the 1st.
0730 June 2027, WABA in BRLMigration deadline for eligible customers. On 1 Jul 2027 Meta stops delivering from non-BRL WABAs. Migrate by API, no need to recreate the WABA.
See CCX pricing by country and category

Want to see this running on your own number?

Sign up through the site and get a US$5 test credit.