Skip to main content

Meta WhatsApp Non-Template Message Pricing Change

Initiative owned by the Bifrost team, tracking Qontak's response to Meta's WhatsApp Business Platform pricing change for non-template messages (source: https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/non-template-messages). From October 1, 2026, previously-free "service" (non-template) messages become billable per message. This is a direct continuation of the July 2025 Per-Message Pricing (PMP) migration (PRD, BIF-4331): the CBP/PMP deduction engine already reads pricing_model / pricing.type / category off the Meta webhook and bills type=regular messages per unique message id at their category price + margin. Service is billed at cost — a 0 Qontak margin at launch (pass-through; see the resolved product decision below and the PRD). Today a service message inside the customer service window arrives as type=free_customer_service (free); after the switch Meta sends it as type=regular, so the existing PMP path bills it — the work is mainly (a) seeding a service category price and (b) verifying the PMP flow bills category=service rather than special-casing it as free.

Out of scope: Meta's new "Meta Business Agent" per-token AI billing (Aug 2026) — Qontak does not use Meta Business Agent, so that dimension does not apply.

Scope Changes

  • Backendhub_core: verify the PMP type=regular branch bills category=service (remove any "service is always free" special-case) — this is where the deduction engine lives; qontak-billing: confirm/seed the service rate in v2_wa_conversation_prices (its visible deduction endpoint is the legacy conversation-based path, not the PMP engine); report-worker: verify/fix the MCC export filter so billable service rows appear.
  • Frontendhub, hub-chat: confirm billable service-message usage renders in customer-facing usage/billing reports (per-message "Message ID" reporting already shipped with the July 2025 PMP work — BIF-4332/4626/4616).
  • Data — new/updated price-catalog rows for the service category in v2_wa_conversation_prices (per country); the service margin is set to 0 (charge at cost) — 0 by default for new CIDs at account creation, and backfilled to 0 for existing CIDs on the release date.

QA Lane

Lane B — keeps a human QA gate. Money-critical billing reconciliation against Meta: after 1 Oct 2026 the PMP path must bill category=service at the seeded rate, and a silent error (wrong rate, missed rows, or double-billing) directly mischarges customers on ~14–15B IDR/month of previously-free traffic. No E2E test specs exist for this initiative yet, so the Lane-A entry bar (100% E2E, spec-mapped) is unmet regardless. Classified by Yoddi, Izzul (QA), 2026-07-06.

Priority

Portfolio-relative rank lives only in the team roadmap ## Priority table (never a per-initiative field). Set to P2 on 2026-07-06 (immediately after Deduction V2) — see ../delivery/roadmap.md.

  • qontak-billing
  • hub-service (+ hub_core — not checked out locally; the webhook parser that derives pricing category/type and forwards deductions needs direct verification)
  • report-worker
  • hub
  • hub-chat

Docs

Product decision (resolved 2026-07-22)

Will Qontak absorb, pass through 1:1, or bundle the new Meta service-message fee? Resolved: pass through 1:1 at cost — a 0 Qontak margin at launch. Clients are billed exactly what Meta charges Qontak, with no markup. The service margin remains a real, configurable field (default 0): new CIDs inherit 0 at account creation; existing CIDs are backfilled to 0 on the release date. A non-zero markup can be introduced later without re-architecting. Other categories' margins are unchanged. See PRD §14 (Key Decisions) and the PRD §1 problem statement.