WhatsApp Message Pricing Updates

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:

  • "PMP"— indicates per-message pricing applies.

  • "CBP" — indicates conversation-based pricing applies.

pricingType

String

New property. Exclusively available in PMP (Per-Message Pricing) mode. Values can be:

  • regular — indicates the message is billable.
  • free_customer_service — indicates the message is free because it was either a utility template message or non-template message sent within a customer service window.
  • free_entry_point — indicates the message is free because it is part of a free-entry point conversation.

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.