Skip to content
InfiQ glossary · Reference sheetPricing & billing

Billable Message

A WhatsApp message Meta actually charges for: delivered, with pricing type regular. Failed, expired, inbound and free-bucket messages are not billable.

Properties

Term
Billable Message
Abbreviation
None
Level
Practitioner
Audience
Developers, Business owners
Reviewed
Also called
Chargeable message · Billed message · Charged WhatsApp message

01 · Definition

What is a billable message?

A billable message is one Meta charges a business for under per-message pricing, in force since 1 July 2025. The rule has two parts: the message must be delivered to the user's device, and it must not fall into one of Meta's free buckets. Templates are charged by their category — marketing, utility, authentication or authentication-international — and, since 1 October 2026, free-form replies inside the customer service window are charged as service messages once a business phone number has used its monthly free tier of 1,000 service messages.

Everything else is not billable. Messages customers send to you are never charged. A send that fails — an invalid number, a per-user marketing limit, a payment problem on the account — ends in a failed status and no charge, and a message whose time-to-live (TTL) runs out before the phone comes online is dropped unbilled. Messages delivered inside an open free entry point window, which a Click-to-WhatsApp ad opens, carry no charge; neither do each business phone number's first 1,000 delivered service messages a month, nor the one-to-one messages a coexistence business sends from the WhatsApp Business app.

Status webhooks say which bucket each message landed in. The pricing object arrives with the sent status and with one of delivered or read: type is regular for a billable message and free_entry_point inside a free entry point window, while free_customer_service now marks a service reply that fell inside the number's monthly free tier (until 30 September 2026 it covered every service reply and every utility template sent inside an open window). category names the rate. Meta says the older billable boolean will be deprecated, so new code should decide from type and category. This page sets out the business rule; the webhook pricing object entry documents the payload field by field.

Key takeaways

  • A billable message is a WhatsApp message Meta charges for: it was delivered and its pricing type is regular.
  • Inbound, failed and time-to-live-expired messages are never billed.
  • The charge happens once, at delivery; the read status repeats the pricing object but adds no cost.
  • Free entry point deliveries report type free_entry_point; service replies within a number's first 1,000 a month report free_customer_service.
  • Since 1 October 2026, utility templates sent inside an open window and service replies beyond the free tier report type regular.

See InfiQ pricing

02 · Specifications

A billable message: key facts and limits

Charge triggerDelivery to the user's device
Never billedInbound, failed and TTL-expired messages
Billable pricing.typeregular
Free pricing.type valuesfree_entry_point, free_customer_service (service free tier)
Service free tierFirst 1,000 delivered service messages per number a month
Pricing object sent withsent, plus one of delivered or read
Priced byCategory × recipient's country calling code
Service replies beyond the tier (India)₹0.145 each on InfiQ's card since 1 October 2026

03 · Operation

How does a billable message work?

  1. The API accepts the send

    A 200 response with a wamid means Meta accepted the request. It proves nothing about delivery, and nothing has been charged yet.

  2. `sent` previews the pricing

    The sent status carries the pricing object with the expected type and category. The message can still fail or expire, so this is not yet a charge.

  3. Delivery creates the charge

    When the delivery receipt arrives — status delivered — and pricing.type is regular, the message is billable at its category's rate for the recipient's market, set by the country calling code of the number.

  4. `read` adds nothing

    The read status repeats the pricing object but is not a second charge. Statuses can arrive out of order, so treat a read as proof of delivery if it comes first.

  5. Failures and expiries stay unbilled

    A failed status carries an errors array explaining why, and a message dropped at the end of its time-to-live never reaches the phone. Neither is charged, and inbound messages never are.

04 · Code samples

A billable message in code

{
"id": "wamid.HBgMOTE5ODc2NTQzMjEwFQIAERgSNDRGQjE2NDQ4QkQwM0U5",
"status": "delivered",
"timestamp": "1792386000",
"recipient_id": "919876543210",
"pricing": {
"billable": true,
"pricing_model": "PMP",
"type": "regular",
"category": "utility"
}
}

One entry from value.statuses. type regular means this delivery is charged at the utility rate.

05Playground

A working model of Billable Message. Use its controls to replay it step by step.

When does a message start to cost money?

