Skip to content
man glossary/webhook-pricing-object

glossary define webhook-pricing-object

Name

Webhook Pricing Object

The pricing block on WhatsApp status webhooks — pricing_model, type, category and billable — that shows how each message you send is charged.

Synopsis

pricing object, Status webhook pricing, pricing_model PMP, Billable flag

Section

Webhooks & events

Level

practitioner

▍

Reviewed

Turn a month of pricing objects into a bill

  • Authentication₹0.14per message
    1,80,000 × ₹0.14 · max 3,00,000= ₹25,200.00
  • Utility₹0.19per message
    60,000 × ₹0.19 · max 1,00,000= ₹11,400.00
  • Marketing₹0.94per message
    25,000 × ₹0.94 · max 1,00,000= ₹23,500.00
  • Service₹0.145per message
    9,000 × ₹0.145 · max 1,00,000= ₹1,305.00

Estimated total

₹61,405.00

for 2,74,000 messages · blended ₹0.2241 per message

Share of spend

  • authentication · regular66% of messages · 41% of spend
  • utility · regular22% of messages · 19% of spend
  • marketing · regular9% of messages · 38% of spend
  • service · regular (since 1 Oct 2026)3% of messages · 2% of spend

authentication · regular drives 41% of the bill — at ₹0.14 a message, its volume matters most.

Illustrative volumes, counted once per wamid from delivered or read statuses. Messages reporting type free_entry_point add nothing, so they have no line.

Rates for India, ex-GST.

Each line counts delivered messages whose pricing object showed type regular and that category. Drag the volumes to see how India rates turn webhook signals into spend.

Total ₹61,405.00 for 2,74,000 messages.

Description

What is the webhook pricing object?

The webhook pricing object is a small block inside the statuses webhook that tells you how Meta classifies a message you sent for billing. Since per-message pricing replaced conversation-based pricing on 1 July 2025, it carries four fields: pricing_model (PMP for per-message pricing; CBP appears only on webhooks sent before 1 July 2025), type, category and billable.

category is the pricing category: marketing, utility, authentication, authentication-international, service, marketing_lite for messages sent through the Marketing Messages API for WhatsApp (formerly MM Lite), or referral_conversion for free entry point traffic. type says whether the message is charged: regular means billable, free_entry_point means it was delivered inside an open 72-hour free entry point window, and free_customer_service marked the in-window service replies and utility templates that were free until 30 September 2026. Meta's reference limits free_customer_service to messages sent through 30 September 2026, so since 1 October 2026 a service message (a free-form reply inside the customer service window) reports type regular and category service, unless a free entry point window covers it.

The object rides on the sent status and on one of the later delivered or read statuses for the same wamid — not on every status. Meta says billable will be deprecated and recommends reading type and category together. With Graph API v24.0 and later, the old conversation block, described under Webhook Conversation Object (Legacy), is omitted unless the message belongs to a free entry point conversation. Unlike the rate card, which lists what each category costs per market, the pricing object is the per-message signal that tells you which line of the rate card applies.

Key takeaways

  • The pricing object on status webhooks shows how Meta bills each message you send: pricing_model, type, category and billable.
  • type regular means charged at the category's rate; free_entry_point means delivered free inside a free entry point window.
  • Since 1 October 2026 a service reply reports type regular and category service, because Meta now charges for it.
  • The object rides on the sent status and on one of delivered or read, so record it once per wamid.
  • Meta plans to deprecate billable; build billing reports on type and category instead.

Usage

The webhook pricing object in code

{
"id": "wamid.HBgMOTE5ODEyMzQ1Njc4FQIAERgSN0Y2QjA1RTNC",
"status": "delivered",
"timestamp": "1760866200",
"recipient_id": "919812345678",
"pricing": {
"billable": true,
"pricing_model": "PMP",
"type": "regular",
"category": "service"
}
}

A service reply delivered after 1 October 2026: charged, so type is regular and category is service.

Properties

The webhook pricing object: key facts and limits

Location
statuses[].pricing in messages webhooks
pricing_model
PMP (CBP only on webhooks before 1 July 2025)
type
regular · free_entry_point · free_customer_service (until 30 Sep 2026)
category
marketing, utility, authentication, authentication-international, service, marketing_lite, referral_conversion
Carried on
sent, plus one of delivered or read
billable
To be deprecated — read type and category
Service replies (India)
₹0.145 per message since 1 October 2026

Mechanics

