> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

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

> Diagnose Meta error 131042 — a payment-method problem on your WABA that hard-stops every send with an HTTP 409. Update billing in Meta Business Manager, verify account health, and re-send.

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

<Note>
  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.
</Note>

## Symptom map

| Symptom                                                                    | Most likely cause                                                                                                | What to do                                                                                  |
| -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| **Every send returns `WHATSAPP_BILLING_ISSUE` (HTTP 409)**                 | The card on the WABA was declined or expired, no payment method is attached, or a Pay-as-you-go balance is empty | Fix billing in Meta Business Manager (below), then re-send                                  |
| **Billing fixed minutes ago, sends still 409**                             | Meta needs a few minutes to confirm the new payment method                                                       | Wait \~5 minutes, verify health (below), then re-send                                       |
| **Dashboard banner says "WhatsApp sends blocked — payment issue on Meta"** | Same failure — Orbit renders the catalog presentation for code 131042                                            | Click the banner's **Fix billing on Meta** action; it deep-links to the WABA's payment page |

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](/troubleshooting/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:

```bash theme={null}
curl -X POST "https://api.orbit.devotel.io/api/v1/messages" \
  -H "X-API-Key: $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+15551234567",
    "channel": "whatsapp",
    "type": "template",
    "template": { "name": "order_shipped", "language": "en_US" }
  }'
```

On a billing hold the response is an HTTP **409** with the standard error
envelope — the same shape every Devotel error returns:

```json theme={null}
{
  "error": {
    "code": "WHATSAPP_BILLING_ISSUE",
    "message": "Meta rejected the send because of a payment-method problem on your WABA. Update billing in Meta Business Manager.",
    "status": 409,
    "details": {
      "whatsappErrorCode": 131042
    }
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-09-12T08:41:07Z",
    "docs_url": "https://docs.orbit.devotel.io/errors/WHATSAPP_BILLING_ISSUE"
  }
}
```

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

```json theme={null}
{
  "error": {
    "message": "(#131042) Business eligibility payment issue",
    "type": "OAuthException",
    "code": 131042
  }
}
```

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:

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/brand-identity/status" \
  -H "X-API-Key: $ORBIT_API_KEY"
```

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](mailto: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).

## Related codes

* [Troubleshoot the WhatsApp connection](/troubleshooting/whatsapp-connection) —
  `WHATSAPP_ACCOUNT_LOCKED` (Meta 131031) policy locks,
  `WHATSAPP_CONNECTION_INVALID` token faults, and `WHATSAPP_TOKEN_EXPIRED`.
* [Troubleshoot a WhatsApp template](/troubleshooting/whatsapp-template) —
  pending, rejected, paused, and reclassified templates once billing is
  healthy again.
* [Error codes](/reference/error-codes) — the full `WHATSAPP_*` catalog
  with HTTP statuses, including every Meta 13xxxx code Orbit maps.
