WhatsApp API Error Codes: Complete Guide for 2026

Every WhatsApp API error is trying to tell you something. This guide decodes every major error code  what it actually means, why it fires, and exactly how to fix it, so you stop guessing and start shipping.

whatsapp-api-error-codesWhat WhatsApp API Errors Actually Are

Here’s the thing most devs don’t realise early on: errors on the WhatsApp Cloud API aren’t bugs they’re designed behaviour. Every time your backend sends a request to Meta’s Graph API, WhatsApp runs a full checklist behind the scenes:

If anything in that chain fails, you get an error. Your job isn’t to prevent errors entirely it’s to handle them correctly.

Sync vs. Async: Some errors come back instantly (synchronous) in the API response. Others arrive later via webhook — even when the initial API call returned 200 OK. Production systems must monitor both. Don’t just watch your API responses.

How to Read an Error Response

Before diving into specific codes, here’s what a real WhatsApp error looks like:

json
{
“error”: {
 “message”: “(#130429) Rate limit hit”,
“type”: “OAuthException”,
  “code”: 130429,
 “error_data”: {
  “messaging_product”: “whatsapp”,
 “details”: “Cloud API message throughput has been reached.”
},
 “fbtrace_id”: “Az8or2yhqkZfEZ-_4Qn_Bam”
 }
}

The rules for reading this:

Don’t rely on error titles. Meta’s documentation explicitly warns that code titles (like “Rate limit hit”) will eventually be deprecated. Always key your logic to the numeric code value.

1. Auth & Permission Errors

These happen before a single message is sent. Until resolved, nothing goes through. Auth errors mean your application can’t properly identify itself to the WhatsApp Cloud API either the token is expired, revoked, or the app simply doesn’t have the right scope.

Code  HTTP What’s Happening Most Likely Cause Fix It
0  401 AuthException Expired or revoked access token Generate a fresh access token
190  401 Access token expired Token lifetime exceeded Refresh your token; set up auto-rotation
10  403 Permission denied Missing scope or eligibility issue Verify scopes in the Access Token Debugger
200–299  403 API permission issue Endpoint access not enabled Enable required permissions in App Dashboard

Pro tip: If you’re getting Code 190 regularly, set up token rotation before expiry rather than reacting to failures in production. Use a System User token for long-running production deployments they don’t expire the same way user tokens do.

2. Integrity & Policy Enforcement Errors

Account-level restrictions. These aren’t quick fixes they require compliance review. These fire when something at the account level is wrong usually a policy violation or geographic restriction. They’re rare but high-impact. If you see these in production, it’s not a code bug; it’s a compliance issue.

Code     HTTP      What’s Happening Most Likely Cause Fix It
368    403 Temporarily blocked Policy violation flagged Review Meta policy enforcement and appeal
130497    403 Country restricted Sending to a region where messaging is not allowed Verify allowed countries in your WABA settings
131031   403 Account locked Policy issue or incorrect 2-step PIN Use the Health Status API; contact support if unresolved

3. Rate Limit & Throttling Errors

The most common errors in high-volume production. Expect these build for them. Rate limits are Meta’s way of maintaining messaging quality across the platform. Every business account has throughput ceilings. In high-volume campaigns or busy OTP windows, these errors will happen. The question is whether your system recovers gracefully or fails loudly.

If you’re running WhatsApp alongside SMS for OTP fallback, understanding how throughput works across both channels matters — our guide on the WhatsApp Business API in India covers WABA account structure, quality ratings, and how throughput limits work in the Indian market in detail.

Code HTTP What’s Happening Cause Fix It
4 400 Too many API calls App-level call rate exceeded Throttle API frequency; use a queue
80007 400 WABA rate limit Business account messaging limit hit Slow your send rate; contact BSP to raise limits
130429 400 Rate limit hit Cloud API throughput ceiling exceeded Implement exponential backoff
131048 400 Spam rate limit High block rate / low template quality Improve template relevance; reduce send frequency
131056 400 Pair rate limit Too many messages sent to one user Space out messages to same recipient
133016 400 Registration limit Too many registration attempts Wait for the block to lift; don’t retry rapidly

For 130429 specifically — implement exponential backoff. Start with a 1-second delay, then 2s, 4s, 8s, etc. Never hammer the API repeatedly after this error. Your throughput tier improves automatically as your quality rating grows.

4. Template Creation Errors (2388xxx Series)

These fire at template submission before any message is sent. They’re formatting and policy issues. If your template gets rejected before approval, you’ll see a 2388xxx error. These have nothing to do with sending — they’re about how you’ve written the template. Most are structural or length issues.

Code What’s Happening Cause Fix It
2388040 Character limit exceeded A field is too long Reduce content length in the offending field
2388047 Header format incorrect Invalid header syntax Review header format rules; rewrite header
2388072 Body format incorrect Formatting violation in body Adjust formatting — avoid unsupported markdown
2388073 Footer format incorrect Footer structure issue Review footer guidelines; rewrite footer
2388293 Too many variables Parameter count exceeds ratio limit Reduce number of {{N}} placeholders
2388299 Variable at start/end of field Template starts or ends with a variable Reposition — surround variables with fixed text

Code 2388299 is sneaky. Meta doesn’t allow a template body to start or end with a variable like {{1}}. Always wrap variables with static text. Wrong: {{1}}, your OTP is 1234. Right: Hello {{1}}, your OTP is 1234. For a deeper look at how to write templates that pass Meta review and keep quality ratings high, check out our WhatsApp Message Templates guide for India.

5. Template Sending Errors (132xxx Series)

The most common production errors. Master these and you’ll solve 80% of message delivery failures. These fire when you try to send an approved template and something doesn’t match up wrong parameter count, wrong language code, paused template, or policy violation in the content.

Code HTTP What’s Happening Cause Fix It
132000 400 Param count mismatch Wrong number of variables passed Match your parameters to the template exactly
132001 404 Template not found Wrong template name or language code Double-check template name and language in the Manager
132005 400 Hydrated text too long Dynamic variable values make the text too long Shorten the values you’re injecting into the template
132007 400 Policy violated Disallowed content in the template Revise template to comply with Meta’s commerce policy
132012 400 Param format mismatch Wrong parameter type Align parameter types with the approved template spec
132015 400 Template paused Low quality rating — too many blocks/reports Improve template quality; use warm-up strategy; resubmit
132016 400 Template disabled Repeated violations; permanent pause Create a new, compliant template — this one is done
132068 400 Flow blocked WhatsApp Flow configuration issue Audit your flow config and fix the blocked step
132069 400 Flow throttled Too many flow messages sent in a short window Reduce flow send frequency; add delays

Error 132015 is the big one. A paused template means Meta saw an unusually high block/report rate during template pacing. This isn’t just a code fix it’s a signal that your audience doesn’t want this message. Fix the template relevance first, then think about resubmitting. Warm up new campaigns slowly: start with 1,000–5,000 sends, wait 24 hours, check reactions, then scale. Understanding the strategy behind warm-up, quality ratings, and keeping templates in the green zone is covered in our WhatsApp Broadcast Messaging guide for India.

6. Conversation Window Errors

These fire when you break the 24-hour messaging rule — one of WhatsApp’s core policy pillars. WhatsApp’s customer service window works like this: once a user messages your business, you have 24 hours to send free-form replies. After that window closes, you can only re-engage with a pre-approved template. If you try to send a free-form message outside the window, you’ll hit these errors.

Code HTTP What’s Happening Cause Fix It
131047 400 24-hour window closed Outside the conversation window; tried sending free-form Switch to a pre-approved template message instead
131049 400 Not delivered by Meta Marketing message limits or pacing decision by Meta Wait 24 hours; review your quality and pacing signals
131050 400 User opted out Recipient blocked or opted out of your marketing messages Do not retry; remove this user from future campaigns

Error 131050 is a permanent stop signal. When a user opts out of marketing, you must stop sending to that number. Retrying will harm your quality rating and may escalate to a broader account restriction.

7. Media Errors

Media failures are usually infrastructure issues, not code bugs. When you send images, videos, or documents through the API, Meta needs to be able to fetch that media from your server. If the URL is private, the file is too large, or the MIME type is wrong, the download fails.

Code HTTP What’s Happening Cause Fix It
131052 400 Media download error Meta can’t fetch media from your URL Ensure the media URL is publicly accessible; check server capacity
131053 400 Media upload error Unsupported file type or MIME mismatch Validate file type and size (images: max 5MB; video: max 16MB)

Quick checklist for media errors: Is the URL publicly accessible (no auth required)? Is the MIME type set correctly in your server headers? Is the file under Meta’s size limit? If all yes and errors persist, try batching smaller send volumes — server timeouts during large campaigns can trigger 131052.

8. Registration & Migration Errors

These usually appear during onboarding or number migration — not in steady-state operation.

Code What’s Happening Cause Fix It
133010 Phone number not registered Number hasn’t been onboarded to the Cloud API Complete the registration flow for this number
133005 PIN mismatch Incorrect 2-step verification PIN Reset your 2-step PIN through the Business Manager
133008 / 133009 Too many PIN attempts Rapid, repeated PIN retries Wait for the cooldown period before trying again
2388103 Migration failed WABA account mismatch during migration Ensure source and destination WABA accounts are aligned

9. WABA & Account Errors

Billing and maintenance issues. Rare, but they stop all messaging when they hit.

Code HTTP What’s Happening Cause Fix It
131042 400 Payment eligibility issue Billing is inactive or credit line not set up Add a valid payment method and set up a credit line in Meta Business Manager
131057 500 Account in maintenance mode Throughput upgrade in progress Retry after the maintenance window; typically resolves automatically

10. Other Core Errors

General request validation and delivery failures that don’t fit a specific category.

Code HTTP What’s Happening Cause Fix It
100 400 Invalid parameter Misspelled or malformed request field Validate your request against the API schema
131008 400 Required parameter missing A mandatory field is absent from the request Add the missing parameter; check API docs for required fields
131021 400 Recipient is the sender Sending to the same number you’re sending from Change the recipient phone number
131026 400 Message undeliverable Not a WhatsApp number, or outdated app version Verify the number; ask user to update their WhatsApp app
131000 500 Unknown error Internal Meta failure Retry after a delay; escalate with fbtrace_id if it persists

About 131026 (Message Undeliverable): Meta intentionally doesn’t always disclose why a message is undeliverable — for privacy reasons. Possible causes include: the recipient has blocked your business, the number isn’t on WhatsApp, the user is in a restricted country, or they haven’t accepted Meta’s updated ToS. Don’t retry these indefinitely.

11. Marketing Messages API Errors

Stricter rules apply here — template category and eligibility matter more than anywhere else.

Code HTTP What’s Happening Cause Fix It
131055 400 Method not allowed Using a non-marketing template on the marketing endpoint Switch to a template categorised as Marketing
134100 400 Only marketing supported Wrong template category for this endpoint Update template category to Marketing in the Manager
134101 400 Template syncing Newly created template hasn’t fully synced yet Wait 10–15 minutes after creation before using it
134102 500 Template unavailable Sync or eligibility issue Check your WABA onboarding status and re-verify template
132018 400 Template validation error Parameter issue specific to the Marketing Messages API Fix the parameter structure in your request payload
1752041 400 Duplicate onboarding User was already invited to this flow No action needed — this is informational, not a failure

Production Debugging Checklist

When something breaks in production, work through it in this exact order:

  1. Check HTTP status code first — 400 means your request is wrong. 401/403 is auth/permissions. 500 is Meta’s side. Start here to narrow the search.
  2. Read the numeric error code — This is your real identifier. Not the message title — the number. Build all your retry/handling logic around this.
  3. Read error_data.details — The human-readable detail string usually gives you exactly what went wrong at the request level.
  4. Confirm conversation window status — Is the 24-hour window open? If not, you need to switch to a template — not debug the free-form message.
  5. Confirm template approval status — Go to the WhatsApp Manager. Is the template still Active? Or Paused/Disabled?
  6. Check current rate limits — Are you mid-campaign? Rate limit errors during bulk sends are common and usually self-resolving with backoff.
  7. Verify billing is active — Especially for new accounts or after plan changes — billing issues silently block all messages.
  8. Retry only when safe — Don’t retry auth errors, opt-out errors, or policy violations. Only retry rate limits and 5xx server errors — with backoff.

Best Practices to Reduce Errors in Production

Build logic around code, not title

Meta has said clearly that error titles will be deprecated. Your application should map numeric codes to actions — never parse the message string.

Implement exponential backoff for rate limits

Whenever you hit code 130429, 4, or 131056 — back off. Start with 1 second, double on each retry, and cap at 60 seconds. Hammering the API after a rate limit hit only makes things worse.

Always validate phone numbers in E.164 format

Every number you send to should be in full international format — like +919876543210. No spaces, no leading zeros. A badly formatted number is often the cause of silent delivery failures (code 131026).

Confirm template approval before every send

Before a bulk campaign, pull your template list via API and confirm the status is APPROVED. Templates can get paused by Meta at any time based on quality signals. Sending to a paused template wastes quota and may further hurt your quality rating.

Monitor webhooks continuously, not just API responses

Async errors arrive via webhook. If your system only checks API response codes, you’re blind to a whole category of failures. Subscribe to the messages webhook field and process every error block you receive.

Log fbtrace_id for every response

Every API response includes an fbtrace_id. Log it. When something unusual happens and you need to escalate to Meta or your BSP, this ID is the only way support can trace the specific request on their side.

Warm up new templates before scaling

Don’t launch a new marketing template to 100,000 recipients on day one. Meta’s pacing system evaluates quality in the first few thousand sends. Start with 1,000–5,000, wait 24 hours, check block/read rates, then scale. This is how you avoid code 132015. For OTP-specific delivery best practices and how to build a proper fallback flow, the WhatsApp OTP API Integration guide for India walks through retry logic and multi-channel fallback in detail.

Final Word

WhatsApp API errors aren’t the enemy they’re feedback. Each one is telling you something specific: your token expired, your template got paused, a user opted out, your send rate is too high. The businesses that build stable WhatsApp integrations aren’t the ones that never see errors. They’re the ones who know exactly what every error means and have a documented response for each one.

If you want to understand the full cost and infrastructure behind running WhatsApp at scale in India  pricing tiers, conversation categories, and how to keep your API spend optimised our WhatsApp Business API pricing guide for India breaks it all down. And if you’re looking for a WhatsApp Business API partner in India that handles routing, quality monitoring, and compliance for you,  MessageBot’s WhatsApp Business API is built exactly for that.

Related Articles