TL;DR — Executive Summary
A practical developer guide to troubleshooting the most frequent WhatsApp Business Cloud API errors, including error 100, 131030, and rate limit issues.
Integrating your digital channels with the official WhatsApp Business Cloud API is a powerful mechanism for securing, engaging, and communicating with customers at scale. However, for software engineers and systems architects, implementing a resilient error-handling policy is critical for keeping delivery rates high and protecting core system queues. When requests fail, the Meta API returns clear JSON payloads outlining the nature of the validation block. Identifying what these codes mean under the hood will save your team dozens of development hours and keep your messaging endpoints active.
In this guide, we provide a complete technical breakdown of common WhatsApp API error codes, group them into operational categories, and demonstrate how to write a resilient error-handling wrapper in JavaScript with backoff logic.
---
1. Meta API Error Response Structure
Whenever a request to the WhatsApp Business API fails, Meta's servers return a standard HTTP status code (such as 400 Bad Request, 401 Unauthorized, or 429 Too Many Requests) along with a structured JSON error response.
Here is the standard JSON payload structure of a Meta API error:
json { "error": { "message": "(#131030) Recipient phone number not in active account allowed list.", "type": "OAuthException", "code": 131030, "error_data": { "messaging_product": "whatsapp", "details": "Recipient phone number is not verified. Please register the number in your Meta developer account." }, "fbtrace_id": "AP_8aBcdEfGhIjKlMnOp123" } }
When building error interceptors, your application should parse three primary variables: - code: The unique numerical code identifying the specific validation error. - message: A human-readable description of why the transaction was blocked. - fbtrace_id: A unique request tracing key generated by Meta, vital when opening engineering support tickets on Meta Developer Forums.
---
2. Common WhatsApp API Error Code Dictionary
We have compiled a directory of the most common WhatsApp Business API errors below, complete with details on why they trigger and how to fix them:
| Error Code | Error Type / Message | Root Cause | Technical Resolution |
|---|---|---|---|
| :--- | :--- | :--- | :--- |
| 100 | Invalid Parameter | Missing required field, malformed payload, or incorrect value type in the JSON request. | Verify the recipient's phone number is in E.164 format. Ensure all variable parameter values match the templates configuration. |
| 190 | Invalid OAuth Access Token | The System User Access Token has expired, been revoked, or lacks permission for the requested account. | Generate a permanent System User Token in your Meta Business Portfolio settings and update your environment variables. |
| 131009 | Parameter Value is Invalid | The specified template name does not exist in your catalog, or the chosen language code is not approved. | Check your Meta template manager to ensure the template name is spelled correctly (case-sensitive) and approved. |
| 131021 | Sender/Receiver Pair Blocked | The customer has blocked your business number or flagged your templates as spam on their mobile device. | Terminate all automated messaging queues to this recipient immediately. Attempt contact only via out-of-band channels with explicit opt-in. |
| 131030 | Recipient Not Authorized | Sandbox testing numbers constraint. You are trying to send to a number not registered in the Meta Developer Console. | Navigate to your Facebook Developer Console, add the target number to your verified test recipient list, or verify your business. |
| 130429 | Rate Limit Exceeded | Your outbound message volume has exceeded the allowed Messages Per Second (MPS) for your phone line. | Implement an asynchronous queue manager (e.g., BullMQ or RabbitMQ) to rate-limit outbound HTTP POST request blocks. |
| 131047 | More than 24h since last message | Attempted to send a free-form session message, but the 24-hour customer service window is closed. | Send an approved utility or authentication template message to re-open the 24-hour service session window. |
| 132001 | Template is Paused | The template has been paused by Meta because of low quality ratings or high customer spam reports. | Redesign the template copy to make it more relevant and request a manual review from Meta after the penalty period ends. |
---
3. Demystifying Rate Limits & Messaging Tiers
One of the most frequent blocks encountered during bulk campaigns is Error 130429 (Rate Limit Exceeded). Meta manages throttling across two separate layers:
A. API Request Throttling (Throughput limits)
The Cloud API enforces maximum request limits on how many messages you can send per second (typically 80 MPS for verified accounts utilizing high-performance lines). If your application fires 1,000 parallel requests without spacing them, Meta will block the excess and return 429 errors.
B. Messaging Limits (Daily recipient limits)
The Messaging Limit determines the maximum number of unique users your business can contact in a rolling 24-hour window. Accounts are grouped into four main tiers: - Tier 1: Allows sending messages to up to 1,000 unique customers per day. - Tier 2: Allows sending messages to up to 10,000 unique customers per day. - Tier 3: Allows sending messages to up to 100.000 unique customers per day. - Tier 4: Unlimited daily messaging.
To automatically advance to the next tier, your daily broadcast volume must reach 50% of your current tier's limit within a 7-day period while maintaining a high phone number quality rating (i.e. minimal spam reports and template blocks).
Read about secure API auth protocols on WhatsApp Auth API and see the complete WhatsApp services layout at WhatsApp Business API.
---
4. Resilient Error Handling with Node.js
To prevent message loss, systems must implement automatic retries with Exponential Backoff and fallback mechanisms.
Here is a complete Node.js example showing how to intercept rate limit error codes and retry them with an increasing delay, as well as falling back to secondary channels when necessary:
javascript const axios = require('axios');
async function sendWhatsAppMessageWithRetry(payload, retries = 3, delay = 1000) { const url = 'https://graph.facebook.com/v19.0/your-phone-number-id/messages'; const token = process.env.WHATSAPP_TOKEN;
try { const response = await axios.post(url, payload, { headers: { 'Authorization': Bearer ${token}, 'Content-Type': 'application/json' } }); return response.data; } catch (error) { if (error.response) { const { code, message } = error.response.data.error; console.error(WhatsApp API Error (Code ${code}): ${message});
// Handle Rate Limit (130429) or Temporary Server Error (131000) if ((code === 130429 || code === 131000) && retries > 0) { console.warn(Attempt failed. Retrying in ${delay}ms... (Retries left: ${retries})); await new Promise(resolve => setTimeout(resolve, delay)); return sendWhatsAppMessageWithRetry(payload, retries - 1, delay * 2); // Exponential backoff }
// Handle 24-hour Window Closed (131047) - Route to SMS failover if (code === 131047) { console.warn('24h session window closed. Routing fallback to SMS OTP...'); return triggerSmsFallback(payload.to, 'Your account verification is pending. Please verify.'); } } throw new Error('Critical WhatsApp delivery failure.'); } }
async function triggerSmsFallback(phoneNumber, message) { // Mock SMS routing API via official BSP console.log(Fallback SMS sent to ${phoneNumber}: ${message}); return { status: 'sent_via_sms' }; }
---
5. Conclusion
Establishing a robust error management architecture is what separates unstable integrations from reliable, high-performance communication systems. Always register webhooks to capture real-time delivery status updates (sent, delivered, read, failed), matching the fail event payloads with your database profiles. If you prefer to offload webhook scaling, queue management, and Tier-1 carrier failovers to a managed platform, connect with our support team or set up a sandbox test account in our console.
Camila Rodrigues
CTO, Bulk SMS
Senior specialist in mobile telecommunications infrastructure, high-performance enterprise messaging, and LGPD compliance for smart communication platforms and APIs in Brazil.