Reference directory

Messaging platform error codes, explained one by one

You have a code in a log - 131047, 409 Conflict, 50013 - and the official reference gives you one line. These pages give you the rest: what the platform is actually saying, what is not wrong, the causes behind almost every occurrence, and a fix you can work through in order.

325documented codes
8platforms
100%linked to official docs

Most looked-up codes

The codes that bring people to this directory most often. If yours is here, you are one click from the fix; if not, the full per-platform tables are linked under each column.

Same problem, three names

Bots that run on more than one channel hit the same failure under three different codes. This table maps the situations we see most to each platform's name for them - every cell links the full code page.

SituationWhatsApp Cloud APITelegram Bot APIDiscord API
Rate limited
130429Rate limit hit
429Too Many Requests: retry after N
429HTTP 429 Too Many Requests (rate limited)
Recipient unreachable
131026Message Undeliverable
403Forbidden: bot was blocked by the user
50007Cannot send messages to this user
No permission to act
200-299API Permission
400Bad Request: CHAT_WRITE_FORBIDDEN
50013Missing permissions
Bad or expired auth
190Access token has expired
401Unauthorized
40001Unauthorized
Malformed request
100Invalid parameter
400Bad Request: can't parse entities
50035Invalid form body
Messaging window closed
131047Re-engagement message
n/an/a
Webhook misconfiguredn/a
400Bad Request: bad webhook: Webhook can be set up only on ports 80, 88, 443 or 8443
n/a
Resource does not exist
132001Template does not exist
400Bad Request: chat not found
10003Unknown channel
10008Unknown message

The gaps are real, not omissions: only WhatsApp has a 24-hour customer service window, so only it has a code for messages sent outside one; Telegram validates webhook URLs at registration time and returns an error, while WhatsApp and Discord accept the configuration and fail silently later.

Triage in 60 seconds

  1. Read the code, not the message. Error strings get rewritten by SDKs and wrappers; the numeric code survives every layer. Pull the exact code out of the raw response body - for WhatsApp that is error.code (and often a subcode), for Telegram the HTTP status plus the description string, for Discord the JSON code field or a gateway close code.
  2. Check the severity before you touch anything. Every code page here carries one of four labels. Retryable means backoff will fix it and code changes will not. Permanent means retrying is wasted effort - fix the request. Configuration and policy mean the problem lives in a dashboard, not in your code.
  3. Ask where the error arrived. A synchronous error in the send response means your request was rejected; an error that arrives later in a webhook status update means the platform accepted the request and delivery failed afterwards. The same code can appear in both places with different fixes. If the webhook itself is silent, that is its own problem - start with the webhook debugging guide.
  4. Then open the platform directory. Every documented code, one table each: WhatsApp Cloud API, Telegram Bot API, Discord API. Use your browser's find on the code and click through for causes and the ordered fix.

How to use this directory

Start from the code, not the symptom. Platforms return the same code for one precise condition, so the code is the most reliable thing in your log. Each platform directory lists every code in a single table you can search with your browser's find; each code page opens with the literal message, then a severity label (permanent, retryable, configuration, policy) that tells you whether retrying can ever help. If you are starting from a symptom instead - the bot is silent, messages are not delivered - the troubleshooting guides below walk from symptom to cause and link back into this directory.

Troubleshooting guides (symptom → cause)

Frequently asked questions

What is this directory?

One page per documented error code for the messaging platforms a chatbot connects to: WhatsApp Cloud API, the Telegram Bot API and the Discord API. Each page quotes the literal error the platform returns, explains what it actually means, lists the causes we see most, and gives an ordered fix. It is written for the moment you have the code in a log and nothing else.

Where do these codes come from?

Every entry is taken from the platform's own developer documentation - Meta for Developers, core.telegram.org and discord.com/developers - and each page links the official source. We do not invent codes or strings, and each directory carries a 'last verified' date so you can see when the facts were re-checked.

Why does the same symptom show up under different codes?

Because platforms report the same underlying problem at different layers. A WhatsApp message rejected for the 24-hour window is 131047 in the send response, but the webhook status update carries its own error object. Telegram reports conflicts as HTTP 409 with a description string, while Discord uses a numeric JSON code or a gateway close code. The directory is organised by platform and then by code so you can look up exactly what you are holding.

What if my code is not listed?

Check the official reference linked at the top of each platform directory first. If a code is documented there and missing here, it is an omission we want to fix - the contact page is the quickest way to tell us. Codes that platforms return but do not document are deliberately left out rather than guessed at.

Do I need to handle these codes if I use Conferbot?

Mostly no. When a channel is connected through Conferbot, token refresh, webhook verification, retries and rate limiting are handled by the platform, and failures surface as readable status in the dashboard rather than as raw codes. The directory is still useful when you are debugging your own integration, an existing bot, or deciding whether a problem is on your side or the platform's.

Are these the same as HTTP status codes?

No, and mixing them up wastes debugging time. HTTP status codes describe the request (401, 429, 500); platform error codes describe the domain problem inside the response body. WhatsApp returns HTTP 400 for dozens of different numeric codes, Telegram reuses HTTP 400 for most failures and disambiguates with a description string, and Discord pairs an HTTP status with its own JSON error code. Always log the body, not just the status line.

How do I log errors so they're debuggable?

Log the entire error object the platform returns, not your wrapper's summary. Capture the numeric code, any subcode or description string, the message or request ID, the recipient identifier and a timestamp, then key your logs on the code so you can count occurrences per code per hour. Most 'random failures' turn out to be one specific code spiking - visible in ten seconds if the code was logged, invisible if only 'send failed' was.

Which errors should alert a human?

Page a human for anything marked permanent or policy in this directory: expired or revoked tokens (WhatsApp 190, Telegram 401, Discord 40001), account restrictions and policy blocks, and webhook configuration failures - none of these self-heal. Rate limits and 5xx server errors should not page anyone; they are retryable and belong behind automatic backoff, with an alert only if the retry queue keeps growing.

Skip the error codes entirely

Connect WhatsApp, Telegram or Discord through Conferbot and let the platform handle tokens, webhooks and retries - failures show as readable status, not raw codes.