Messenger Platform reference

Facebook Messenger Send API error codes, explained one by one

41documented codes
8categories
2026-08-20last verified

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

CodeTitleHTTPType
190Invalid OAuth access token
Access Token Error: Invalid OAuth access token.
401Configuration

Permissions, app review & thread control

CodeTitleHTTPType
230Requires pages_messaging permission
(#230) Requires pages_messaging permission to manage the object
403Configuration
200pages_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…
403Configuration
10Application does not have permission for this action
Application does not have permission for this action
403Configuration
200pages_messaging_phone_number not reviewed
Cannot message users who are not admins, developers or testers of the app until pages_messaging_phone_number permissi…
403Configuration
2018247Insufficient permission to access user profile
Insufficient permission to access user profile.
403Configuration
2018300Another app is controlling this thread
Message failed to send because another app is controlling this thread now.
400Configuration
2018321Thread 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…
400Retryable

Messaging window & tags

CodeTitleHTTPType
10Message sent outside of allowed window
This message is sent outside of allowed window. Learn more about the new policy here.
400Permanent - do not retry
10Outside window - News Messaging permission required
This message is sent outside of allowed window. You need News Messaging permission to be able to do it.
400Permanent - do not retry
10Message sent outside the 24-hour window
This message is sent outside of allowed window.
400Permanent - do not retry

Recipient & delivery

CodeTitleHTTPType
551This person isn't available right now
This person isn't available right now.
400Permanent - do not retry
100No matching user found
No matching user found
400Permanent - do not retry
200Message Not Sent: person isn't available
Message Not Sent: This person isn't available right now.
400Permanent - do not retry
551User Block Error
User Block Error: This person isn't receiving messages from you right now.
400Permanent - do not retry
10This person cannot receive messages
This Person Cannot Receive Messages: This person isn't receiving messages from you right now.
400Permanent - do not retry
10User stopped notification messages for this topic
(#10) This user has currently stopped notification messages for this topic
400Permanent - do not retry
2018218No profile available for this user
No profile available for this user.
400Permanent - do not retry
9000001Message deleted by the user or the business
This Message has been deleted by the user or the business.
400Permanent - do not retry

Rate limits & throttling

CodeTitleHTTPType
613Calls to this API have exceeded the rate limit
Calls to this API have exceeded the rate limit
400Retryable
4Application request limit reached
Rate Limit error: Application request limit reached.
400Retryable
4Minimum delay between marketing notifications
Marketing Messages - There has to be a minimum delay between 2 notifications for the given notification
400Retryable
17User request limit reached
Indicates that the User whose token is being used in the request has reached their rate limit.
400Retryable
32Page request limit reached
(#32) Page request limit reached
400Retryable
613API calls exceeded the rate limit
Calls to this api have exceeded the rate limit.
400Retryable
80006Messenger business use case rate limit400Retryable

Media & attachments

CodeTitleHTTPType
100Failed 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…
400Configuration
100Upload attachment failure
Upload attachment failure. A common way to trigger this error is that the provided media type does not match type of …
400Configuration
100Invalid attachment ID or not owned
Possible invalid ID or you do not own the attachment.
400Configuration
100Attachment size exceeds allowable limit
Attachment size exceeds allowable limit
400Configuration
100Video 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…
400Configuration

Policy & restrictions

CodeTitleHTTPType
368Temporarily blocked for policies violations
Temporarily blocked for policies violations
403Policy / account
2022Commerce messaging temporarily disabled
The ability to send commerce messages has been temporarily disabled. This is the result of a feature limit placed aft…
400Policy / account
613Message tag abuse warning
Warning! You are engaging in behavior that may be considered bothersome or abusive by users. You must significantly d…
400Policy / account
10Page restricted from opt-in requests
Application does not have permission for this action
403Policy / account

Generic & request errors

CodeTitleHTTPType
1200Temporary send message failure
Temporary send message failure. Please try again later.
500Retryable
1An unknown error occurred
An unknown error occurred.
500Retryable
2Unexpected error - retry later
An unexpected error has occurred. Please retry your request later.
500Retryable
100Invalid parameter
Bad Parameter Error: Invalid FBID.
400Configuration
100Unsupported 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…
400Configuration
100Incorrect App ID
Incorrect App ID.
400Configuration

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.