Groups API Pricing
Updated: Oct 22, 2025Per-message pricing on Groups API
Groups API uses Cloud API’s per-message pricing model to determine if a given message is billable. However, you are charged each time a billable message is delivered to someone in the group. For example, if you send a (billable) marketing template message to a group with 5 WhatsApp users and it is delivered to all 5 users, you would be charged for 5 delivered messages at the going marketing message rate for each recipient’s country calling code. If the message was delivered to only 4 of the 5 users, you would only be charged for the 4 delivered messages.How customer service windows work with Groups API
Customer service windows work differently when using Groups API. When any WhatsApp user in the group messages you, a customer service window is opened between you and the entire group (or is refreshed, if one already exists). This allows you to send utility and marketing template messages, or free form messages, for free. This is different from 1:1 messaging, where when a WhatsApp user messages you, a customer service window is opened between you and that customer (or is refreshed, if one already exists). Everything else about customer service windows remains the same.Pricing information in Message Status webhook
Pricing information for messages sent using Groups API is included in messages status webhooks.How read and delivered message status webhooks are processed
In order for a message status to be considered read, it must have been at least delivered.
In some scenarios, such as when a user is present in the chat thread when a message arrives, the message is marked delivered and read nearly simultaneously. In this and other similar scenarios, the delivered webhook is not sent back. This is because it is implied that the message was delivered since it has been read.
How pricing data is displayed in the Message Status webhook
Not all Message Status webhooks include pricing information. With the introduction of Per-message Pricing, pricing data can be present insent, delivered or read status webhook. If a message is charged, you can expect that at least one webhook (delivered or read) will contain the pricing information.
Sent message status webhook
Delivered / Read message status webhook
Parameters
| Placeholder | Description |
|---|---|
<CONVERSATION_ID> | Version 24.0 and higher: The conversation object will be omitted entirelyVersion 23.0 and lower: Value will now be set to a unique ID per-message, instead of per-conversation. |
<CONVERSATION_CATEGORY> | Not changing. |
<CONVERSATION_EXPIRATION_TIMESTAMP> | Not changing. |
<IS_BILLABLE?> | Not changing. However, the billable property will be deprecated in a future versioned release, so we recommend that you start using pricing.type and pricing.category together to determine if a message is billable, and if so, its billing rate. |
<PRICING_TYPE> | New property. Values can be:regular — indicates the message is billable.free_group_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. |
<PRICING_CATEGORY> | Values are not changing, but can now be interpreted as follows:group_marketing — indicates a marketing template message.group_utility — indicates a utility template message.group_service — indicates a non-template message. |
Identifying billable messages
Billable messages havepricing.type set to regular. The pricing.category value indicates the rate (group_marketing or group_utility).
Identifying free messages
Free messages havepricing.type set to free_group_customer_service. The pricing.category value tells you why it was free:
group_utility — the message was sent within an open group customer service window.
group_service — all non-templates messages are free.
Messaging analytics for Groups API
Theanalytics field provides the number and type of messages sent and delivered by the phone numbers associated with a specific WABA — for conversation metrics, see Conversation Analytics.
You can use the following endpoint to retrieve analytics for messages sent using Groups API:
Filter parameters for messaging analytics
For a full list of messaging analytics filter parameters, view the Messaging Analytics reference.Changes to filter parameters for Groups API
| Name | Description |
|---|---|
product_typestype: Array | Optional. The types of messages (notification messages and/or customer support messages) for which you want to retrieve notifications. Provide an array and include: 101 for group notification messages102 for group customer support messages.103 for inbound group messagesIf the above values are not provided, the API call will be return analytics for all messages together. Inbound product type cannot be queried together with other product types, or you will see an error similar to the one below: <br /> {<br /> "error": {<br /> "message": "Invalid parameter",<br /> "type": "OAuthException",<br /> "code": 100,<br /> "error_subcode": 2388077,<br /> "is_transient": false,<br /> "error_user_title": "Insight Invalid Product Type Combination",<br /> "error_user_msg": "Unable to query this combination of product types. Please query individually and try again.",<br /> }<br />}<br /> |
Response value
Successful responses to the analytics API when querying Groups API message data will return an object similar to the following: Note: The country code filter is not supported for group sent messages.Pricing analytics for Groups API
Thepricing_analytics field allows you to get pricing breakdowns for any messages delivered within a specified date range.
Filter parameters for pricing analytics
For a full list of messaging analytics filter parameters, view the Messaging Analytics reference.Changes to filter parameters for Groups API
| Name | Description |
|---|---|
<PRICING_CATEGORIES>Array of strings | Optional. Array of pricing categories. If you send an empty array, we return results for all pricing categories. Values can be: GROUP_MARKETING: Group messages charged the marketing rate.GROUP_SERVICE: Group messages that were not charged. Includes all non-template messages and utility messages sent inside of a customer service window.GROUP_UTILITY: Group messages charged the utility rate. |
<PRICING_TYPES>Array of strings | Optional. Array of pricing types. If you send an empty array, we return results for all pricing types. Values can be: FREE_GROUP_CUSTOMER_SERVICE: Free group messages. These are non-template messages and utility messages sent within group customer service windows.REGULAR: Billable messages. Includes all authentication and marketing template messages, and any utility template messages sent outside of a customer service window. |

