Skip to main content

Troubleshooting: WhatsApp sends blocked by a WABA billing failure (WHATSAPP_BILLING_ISSUE)

Every WhatsApp send against your WABA fails with HTTP 409 and the code WHATSAPP_BILLING_ISSUE (Meta error 131042 — “Business eligibility payment issue”). Meta refuses every send — template and free-form alike — because the payment method attached to the WABA is missing, declined, or expired, or a Pay-as-you-go balance has run dry. The stop is on Meta’s billing layer, not on your Orbit connection or your templates.
Billing holds live on Meta’s side, not Orbit’s — Orbit relays the refusal and returns a deterministic 409. Devotel never sees your card; the fix happens entirely in Meta Business Manager. Nothing here changes your Devotel wallet or credits.

Symptom map

Three look-alike codes demand different fixes — check which one your logs actually carry:
  • WHATSAPP_ACCOUNT_LOCKED (Meta 131031) — a policy lock. Every send fails, but re-authentication and billing updates both do nothing; only a Meta Business Support appeal lifts it. See the account-lock section of Troubleshoot the WhatsApp connection.
  • WHATSAPP_CONNECTION_INVALID — a dead or revoked access token. Fix is re-running Embedded Sign-up, not a billing update.
  • WHATSAPP_BILLING_ISSUE — the WABA itself is healthy and the token is fine; Meta refuses sends only until billing is resolved. That is this page.

Read the failure

The send API refuses deterministically — the call fails before Meta would queue anything:
On a billing hold the response is an HTTP 409 with the standard error envelope — the same shape every Devotel error returns:
details.whatsappErrorCode: 131042 confirms the refusal came straight from Meta’s billing eligibility check. When Orbit can attach its in-app guidance, details also carries a presentation block (fixSteps plus a deep-link to the WABA’s payment page) — the dashboard banner renders from that block directly. Meta’s own Cloud API rejection, which Orbit relays, looks like this:
Either shape pinning 131042 means the same thing: billing, nothing else.

Fix — update billing in Meta Business Manager

  1. Open the WABA’s payment page. In Meta Business Manager go to Billing & payments → Payment settings (or, from the Orbit dashboard banner, click Fix billing on Meta — it deep-links to the offending WABA when Orbit knows which WABA failed).
  2. Repair the payment method. If the card was declined or expired, update it or add a new one. If the WABA bills Pay-as-you-go instead of a card, top the balance back up above zero.
  3. Wait for Meta to confirm. Meta re-checks eligibility within a few minutes of the update; during that window sends still return 409. There is no re-connect step at Orbit — the stored token and WABA row are untouched by a billing fix.
  4. Re-send. Once the hold clears, sends pass immediately — queued campaign sends are not auto-replayed, so re-send the failed batch.

Verify before re-sending

Check the consolidated health surface — it rolls up the WhatsApp verification posture with every other trust channel:
Look at the WhatsApp entry in the response: a healthy entry plus the next meta.request_id from a successful re-send is the confirmation the hold lifted. One check, one re-send — no polling loop.

What not to do

  • Do not retry-loop the send. The refusal is deterministic — the same request returns the same 409 until the billing state changes at Meta. A retry loop burns your API rate budget and marks every attempt as a failed send. Fix billing first, then re-send once.
  • Do not re-run Embedded Sign-up. Re-authentication replaces tokens; it cannot touch Meta’s billing eligibility. The connect layer is healthy here and re-running it changes nothing.
  • Do not look for a payment method in Orbit. Devotel never holds the WABA’s card — paid WhatsApp conversation charges settle between you and Meta directly. The Orbit wallet and spend caps are a separate ledger and stay unaffected.
  • Do not disconnect and re-connect the WABA. Re-binding a billing- held WABA preserves the hold; sends fail identically until Meta accepts the payment update.

Escalation payload

If you updated billing at Meta and sends still return 409 after a few minutes, email whatsapp-support@devotel.io with:
  1. Your WABA id (Meta Business Manager → WhatsApp Manager, or the waba_id on a template record).
  2. The most recent failing meta.request_id from a re-send attempt after the billing update.
  3. Which billing model the WABA uses (card on file or Pay-as-you-go).
  • Troubleshoot the WhatsApp connectionWHATSAPP_ACCOUNT_LOCKED (Meta 131031) policy locks, WHATSAPP_CONNECTION_INVALID token faults, and WHATSAPP_TOKEN_EXPIRED.
  • Troubleshoot a WhatsApp template — pending, rejected, paused, and reclassified templates once billing is healthy again.
  • Error codes — the full WHATSAPP_* catalog with HTTP statuses, including every Meta 13xxxx code Orbit maps.