Skip to main content

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):

  1. 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.

  2. 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.

  3. 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.

  4. 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?

  5. Marketing Messages API: please support sending MARKETING templates via Meta's /marketing_messages (MM API, max-price bidding from 1 Oct 2026).

  6. Template header media: POST /v1/whatsapp/templates has no header_handle or example upload, so we cannot create image/video/document header templates.

Status: Completed1 comment

Log in to comment and vote

Comments1

  • Miquel Palet López

    Team•

    Sep 30

    Thanks for the detailed list. Status per item, all live today unless noted:

    1. Billing blocker: WhatsApp accounts now record messagingRestriction on 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.

    2. 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) and whatsapp.account.alert_received (Meta account alerts). Subscribe to them on your webhook in the dashboard or via the API.

    3. 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.

    4. BSUID changes: new whatsapp.contact.identity_changed event with reason and previous/current (phone, BSUID, parent BSUID, username). You were right about whatsappUsername: 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).

    5. 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.

    6. 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.