Messenger error 9000001: Message deleted by the user or the business
Last verified against Meta for Developers - Messenger Platform error codes
This Message has been deleted by the user or the business.What error 9000001 means
Code 9000001 fires when your API call references a message that no longer exists: "This Message has been deleted by the user or the business." Meta's error-codes table lists it with the type OAuthException, consistent with the rest of the catalogue even though nothing about authentication is involved. Messenger lets both sides remove messages, users can unsend, businesses can delete, and once a message is gone, any operation keyed on its mid fails with this code.
The typical triggers are reactive features. Replying to a specific message with the reply_to parameter fails if the quoted message was unsent in the meantime. Reading or acting on a message referenced by a stored mid, reaction handling, moderation tooling, conversation sync, breaks the same way. There is an inherent race: between the webhook that gave you the mid and your API call, the user may have unsent the message, so this error is a normal, expected event at some rate in any bot that references message IDs.
Handling is therefore about graceful skips, not fixes. The message cannot be restored, and nothing about your app is misconfigured. Send the reply without reply_to, skip the sync row, drop the moderation action. If you receive the message_deletions-style webhook events for the Page, processing them keeps your stored conversation state from referencing ghosts in the first place.
What it looks like
{
"error": {
"message": "(#9000001) This Message has been deleted by the user or the business.",
"type": "OAuthException",
"code": 9000001,
"fbtrace_id": "BLBz/WZt8dN"
}
}Why it happens
- The user unsent a message your bot was about to reply to with reply_to.
- Stored message IDs replayed after the underlying message was deleted by either side.
- Conversation-sync or moderation jobs acting on stale mids.
- The business's own agents deleting messages that automation still references.
- Race conditions between webhook receipt and API action on fast unsends.
How to fix Messenger error 9000001
- 1Catch 9000001 on reply_to sends and resend the same content as a plain message without the reference.
- 2Invalidate the stored mid and any state keyed on it.
- 3Process message-deletion webhook events to keep local conversation copies consistent.
- 4Rate-limit retries to zero: the message will not come back.
- 5Log occurrences with conversation context to spot tooling that leans too hard on message references.
How to stop it recurring
Treat message IDs as hints, not foreign keys: every feature that references a mid needs a defined behavior for "referent gone," decided at design time. Keep quoted-reply features optional in your message composer so the fallback is automatic. Deletion semantics and related webhook behavior are summarized in the Messenger limits reference, and reactive-feature pitfalls in the troubleshooting guide.
Official reference: Meta for Developers - Messenger Platform error codes. See all Messenger error codes or the Messenger limits and quotas.
Related codes
Error 9000001 - quick answers
What does Messenger error 9000001 mean?
Code 9000001 fires when your API call references a message that no longer exists: "This Message has been deleted by the user or the business." Meta's error-codes table lists it with the type OAuthException , consistent with the rest of the catalogue even though nothing about authentication is involved.
How do I fix Messenger error 9000001?
1. Catch 9000001 on reply_to sends and resend the same content as a plain message without the reference. 2. Invalidate the stored mid and any state keyed on it. 3. Process message-deletion webhook events to keep local conversation copies consistent. 4. Rate-limit retries to zero: the message will not come back. 5. Log occurrences with conversation context to spot tooling that leans too hard on message references.
Should I retry after error 9000001?
No. Retrying the same request produces the same error; the condition has to be fixed first. Treat it as a permanent failure for that message and surface it, rather than looping.
Stop debugging Messenger by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.