WhatsApp integrator gaps: billing blocker, quality/limit webhooks, pricing analytics, BSUID changes, MM API, template header media
We run a WhatsApp inbox for Malaysian clinics on Zernio coexistence numbers. After reading your docs, these are the gaps we still work around (the pricing/conversation webhook request was filed separately):
Billing blocker: GET /v1/accounts/health only shows messagingRestriction after a send is refused. From 1 Oct, Meta stops service messages after the free tier if a WABA has no payment method. Please expose the blocker (e.g. payment_method_missing) proactively, with a webhook when it appears or clears.
Quality and limit webhooks: template status/category webhooks already work, thanks. Please add phone_number_quality_update (quality rating, messaging limit tier) and other account_update events.
Pricing analytics: please expose Meta's pricing_analytics (volume and cost by phone number, pricing category and type, daily/monthly) so we can reconcile the 1,000 free service messages per number.
BSUID changes: please forward the user_changed_user_id and user_changed_number system messages. Also, whatsappUsername has never been populated across 17,000+ contacts on our numbers. Is it passed through today?
Marketing Messages API: please support sending MARKETING templates via Meta's /marketing_messages (MM API, max-price bidding from 1 Oct 2026).
Template header media: POST /v1/whatsapp/templates has no header_handle or example upload, so we cannot create image/video/document header templates.
Log in to comment and vote
Comments1
Miquel Palet López
Sep 30
Thanks for the detailed list. Status per item, all live today unless noted:
Billing blocker: WhatsApp accounts now record
messagingRestrictionon GET /v1/accounts/health when Meta refuses sends for payment or eligibility reasons (131042, 131031, 368), and it clears on the next delivered/read message. Meta has no webhook for a payment method being added or removed, so a fully proactive signal before the first refusal is not possible from their side yet; we will add it if Meta exposes one.Quality and limit webhooks: new events
whatsapp.account.quality_updated(quality rating and messaging limit tier, with previous values, fired only on a change),whatsapp.account.status_updated(restrictions, bans) andwhatsapp.account.alert_received(Meta account alerts). Subscribe to them on your webhook in the dashboard or via the API.Pricing analytics: new
GET /v1/whatsapp/pricing-analytics?accountId=&start=&end=&granularity=DAILY|MONTHLY, a passthrough of Meta's pricing_analytics scoped to that number.BSUID changes: new
whatsapp.contact.identity_changedevent withreasonandprevious/current(phone, BSUID, parent BSUID, username). You were right aboutwhatsappUsername: we read it from the wrong place in Meta's payload, so it was always empty. Fixed; it now fills in as contacts message you (existing contacts update on their next message).Marketing Messages API: not yet. It needs per-WABA onboarding with Meta and we still need to confirm it works on coexistence numbers. Keeping it on the list.
Template header media: this already works. On POST /v1/whatsapp/templates, put a public URL of the image/video/document in the header component's
example.header_handle[0]; we upload it to Meta's Resumable Upload API and swap in the handle for you.Docs and the OpenAPI spec (1.171.0) are updated.