We are updating pricing on the WhatsApp Business Platform to be simpler and more consistent with industry practices, encourage higher-quality messaging experiences for people, and better align with value delivered for people and businesses.
With per-message pricing, businesses on our platform will be charged:
For example, if you send a marketing template and then two utility templates to a WhatsApp user, that will incur 3 charges (1 marketing, 2 utility). If the 2 utility templates are sent while a customer service window is open between you and the user, however, it would only incur a single charge (1 marketing).
We are rolling out per-message pricing in two phases. Per-message pricing will apply to businesses in the Phase 1 group on April 1, 2025, and to all other businesses (Phase 2 group) on July 1, 2025. The email sent to you on October 10, 2024, indicates your group.
Utility templates sent inside of a customer service window will also be free starting April 1, 2025, to anyone in the Phase 2 group.
If you are in the Phase 1 group but manage WhatsApp Business Accounts (WABAs) that use either On-Premises API or are in the Groups API alpha, those WABAs will be part of the Phase 2 group.
A new pricing_analytics
analytics field will be released April 1, 2025, that allows you to get per-message pricing breakdowns for any messages you have sent.
Starting April, 2025, status messages webhooks containing pricing information will have the following changes to reflect the new pricing model:
If per-message pricing applies to you, the conversation
object will have the following changes:
id
will be set to a unique ID per-message, instead of per-conversation, unless the webhook is for a free-entry point conversationconversation
object will only be included for messages that are part of a free-entry point conversationYou can adjust webhook version subscriptions using the App Dashboard > WhatsApp > Configuration panel's Version dropdown menu for each webhook field.
Change to the pricing
object in status messages webhook:
pricing_model
property will support a new PMP
value. The property will be set to PMP
(per-message pricing) if per-message pricing applies to you, otherwise it will be set to CBP
(conversation-based pricing)type
property will be included, which can have the following possible values:
regular
— indicates the message is billablefree_customer_service
— indicates the message is free because it was either a utility template message or non-template message, sent within a customer service windowfree_entry_point
— indicates the message is free because it is part of a free-entry point conversationUnder the conversation-based pricing model, the category
value in pricing
objects indicated which conversation rate was applied. Under the per-message pricing model, these values will not change, but can be interpreted as follows:
authentication
— indicates an authentication template messageauthentication-international
– indicates an authentication template message sent to a WhatsApp user in a country or region that has authentication-international ratesmarketing
— indicates a marketing template messageutility
— indicates a utility template messageservice
— indicates a non-template messagereferral_conversion
— indicates the message is part of a free entry point conversationThe type
value can be used in conjunction with the category
value to determine if the webhook describes a message that was billable, and if so, which rate was applied. For example:
Type | Category | Rate | Reason |
---|---|---|---|
|
| Marketing | All marketing template messages are billable. |
|
| Utility | Utility template messages sent outside of a customer service window are billable. |
|
| n/a | Utility template messages sent inside of a customer service window are free. |
|
| n/a | Non-templates messages are free. |
Note that the billable
property will be deprecated in a future versioned release, so we recommend that after per-message pricing applies to you, you start using type
to determine if a given webhook is associated with a billable message.
Structure of messages webhooks with pricing information after per-message pricing applies to you:
{ "object": "whatsapp_business_account", "entry": [ { "id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>", "changes": [ { "value": { "messaging_product": "whatsapp", "metadata": { "display_phone_number": "<BUSINESS_DISPLAY_PHONE_NUMBER>", "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>" }, "statuses": [ { "id": "<WHATSAPP_MESSAGE_ID>", "status": "sent", "timestamp": "<WEBHOOK_SENT_TIMESTAMP>", "recipient_id": "<WHATSAPP_USER_ID>", "pricing": { "billable": <IS_BILLABLE?>, // to be deprecated in future release "type": "<PRICING_TYPE>", // new property "pricing_model": "PMP", // new `PMP` value "category": "<PRICING_CATEGORY>" } } ] }, "field": "messages" } ] } ] }
With the launch of per-message pricing, free entry point conversations will behave the same but reflect messages instead of conversations. If a WhatsApp user messages you via a free entry point surface, you can respond with any type of message for free within 24 hours; this opens a free entry point customer service window that lasts 72 hours. You can continue to message the user using any type of message while this window is open, at no charge.
Starting November 1, 2024, service conversations are free for all businesses (free tier conversations are now unlimited instead of capped at 1,000). As a reminder, a customer service window must be open between you and a WhatsApp user before you can send the user a non-template message.
"type":"template"
).text
message ("type":"text"
), informing the user that a customer service agent will respond by 9am the next day.text
message.Starting April 1, 2025, for all webhook versions and phase groups, the pricing
object in free service conversation status messages webhooks will have:
type
set to free_customer_service
category
set to service
"pricing": { "billable": false, "pricing_model": "<PRICING_MODEL>" "type": "free_customer_service", "category": "service" }
The <PRICING_MODEL>
value can be either PMP
(per-message pricing) or CBP
(conversation-based pricing), depending on which pricing model applied to you when the message was sent.
From April 1, 2025 through June 30, 2025, the pricing
object in webhooks identifying a free utility template message will have:
billable
set to false
(vs. true
for billable utility template messages)category
set to service
"pricing": { "billable": false, "pricing_model": "CBP", "category": "service" }
Starting July 1, 2025, the pricing
object in webhooks identifying a free utility template message will have:
type
property, set to free_customer_service
(vs. regular
for a billable utility template message, or free_entry_point
for a free entry point conversation message)pricing_model
property will be set to a new PMP
(per-message pricing) valuecategory
set to service
"pricing": { "billable": false, "pricing_model": "PMP", // New PMP value "type": "free_customer_service" // New object property "category": "service" }
Starting April 1, 2025, the pricing
object in webhooks identifying a free utility template message will have:
billable
set to false
(vs. true
for billable utility template messages)category
set to service
"pricing": { "billable": false, "pricing_model": "<PRCING_MODEL>", "category": "utility" }
The <PRICING_MODEL>
value can be PMP
or CBP
, depending on which pricing model applied to you when you sent the message.
All service conversations opened on or after November 1, 2024, will be identified as FREE_TIER
. If you request conversation analytics filtering for service conversations (conversation_categories
includes SERVICE
) and use a lookback period that straddles this date:
conversation_types
with a value of either FREE_TIER
(conversations opened before the 1K free tier limit was reached) or REGULAR
(conversations opened after the 1K free tier limit was reached). Note that conversations opened before this date but delivered after it are charged, and thus identified as REGULAR
.conversation_types
with either value as well, but REGULAR
will be zero (0
), since all service conversations are now free and identified as FREE_TIER
.The conversation_analytics
field will be deprecated when Graph API version 25.0 is released (late October or early November, 2025). This should give you adequate time to fetch any historical conversation analytics you might need before the field is no longer usable.
Starting November 1, 2024, the WhatsApp Manager > Account tools > Insights panel will have the following changes:
Starting April 1, 2025, utility templates sent within a customer service window ("CSW") are free for all businesses. Utility templates sent outside a customer service window will continue to be charged the utility rate.
The illustration below shows the behavior of two utility template messages sent by a business in the phase 1 group, on or after April 1, 2025. Utility template message um1 is free because it is sent while the CSW is still open, but um2 is billed the utility rate, because it is sent after CSW has closed.
As another example, the illustration below shows the behavior of two utility template messages sent by a business in the phase 2 group, between April 1, 2025 and June 30, 2025 (after this time period, the behavior will be the same as the behavior illustrated above). Utility template message um1 is free because it is sent while the CSW is still open, but um2 opens a utility conversation billed at the utility rate because the CSW has closed.
Note that in this scenario, although a 24-hour CSW is opened when the WhatsApp user messages the business, no conversation exists. So, um1 opens a service conversation (which is free since it is within the CSW) and the conversation ID gets assigned to the conversation.id
property in any related status messages webhooks.
A WhatsApp user sends you a message asking when the package they ordered will be delivered. You can respond for free within the customer service window using any non-template message, such as a text message, or a utility template message, and neither would incur a charge.
To support this new behavior, starting April 1, 2025, for all Cloud API webhook versions and both phase groups, status messages webhooks will have the following pricing
object changes:
type
property will be included with the following possible values:
regular
— Indicates the message is billablefree_customer_service
— Indicates the message is not billable because it was a utility template message, sent within a CSWfree_entry_point
— Indicates the message is not billable, as it is part of a free entry point conversationPMP
value will be added to the pricing_model
field. Once per-message pricing applies to you, the value will be set to PMP
. Until then, it will be set to CBP
to indicate conversation-based pricing"pricing": { "billable": <IS_BILLABLE?>, // to be deprecated in a future release "pricing_model": "<PRICING_MODEL>", // can now be "PMP" or "CBP" "type": "<PRICING_TYPE>" // new object property "category": "<PRICING_CATEOGORY>" }
In addition, once per-message pricing applies to you, the conversation
object will have the following changes:
id
will be set to a unique ID per-message, instead of per-conversation, unless the webhook is for a free-entry point conversationconversation
object will only be included for messages that are part of a free-entry point conversationStarting April 1, 2025, for all webhook versions and phase groups, the pricing
object in free utility template status messages webhooks will have:
type
set to free_customer_service
category
set to utility
"pricing": { "billable": false, "pricing_model": "<PRICING_MODEL>" "type": "free_customer_service", "category": "utility" }
The <PRICING_MODEL>
value can be either PMP
(per-message pricing) or CBP
(conversation-based pricing), depending on which pricing model applied to you when the message was sent.
Starting April 1, 2025, for all webhook versions and phase groups, the pricing
object in billable utility template status messages webhooks will have:
type
set to regular
category
set to utility
"pricing": { "billable": true, "pricing_model": "<PRICING_MODEL>" "type": "regular", "category": "utility" }
The <PRICING_MODEL>
value can be either PMP
(per-message pricing) or CBP
(conversation-based pricing), depending on which pricing model applied to you when the message was sent.
From April 1, 2025 through June 30, 2025, the pricing
object in webhooks identifying a free utility template message will have:
billable
set to false
(vs. true
for billable utility template messages)category
set to utility
"pricing": { "billable": false, "pricing_model": "CBP", "category": "utility" }
Starting July 1, 2025, the pricing
object in webhooks identifying a free utility template message will have:
type
set to free_customer_service
(vs regular
for a billable utility template message, or free_entry_point
for a free entry point conversation message)category
set to utility
"pricing": { "billable": false, "pricing_model": "PMP", // New PMP value "type": "free_customer_service" // New object property "category": "utility" }
Starting April 1, 2025, the pricing
object in webhooks identifying a free utility template message will have:
billable
set to false
(vs. true
for billable utility template messages)category
set to utility
"pricing": { "billable": false, "pricing_model": "CBP", "category": "utility" }
For business in the phase 1 group, starting April 1, 2025, utility template messages will have pricing_type
set to FREE_CUSTOMER_SERVICE
and pricing_category
set to UTILITY
in data point objects returned in pricing analytics responses.
{ "pricing_analytics": { "data": [ { "data_points": [ { "start": <START_TIME>, "end": <END_TIME>, "volume": 1, "pricing_type": "FREE_CUSTOMER_SERVICE", "pricing_category": "UTILITY", }, ... ] } ] } }
For businesses in the phase 2 group, between April 1, 2025, and June 30, 2025, free utility template messages are part of existing conversation windows and are not surfaced in conversation_analytics
. After this time period, the analytics behavior described above will apply.
Effective February 1, 2025, any business eligible for authentication-international rates will be charged these rates across 7 additional markets listed below, except for the market that matches their Primary Business Location (where they will continue to be charged the authentication rate).
Eligibility emails will be sent 30 days prior to confirm this.
Updates to rates are available in the rate cards below.
Starting April 1, 2025, if you are in the per-message pricing Phase 1 group, the eligibility threshold for authentication-international rates will be based on authentication messages sent instead of authentication conversations opened across all 9 markets that have authentication-international rates.
Updated rate cards reflecting the changes described on this page are below. Note these reflect future updates to rates; our current rate cards are available here.
pricing_model
value of PMP
instead of CBP
, and conversation objects will have inaccurate data.pricing_analytics
analytics field now available to businesses in the Phase 1 group.Cloud API status messages webhooks conversation
object changes:
id
will be set to a unique ID per-message, instead of per-conversation, unless the webhook is for a free-entry point conversation message, if per-message pricing applies to you.conversation
object will only be included for messages that are part of a free-entry point conversation, if per-message pricing applies to you.pricing_analytics
analytics field now available to businesses in the Phase 2 group.conversation_analytics
field will return an error.December 20, 2024
conversation_analytics
fieldOctober 31, 2024
October 28, 2024