Per-message pricing will apply to all businesses starting July 1, 2025, at 12am, by WhatsApp Business Account timezone.
Pricing Explainer
With per-message pricing, businesses on our platform will be charged:
-
Per delivered marketing template message
-
Per delivered authentication template message
-
Per delivered utility template message, if delivered outside of a customer service window
Note
- Businesses can respond to users at no charge with
free-form
messages and utility template messages - Businesses can respond to users at no charge with
free entry points
messages
Illustrative Pricing Example
- If a business sends 1 marketing message and 1 utility message, that incurs 1 charge for each category.

- When the customer service window is open, businesses can send free-form messages or utility messages at no charge.

The customer service window is a 24-hour timer that starts with a user message and resets with each new user message. As long as the customer service window is open, businesses can respond to users via free-form messages or utility messages, at no charge. Free-form messages are any message type that is not a template message.
- When a user messages a business from an ad that clicks to WhatsApp or a Facebook Page action button, and the business responds within 24 hours, that response opens a 72-hour (3-day)
free entry point
window where template messages are not charged.

- A comprehensive illustrative example

Per-message pricing webhooks
Effective July 1, 2025, the WhatsApp Message Updated Webhook will implement the following changes:
- Modifications to the existing conversation field
- Addition of new billing-related fields
Webhook parameter change specifications
Field Name | Data Type | Description |
---|---|---|
pricingModel | String | New property. Values can be:
|
pricingType | String | New property. Exclusively available in PMP (Per-Message Pricing) mode. Values can be:
|
whatsappMessage.conversation | Object | In PMP (Per-Message Pricing) mode, the conversation object will no longer be returned. |
CBP Mode Webhook Example
{
"id": "evt_djeIQXaQPQyUcRFi",
"type": "whatsapp.message.updated",
"apiVersion": "v2",
"createTime": "2022-03-01T12:00:00.000Z",
"whatsappMessage": {
"id": "63f5d602367ea403f8175a6c",
"wamid": "wamid.BgNODYxN...",
"wabaId": "whatsapp-business-account-id",
"from": "+447901614024",
"to": "+447901614024",
"status": "read",
"type": "template",
"template": {
"name": "login_otp",
"language": {
"code": "862031",
"policy": "deterministic"
}
},
"conversation": {
"id": "8078ed05301c40a08d3d1845c94ca18b",
"type": "REGULAR",
"originType": "authentication",
"expireTime": "2022-03-02T12:00:00.000Z"
},
"regionCode": "GB",
"pricingCategory": "authentication_international",
"pricingModel": "CBP",
"totalPrice": 0.085,
"currency": "USD",
"createTime": "2022-03-01T12:00:00.000Z",
"sendTime": "2022-03-01T12:00:01.000Z",
"deliverTime": "2022-03-01T12:00:02.000Z",
"readTime": "2022-03-01T12:00:02.000Z",
"externalId": "ext_123456"
}
}
PMP Mode Webhook Example
{
"id": "evt_djeIQXaQPQyUcRFi",
"type": "whatsapp.message.updated",
"apiVersion": "v2",
"createTime": "2022-03-01T12:00:00.000Z",
"whatsappMessage": {
"id": "63f5d602367ea403f8175a6c",
"wamid": "wamid.BgNODYxN...",
"wabaId": "whatsapp-business-account-id",
"from": "+447901614024",
"to": "+447901614024",
"status": "read",
"type": "template",
"template": {
"name": "login_otp",
"language": {
"code": "862031",
"policy": "deterministic"
}
},
"regionCode": "GB",
"pricingCategory": "authentication_international",
"pricingModel": "PMP",
"pricingType": "regular",
"totalPrice": 0.085,
"currency": "USD",
"createTime": "2022-03-01T12:00:00.000Z",
"sendTime": "2022-03-01T12:00:01.000Z",
"deliverTime": "2022-03-01T12:00:02.000Z",
"readTime": "2022-03-01T12:00:02.000Z",
"externalId": "ext_123456"
}
}
Edge case
If a utility conversation is opened between you and a user that spans the switch to per-message pricing (the conversation was opened before the switch but won't close until after the switch), utility templates sent to the user after the switch while the conversation is open will be free, but attributed to the open conversation. These messages will have a pricingModel
of CBP
and the utility conversation ID will be assigned to conversation.id in status messages webhooks. Once the conversation closes, subsequent utility messages sent to the user will follow the new behavior illustrated above.