Skip to content
PaalChat Docs

Build and operate

WhatsApp pricing

Who pays Meta, what Meta charges for, and the pricing reported on each message.

.md

In a nutshell

Meta bills each business's WhatsApp Business Account directly, per delivered message; PaalChat never charges for Meta messages. From 1 October 2026 replies inside the 24-hour window are billable too. Each outgoing message's pricing arrives in message.status as billable, category, type and model.

Who pays whom

Charge Paid by Paid to
WhatsApp messages (Meta's rate card) The business, through its WhatsApp Business Account Meta
PaalChat Arranged with PaalTech separately PaalTech

PaalChat is a Meta Tech Provider. It never collects, pre-pays or marks up Meta's charges. The business adds a payment method to its WhatsApp Business Account in WhatsApp Manager, and Meta invoices it there.

What Meta charges for

Meta charges per delivered message, at a rate set by the recipient's country and the message's category. Rates change, so PaalChat does not repeat them here - see Meta's pricing pages and the rate card in WhatsApp Manager.

Message Charged
Marketing template Always
Utility template Always, from 1 October 2026 (before that, free inside the 24-hour window)
Authentication template Always
Free-form reply inside the 24-hour window (category service) From 1 October 2026, at the same rate as utility in that market
Messages inside the 72-hour window opened by a Click-to-WhatsApp ad Free

Important

From 1 October 2026 Meta charges for service messages: the free-form replies a business sends while the 24-hour window is open. That includes automatic replies from bots. Keep automated replies purposeful.

Source: Meta, Upcoming pricing updates for service and utility messages. Meta's own pages are authoritative when they differ from this guide.

Pricing on each message

When Meta reports a message as sent, delivered or read, it says how it prices it. PaalChat records that on the message and passes it on as pricing in the message.status callback and in GET .../messages/{id}:

JSON
"pricing": {
  "billable": true,
  "category": "service",
  "type": "regular",
  "model": "PMP"
}
Field Meaning
billable Whether Meta charges for this message
category Meta's pricing category: marketing, marketing_lite, utility, authentication, authentication-international, service, referral_conversion
type regular (charged), free_customer_service or free_entry_point
model Meta's pricing model; PMP is per-message pricing

pricing is null until Meta reports it, for messages that failed before being sent, and for incoming messages. Treat unknown category or type values as informational - Meta adds new ones over time.

Keeping costs predictable

  • Count billable messages per business from message.status if you show usage to your customers; label it as Meta's charge, billed by Meta.
  • Send templates only to people who expect them, and batch announcements.
  • For bots, reply once with what the customer needs rather than several short messages.

Usage and estimates in PaalChat

PaalChat records Meta's pricing for every delivered message and estimates what it costs from Meta's published rate card. Get Meta usage shows a month per number and category; Estimate Meta cost prices an audience before a bulk send. Each month is compared with Meta's own analytics, and where they differ Meta's figures win. These are estimates - Meta bills the business's WhatsApp Business Account directly, and Meta amounts never appear on a PaalChat invoice.

PaalChat's own plans

PaalChat's subscription is separate from Meta's charges and covers PaalChat only: the API, callbacks, inbox, templates, automations, campaigns and analytics, within the plan's limits (WhatsApp numbers, inbox members, contacts). List plans shows them; plans marked placeholder are examples until PaalTech publishes its prices. Get billing shows a business's plan, usage and invoices next to - and apart from - its estimated Meta charges; Pay invoice gives a Paystack checkout link. When a plan's limit is reached, new inbox members and new contacts from the API are refused with 402 plan_limit_reached; contacts who write in are always kept, and a number already sending keeps sending.