Facebook Messenger Send API error codes, explained one by one
Last verified against Meta for Developers - Messenger Platform error codes
The Messenger Platform reports failures synchronously: when a Send API call fails, the error comes back in the HTTP response body of that call, wrapped in an error object. Unlike the WhatsApp Cloud API, there is no separate failed-status webhook to reconcile; if the API returned a message_id, the platform accepted the message, and if it returned an error object, nothing was sent. That makes Messenger errors easier to catch but also easier to lose: a bot that swallows non-200 responses inside a try/catch has no second chance to see the failure. If your bot is silent and you are not even reaching the Send API, the problem is usually inbound, so verify webhook delivery before debugging error codes.
Inside the error object, code is the integer to branch on and error_subcode narrows it down. Messenger reuses a handful of codes, 10, 100, 200, for very different problems, so the subcode is often the real diagnosis: code 10 with subcode 2018278 is the 24-hour window, while code 10 alone is a missing permission. message usually embeds the code as (#551), type is almost always OAuthException even when the token is fine, and fbtrace_id is the trace identifier Meta support needs, so log the entire object.
The largest cause family is the standard messaging window: bots may send freely only within 24 hours of the person's last message, and the tag escape hatches shrank in April 2026 when Meta retired the CONFIRMED_EVENT_UPDATE, ACCOUNT_UPDATE and POST_PURCHASE_UPDATE tags; requests that still carry them now fail with code 100. The window rules and every other cap are tabulated in the Messenger limits reference, and the symptom-first walkthrough is the Messenger bot troubleshooting guide.
How to read a Messenger error
A failed Send API call returns a non-200 HTTP status with an error object in the body:
{
"error": {
"message": "(#10) This message is sent outside of allowed window. Learn more about the new policy here: https://developers.facebook.com/docs/messenger-platform/policy-overview",
"type": "OAuthException",
"code": 10,
"error_subcode": 2018278,
"fbtrace_id": "BLBz/WZt8dN"
}
}Branch on code first, then on error_subcode when one is present; the same code can mean different things under different subcodes. A successful send instead returns the recipient's Page-scoped ID and a message ID:
{
"recipient_id": "PAGE-SCOPED-ID",
"message_id": "AG5Hz2U..."
}All 41 codes
Jump to: Access tokens & authentication (1) · Permissions, app review & thread control (7) · Messaging window & tags (3) · Recipient & delivery (8) · Rate limits & throttling (7) · Media & attachments (5) · Policy & restrictions (4) · Generic & request errors (6)
Access tokens & authentication
| Code | Title |
|---|---|
190 | Invalid OAuth access token Access Token Error: Invalid OAuth access token. |
Permissions, app review & thread control
| Code | Title |
|---|---|
230 | Requires pages_messaging permission (#230) Requires pages_messaging permission to manage the object |
200 | pages_messaging not reviewed - app not live Permission Error: Cannot message users who are not admins, developers or testers of the app until pages_messaging per… |
10 | Application does not have permission for this action Application does not have permission for this action |
200 | pages_messaging_phone_number not reviewed Cannot message users who are not admins, developers or testers of the app until pages_messaging_phone_number permissi… |
2018247 | Insufficient permission to access user profile Insufficient permission to access user profile. |
2018300 | Another app is controlling this thread Message failed to send because another app is controlling this thread now. |
2018321 | Thread controlled by Messenger automated flow The chat is currently controlled by Messenger while the user is in an automated question and answer flow. Please wait… |
Messaging window & tags
| Code | Title |
|---|---|
10 | Message sent outside of allowed window This message is sent outside of allowed window. Learn more about the new policy here. |
10 | Outside window - News Messaging permission required This message is sent outside of allowed window. You need News Messaging permission to be able to do it. |
10 | Message sent outside the 24-hour window This message is sent outside of allowed window. |
Recipient & delivery
| Code | Title |
|---|---|
551 | This person isn't available right now This person isn't available right now. |
100 | No matching user found No matching user found |
200 | Message Not Sent: person isn't available Message Not Sent: This person isn't available right now. |
551 | User Block Error User Block Error: This person isn't receiving messages from you right now. |
10 | This person cannot receive messages This Person Cannot Receive Messages: This person isn't receiving messages from you right now. |
10 | User stopped notification messages for this topic (#10) This user has currently stopped notification messages for this topic |
2018218 | No profile available for this user No profile available for this user. |
9000001 | Message deleted by the user or the business This Message has been deleted by the user or the business. |
Rate limits & throttling
| Code | Title |
|---|---|
613 | Calls to this API have exceeded the rate limit Calls to this API have exceeded the rate limit |
4 | Application request limit reached Rate Limit error: Application request limit reached. |
4 | Minimum delay between marketing notifications Marketing Messages - There has to be a minimum delay between 2 notifications for the given notification |
17 | User request limit reached Indicates that the User whose token is being used in the request has reached their rate limit. |
32 | Page request limit reached (#32) Page request limit reached |
613 | API calls exceeded the rate limit Calls to this api have exceeded the rate limit. |
80006 | Messenger business use case rate limit |
Media & attachments
| Code | Title |
|---|---|
100 | Failed to fetch the file from the URL Failed to fetch the file from the url. Check that the URL is valid, with a valid SSL certificate, valid file size, an… |
100 | Upload attachment failure Upload attachment failure. A common way to trigger this error is that the provided media type does not match type of … |
100 | Invalid attachment ID or not owned Possible invalid ID or you do not own the attachment. |
100 | Attachment size exceeds allowable limit Attachment size exceeds allowable limit |
100 | Video upload timed out or corrupted Video upload timed out or video is corrupted. Note that if the video can't be fetched within 75 seconds, it will time… |
Policy & restrictions
| Code | Title |
|---|---|
368 | Temporarily blocked for policies violations Temporarily blocked for policies violations |
2022 | Commerce messaging temporarily disabled The ability to send commerce messages has been temporarily disabled. This is the result of a feature limit placed aft… |
613 | Message tag abuse warning Warning! You are engaging in behavior that may be considered bothersome or abusive by users. You must significantly d… |
10 | Page restricted from opt-in requests Application does not have permission for this action |
Generic & request errors
| Code | Title |
|---|---|
1200 | Temporary send message failure Temporary send message failure. Please try again later. |
1 | An unknown error occurred An unknown error occurred. |
2 | Unexpected error - retry later An unexpected error has occurred. Please retry your request later. |
100 | Invalid parameter Bad Parameter Error: Invalid FBID. |
100 | Unsupported get request - object missing or unreadable Unsupported get request. Object with ID * does not exist, cannot be loaded due to missing permissions, or does not su… |
100 | Incorrect App ID Incorrect App ID. |
Messenger guides and tools
Other platforms
Frequently asked questions
Where do Messenger Send API errors appear?
In the HTTP response body of the Send API call that failed, as an error object with code, error_subcode, message, type and fbtrace_id. Messenger does not report send failures through a separate webhook the way WhatsApp does, so if the call returned a message_id the platform accepted it. Log the whole error object on every non-200 response; a bot that discards it has no other record of the failure.
Why does my bot only work for admins and developers?
Your app is in Development mode, or it is Live with only Standard Access to pages_messaging. Either way the Send API returns code 200: it can only message people with a role on the app until pages_messaging passes App Review and the app is Live with Advanced Access. Request the permission in the App Dashboard and submit a screencast of the bot flow for review.
What is the Messenger 24-hour messaging window?
Once a person messages your Page, clicks Get Started, or comments on your post, you have 24 hours to reply with anything, including promotional content. After that, sends fail with code 10 and subcodes such as 2018278 or 2534022. Outside the window your options are the HUMAN_AGENT tag (7 days, App Review required), one-time notifications, sponsored messages, or waiting for the person to message again.
Which message tags still work in 2026?
Effective April 27, 2026, API requests using CONFIRMED_EVENT_UPDATE, ACCOUNT_UPDATE or POST_PURCHASE_UPDATE receive error code 100. HUMAN_AGENT remains: it lets a human respond within 7 days of the person's last message, but only after the app is approved for the Human Agent permission through App Review. CUSTOMER_FEEDBACK remains documented for the Customer Feedback Template within 7 days. Marketing content is never allowed under any tag.
What does (#551) This person isn't available right now mean?
The person has blocked your Page or messages from it, deactivated or deleted their Facebook account, or restricted who can message them. It is not a bug and there is no workaround or way to check in advance. Treat 551, and its neighbours 200 subcode 1545041 and 10 subcode 2018108, as a permanent opt-out for that PSID: mark the contact unreachable and stop retrying.
Why do I get (#100) No matching user found for a valid user?
Messenger recipient IDs are Page-scoped (PSIDs): the same person has a different ID for every Page and for every app-Page pair. IDs saved from another Page, another app, or from Facebook Login (app-scoped IDs) will not resolve, and the API answers code 100 subcode 2018001. Only use PSIDs from your own webhook events for the same Page, and re-key contacts after migrating apps.
Should I retry Messenger API errors?
Retry 1200 (temporary send failure), 1 and 2 (platform trouble) with exponential backoff. Back off and slow down on the throttling codes 4, 17, 32, 613 and 80006, since more calls extend the block. Never retry permanent errors: 551 and 100/2018001 (unreachable or wrong recipient), 10 window errors before the person replies again, or 190 until the token is replaced.
What are the Messenger rate limits?
The documented ceiling is 200 API calls per 24 hours multiplied by the Page's engaged users, with the Send API further capped at 300 calls per second per Page for text and 10 per second for audio or video. Crossing them returns codes 4, 17, 32, 613 or 80006. The full table, including profile and menu API limits, is in the Messenger limits reference at /limits/messenger.
What is error code 190 on Messenger?
Invalid OAuth access token: the Page access token has expired, was invalidated by a password change or permission revoke, or was pasted incorrectly. The bot's webhook usually still fires, but every reply fails until you generate a new token. Inspect the token in Meta's Access Token Debugger, generate a long-lived Page token, and update the credential your server sends.
What is fbtrace_id and should I log it?
fbtrace_id is an internal trace identifier attached to every Graph API error. Meta engineers use it to find the server-side logs for your exact failed request, and Developer Support will ask for it, so persist it with the code, subcode and timestamp. It expires after a short period, which is one more reason to file bug reports promptly with a recent trace attached.
Run your Messenger bot without babysitting error codes
Conferbot manages the connection, tokens, webhooks and retries, and shows failures as readable status.