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.
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.
WhatsApp Cloud API
- 131047Re-engagement message
- 131026Message Undeliverable
- 130429Rate limit hit
- 131048Spam rate limit hit
- 132001Template does not exist
- 131051Unsupported message type
- 131049Meta chose not to deliver.
- 190Access token has expired
- 100Invalid parameter
- 133010Phone number Not Registered
Telegram Bot API
- 409Conflict: terminated by other getUpdates request
- 409Conflict: can't use getUpdates method while webhook is ac…
- 401Unauthorized
- 403Forbidden: bot was blocked by the user
- 429Too Many Requests: retry after N
- 400Bad Request: chat not found
- 400Bad Request: can't parse entities
- 400Bad Request: message is not modified
- 400Bad Request: bad webhook: Webhook can be set up only on p…
- 400Bad Request: group chat was upgraded to a supergroup chat
Discord API
- 50013Missing permissions
- 50001Missing access
- 50007Cannot send messages to this user
- 4014Disallowed intent(s)
- 10062Unknown interaction
- 40060Interaction has already been acknowledged
- 429HTTP 429 Too Many Requests (rate limited)
- 50035Invalid form body
- 10008Unknown message
- 30001Maximum number of guilds reached (100)
Messenger Platform
- 551This person isn't available right now
- 10Message sent outside of allowed window
- 100No matching user found
- 10Outside window - News Messaging permission required
- 613Calls to this API have exceeded the rate limit
- 190Invalid OAuth access token
- 230Requires pages_messaging permission
- 1200Temporary send message failure
- 200pages_messaging not reviewed - app not live
- 368Temporarily blocked for policies violations
Instagram Messaging API
- 10Message sent outside of allowed window
- 190Session has expired
- 190Session invalidated - password changed or session revoked
- 10Application does not have permission for this action
- 100Invalid parameter
- 4Application request limit reached
- 32Page request limit reached
- 200Permission error - app not live for this recipient
- 200Account owner has disabled access to direct messages
- 613Calls to this API have exceeded the rate limit
Slack API
- channel_not_foundValue passed for channel was invalid
- not_in_channelBot is not a member of the channel
- invalid_authAuthentication cannot be validated
- missing_scopeToken lacks a required OAuth scope
- token_revokedToken has been revoked
- msg_too_longMessage text is too long
- invalid_blocksBlocks are not valid
- ratelimitedRequest was rate limited (HTTP 429)
- app_rate_limitedEvents API deliveries rate limited
- messages_tab_disabledThe app's Messages tab is disabled
LINE Messaging API
- 400Invalid reply token
- 401Authentication failed
- 429Too Many Requests (rate limit)
- 429You have reached your monthly limit.
- 403Access to this API is not available for your account
- 400The request body has X error(s)
- 404Not found (profile: user blocked or not a friend)
- 413Payload Too Large (request over 2MB)
Microsoft Teams Bot Framework
- 401 Unauthorized (invalid app ID / password)Invalid Microsoft App ID or password
- 401 Unauthorized (expired client secret)
- 403 BotDisabledByAdmin
- 403 ConversationBlockedByUser
- 429 Throttled
- 404 ConversationNotFound
- 403 MessageWritesBlocked
- 401 Unauthorized (tenant mismatch)Single-tenant vs multi-tenant mismatch
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.
| Situation | WhatsApp Cloud API | Telegram Bot API | Discord 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/a | n/a |
| Webhook misconfigured | n/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
- 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 thedescriptionstring, for Discord the JSONcodefield or a gateway close code. - 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.
- 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.
- 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)
- WhatsApp Cloud API error codes guideThe 20 you will actually see, by scenario
- Telegram bot not responding409 conflicts, privacy mode, silent 403s
- Discord bot not respondingIntents, 4014, 50013, slash command delays
- Webhook not firingVerification, signatures, retries - every platform
- WhatsApp template rejectedThe 132xxx family in practice
- Platform limits & quotasRate limits, tiers, size caps in one place
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.