How does the webhook pricing object work?

  1. step 1 — Read it from status webhooks

    Look in entry[].changes[].value.statuses[].pricing. It appears on the sent status and on one later delivered or read status of the same wamid.

  2. step 2 — Classify with type and category

    type regular means the message is charged at its category rate; free_entry_point means it is not. Treat billable as a fallback only, since Meta plans to deprecate it.

  3. step 3 — Count once per wamid, on delivery

    Store the object keyed by wamid and ignore the second copy. Meta charges delivered messages only, so count a message once it reaches delivered or read.

  4. step 4 — Multiply by the rate card

    Map each category to its rate for the recipient's market — for India on InfiQ's card, ₹0.94, ₹0.19, ₹0.14 and ₹0.145 — to estimate spend before the invoice arrives.

  5. step 5 — Alert on surprises

    Flag a template whose category changes, authentication-international on OTPs you expected to be domestic, or a sudden fall in free_entry_point volume during an ad campaign.

Why it matters

Why does the webhook pricing object matter?

It is the only per-message billing signal you get in real time. Finance teams use it for billing reconciliation against Meta's invoice, product teams use it to see how much traffic lands as marketing versus utility, and developers use it to catch a template whose template category Meta has changed — a utility template that starts reporting category marketing costs ₹0.94 per delivery in India instead of ₹0.19, and nothing else in the API will warn you as quickly.

Example

Example: Month-end reconciliation at a Chennai fintech

A Chennai fintech sends OTPs, payment receipts and a weekly offer. Its billing job reads the pricing object from each status webhook and writes wamid, category and type to a table, marking rows delivered when the delivered or read status arrives. At month end the table shows 1.8 lakh authentication, 60,000 utility, 25,000 marketing and 9,000 service messages, plus 3,000 free_entry_point replies from a Click-to-WhatsApp campaign that cost nothing. Multiplying by the rate card lands close to the invoice, and the one template that drifted from utility to marketing shows up as its own line.

Caveats

Common mistakes with the webhook pricing object

  • Counting the object twice

    It appears on sent and again on delivered or read. Summing every occurrence doubles your spend estimate; key the record by wamid.

  • Building reports on billable

    Meta plans to deprecate billable. Base reports on type and category now so they keep working when the field disappears.

  • Hard-coding the service category as zero cost

    Code written before October 2026 often treats category service as costless. Since 1 October 2026 service replies and in-window utility templates have been charged, so decide on type, not on a list of categories.

  • Treating sent as billed

    Meta bills delivered messages only. A message that shows pricing on sent and then fails is not charged, so join the pricing record with the final status.

  • Enums that miss marketing_lite or the hyphen

    Messages sent through the Marketing Messages API report marketing_lite, and the international OTP category is spelled authentication-international here. A strict enum that only knows marketing and authentication drops them.

Questions

Webhook Pricing Object FAQs

Does the pricing object show the price in rupees?
No, it shows the pricing model, the category and whether the message is charged — never an amount. Multiply each delivered message by the rate card for the recipient's market to get the cost.
Why does a service reply now show type regular?
Because Meta has charged service messages since 1 October 2026. Until 30 September 2026, in-window service replies and utility templates showed type free_customer_service; now a charged reply reports regular with category service.
Is the pricing object on every status webhook?
No, it appears on the sent status and on one of delivered or read for the same message, never on both. Store it keyed by wamid so the second copy does not double your totals.
How is the pricing object different from the conversation object?
The pricing object describes per-message billing; the conversation object described 24-hour conversations under the old model. From Graph API v24.0 the conversation object is omitted unless the message belongs to a free entry point conversation.
Do messages in a free entry point window cost anything?
No, they report type free_entry_point. Meta left the 72-hour free entry point window unchanged for message delivery when it began charging for service messages on 1 October 2026.

Notes

Best practices for the webhook pricing object

  • Store pricing with the template name so category drift per template is easy to see.
  • Compare monthly totals per category with Meta's invoice and investigate any gap that keeps recurring.
  • Alert when a template's reported category changes — it is the earliest sign of recategorisation.
  • Keep CBP-era rows separate: their categories described conversations, not messages.

See InfiQ pricing

* Per-message rates for India, ex-GST: marketing, utility and authentication effective 1 July 2026; service messages ₹0.145 since 1 October 2026 (they were ₹0 until 30 September 2026). Volume commitments earn discounts — final rate is confirmed on your account; applicable GST extra. Rates for other countries differ (see the international rate table on /pricing).

Put Webhook Pricing Object to work

InfiQ is an official Meta Business Partner. Start a 7-day free trial — no card needed — and see this running on your own number.