WhatsApp quality and health model
WhatsApp sending capacity on a WhatsApp Business Account (WABA) is not a fixed quota. Meta continuously grades the account — at the account level, at the phone-number level, and per template — and adjusts how much it can send. This page explains how Devotel Orbit reads those Meta signals, what it does on your behalf when quality degrades, and the operator loop for recovering a degraded account.Meta’s quality signal sources
Meta grades a WABA from three independent sources. GET /whatsapp/health resolves them per connected WABA, and a periodic reconciler re-reads them so the values stay current between dashboard visits:- Account-level probe. A direct Meta read against the WABA reports whether the account can send (
health_status.can_send_message), its account review status, its business verification status and account mode, and whether payment is attached — the account’s baseline send-health. A field Meta does not return degrades to unknown and never overwrites a good stored value. - Per-template quality scores. Every approved template carries a GREEN / YELLOW / RED score from Meta, reported through the
message_template_quality_updatewebhook. You see the current score per template on the Templates list. - Per-recipient drop signals. Phone-level quality (GREEN / YELLOW / RED / UNKNOWN, worst across the WABA’s phones) comes back through the account probe; a recipient-level block or “not useful” report on a given template is what feeds its template score.
- Inbound subscription check. The health surface verifies the WABA is still subscribed to the inbound
messageswebhook field — an account can send fine while silently dropping every reply, and nothing on the Meta side warns about it. Checks Settings → Channels → WhatsApp → Health. - Payment-funding tri-state. Funding is treated as positive-only evidence: the probe only confirms a payment method when Meta returns one. A bare absence never defensively flags the account, because WABAs on consolidated parent-business billing often omit the funding field entirely.
What drives template quality to LOW — and the auto-pause hook
Meta scores a template from recipient feedback: blocks, “not useful” reports, and low read rates. Once a template tips RED, Meta first pauses it (24 hours, then 72 hours) and disables it on a third strike — and a pile of RED templates drags the account’s whole messaging tier down. Continuing to dispatch a RED template until Meta yanks it only deepens the penalty. Orbit gives you an opt-in guard for that: per template, you can enable auto-pause on RED. When Meta reports a RED score on an opted-in template, Orbit flips it topaused so the send pipeline stops dispatching it before Meta penalizes the account, and fires a whatsapp.template.auto_paused webhook so you are alerted. A template already in a non-sending status (paused, disabled, rejected, archived) is a no-op, so the hook never re-alerts on a template that already stopped.
Toggle the flag on the template record (the flag lives on the template’s metadata and round-trips through PATCH /api/v1/messages/templates/:id).
Billing-health interplay
Payment blocks are a separate, faster-moving signal. When a send fails with Meta error 131042 (payment / business-eligibility block) inside the trailing 24-hour window, the dashboard shows the “WhatsApp sends blocked — payment issue on Meta” banner. The banner uses a success-after-failure rule, not just elapsed time: the moment Meta accepts a send from an affected sender after the most recent rejection, the banner clears — you should not have to wait out the 24-hour window once the payment method is fixed. A WABA that shows a funding issue on the health probe is therefore surfaced on two axes — the probe’s per-WABA funding signal, and the live 131042 failure signal that drives the banner.What you can check
- Dashboard → Settings → Channels → WhatsApp → Health. Per connected WABA: can-send, review status, messaging tier and the dynamic daily limit, phone quality, and the inbound-subscription check, with probes re-run on demand.
- Templates list. Each template’s current quality score and its auto-pause opt-in status.
- Webhooks. Subscribe to
whatsapp.template.auto_pausedfor degradation alerts, and watch for Meta’sWHATSAPP_TEMPLATE_PAUSED/WHATSAPP_ACCOUNT_QUALITY_LOWsend errors (documented on Troubleshooting: WhatsApp templates). - API. GET /whatsapp/health returns the same per-WABA health object, and GET /whatsapp/quality returns the quality card (cached briefly per connection to stay inside Meta’s per-WABA call budget).
Recovery loop
Recovery is deliberately manual-after-guard: Orbit stops the bleeding, you fix the cause.- Pause the template (or let auto-pause catch it on RED).
- Fix the content. Edit the template for what Meta flagged — a misleading first line, an offer recipients did not expect, an opt-out that is hard to find — then re-submit for review.
- Wait. Meta re-scores as recipients react to the new traffic; an approved replacement typically restores the score in days. Account-level quality recovers the same way — sustained good recipient behaviour lifts the messaging tier back over time.
See also
- Template lifecycle and approval semantics — statuses, carrier approval, and where template quality fits in the lifecycle
- Troubleshooting: WhatsApp templates — the RED /
WHATSAPP_TEMPLATE_PAUSEDfix workflow - Webhooks: events —
whatsapp.template.auto_pausedpayload and delivery semantics - Sender warming and reputation — the cross-channel reputation model this quality model parallels