# WhatsApp pricing

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

> **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](https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/non-template-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`](/docs/api/callbacks/message-status) callback and in
[`GET .../messages/{id}`](/docs/api/get-message):

```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](/docs/api/get-meta-usage) shows a month
per number and category; [Estimate Meta cost](/docs/api/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](/docs/api/list-plans) shows them;
plans marked `placeholder` are examples until PaalTech publishes its prices.
[Get billing](/docs/api/get-billing) shows a business's plan, usage and invoices next to - and
apart from - its estimated Meta charges; [Pay invoice](/docs/api/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.
