> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ycloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# WhatsApp pricing migration in 2025

> Historical July 2025 per-message pricing rules, callback fields, examples, and transition cases.

<Warning>
  Historical reference: these rules describe the July 1, 2025 migration to
  per-message pricing, effective at midnight in each WABA's time zone. They do
  not replace the [current pricing rules](/en/documentation/pricing-and-billing/whatsapp-pricing-and-billing)
  or [current pricing integration guide](/en/api-reference/guides/whatsapp-platform/whatsapp-message-pricing-integration-guide).
  In particular, the service allowance and utility-message rules changed on
  October 1, 2026.
</Warning>

## 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

  ![Historical illustration](https://files.readme.io/4500224986ddbbca3569c1d087234f8fc22cdb75e1f59b9d9f2cceaed3e8c26f-img05.jpeg)

**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.

![Historical illustration](https://files.readme.io/59a0878f51206e1d8c7d185c19690e37e5dbf2c1fe6ee93bffd9ea425078ddf5-image.png)

<br />

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

![Historical illustration](https://files.readme.io/bdd9fdbf58bfd7281b6d91e9871e4e16c797bdfcc8b453821e4cde277f39a455-img02.jpeg)

> 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.

<br />

* 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.

![Historical illustration](https://files.readme.io/0488d8567138321de2e1790f107c5fcb2faacac9bcff730a189324e905b87770-img03.jpeg)

* A comprehensive illustrative example

![Historical illustration](https://files.readme.io/44226200f27de23dcbc1589bd6f5a669899b39cf11ca915ae591f6ec5d9c8619-img04.jpeg)

<br />

## Per-message pricing webhooks

Effective July 1, 2025, the [WhatsApp Message Updated Webhook](/en/api-reference/guides/examples/webhook-examples/whatsapp-message-updated-webhook-examples) 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**

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "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": "+16315551111",
    "to": "+16315552222",
    "status": "read",
    "type": "template",
    "template": {
      "name": "login_otp",
      "language": {
        "code": "en_US",
        "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**

```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "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": "+16315551111",
    "to": "+16315552222",
    "status": "read",
    "type": "template",
    "template": {
      "name": "login_otp",
      "language": {
        "code": "en_US",
        "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"
  }
}
```

<br />

## Transition 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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.