4 / 4
  • Accepted · wamid to sent: status: sent
  • sent to delivered · billed: status: delivered
  • delivered · billed to read: status: read
  • Accepted · wamid to failed · not billed: rejected before sending
  • sent to failed · not billed: delivery fails
  • sent to TTL expired · not billed: time-to-live runs out
  • sent to delivered · free: delivered in a free entry point window
  • sent to delivered · free tier: service reply within the monthly free tier
  1. Accepted · wamid
  2. sent
  3. delivered · billed
  4. read

Step 4 of 4 · end of walk

read

Opened in the chat. The pricing object repeats; there is no second charge. A read arriving first still means delivered.

Arrived from delivered · billed via status: read.

Can move to

Nothing — this is a final state.

Walk a message through its statuses: the charge lands only at delivery. Switch paths to see a failed send, a time-to-live expiry, a free entry point delivery and a free-tier service reply.

Happy path, step 4 of 4: read (via status: read). Opened in the chat. The pricing object repeats; there is no second charge. A read arriving first still means delivered.

06 · Cautions

Common mistakes with a billable message

  • Counting accepted requests as spend

    A 200 response and a wamid prove acceptance, not delivery. Forecasts and cost dashboards built on send counts overstate spend; build them on delivered statuses.

  • Booking a message once per webhook

    The pricing object appears on sent and again on delivered or read, so summing every webhook that carries one doubles the count. Book one line per wamid.

  • Relying on the `billable` boolean

    Meta says it will be deprecated in a future Graph API version. Read pricing.type and pricing.category so the code keeps working when the flag disappears.

  • Treating in-window replies as uncharged

    Since 1 October 2026, utility templates sent inside an open window arrive with type: regular, and service replies are charged once a number passes 1,000 in the month. Cost models that zeroed both now under-forecast.

  • Resending instead of waiting

    A resend that is delivered is billed again, and if the original also lands later you pay twice. Let the time-to-live do its job and resend only after a failed status.

07 · Worked example: 10,000 dispatch updates, 9,620 charges

Example: 10,000 dispatch updates, 9,620 charges

A Surat textile wholesaler sends 10,000 utility dispatch updates with a 12-hour time-to-live. 9,620 report delivered with type: regular and category: utility; 240 fail with error 131026 because the numbers cannot receive WhatsApp messages; 140 go to phones that stay offline until the time-to-live runs out and are dropped. The invoice line is 9,620 utility messages at the India utility rate — ₹0.19 each on InfiQ's card — not 10,000. When retailers reply to ask about a bale, their messages cost nothing; the wholesaler's free-form answers carry no Meta charge until its number has sent 1,000 service messages that month, and each one after that is a billable service message.

08 · Rationale

Why does a billable message matter?

Every figure on a WhatsApp invoice is a count of billable messages multiplied by a rate, so knowing exactly what counts is how a team forecasts spend, explains a variance during billing reconciliation and avoids paying for messages that never arrived. It also shapes engineering choices: failed and expired sends cost nothing, but a delivered duplicate costs full price, so deduplicating retries and setting sensible time-to-live values matter more than chasing the last failure.

09 · Recommended practice

Best practices for a billable message

  • Store the raw pricing object with each wamid — it is the evidence if a charge is ever disputed.
  • Set time-to-live on time-sensitive templates so stale messages expire unbilled instead of arriving late.
  • Watch the share of failed statuses by error code; failures are free but each one is a customer you did not reach.
  • Report spend from delivered, regular-type messages only, split by category and country.

10 · Questions and answers

Billable Message FAQs

Am I charged for messages that fail?
No. Meta bills delivered messages only. A message that ends in a failed status, or is dropped when its time-to-live expires, is not charged.
Are the first 1,000 service messages a month billable?
Not by Meta. Since 1 October 2026 each business phone number gets 1,000 delivered service messages a month that report free_customer_service, and Meta bills from the 1,001st. Ask your provider whether its own invoice passes that tier through.
Is a read message charged more than a delivered one?
No. The charge happens once, at delivery. The read status repeats the pricing object for your records but adds no cost.
Is a marketing template billable if the customer has an open service window?
Yes. Templates are charged by their category whether or not a window is open, so a marketing template inside the window is still billed at the marketing rate.
Are messages my customers send me billable?
No. Inbound messages are never charged. They do open a 24-hour customer service window, and your free-form replies inside it become billable service messages once your number has used its monthly free tier of 1,000 service messages.

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