Messenger error 2018300: Another app is controlling this thread
Last verified against Meta for Developers - Messenger Platform error codes
Message failed to send because another app is controlling this thread now.What error 2018300 means
Code 2018300 is the handover protocol speaking: "Message failed to send because another app is controlling this thread now." Messenger allows multiple apps on one Page, a bot platform, a live-chat tool, an ads integration, and the handover protocol arbitrates which one owns each conversation at any moment. Exactly one app is the thread owner and may send; everyone else is a secondary receiver who can observe (via standby webhooks) but not reply. Your send failed because your app is not the current owner of this thread.
The single most common real-world trigger has nothing to do with a second bot vendor: it is the Page's own human team replying from the Meta Business Suite inbox. The inbox participates in the protocol, and depending on the Page's app roles, a human reply can move thread control, after which the bot's sends fail with 2018300 and the bot appears "randomly broken" for exactly the conversations a human touched. The companion error 2018321 is the same ownership idea enforced for Messenger's built-in automation (the FAQ flow) rather than another app.
The protocol has an API surface for exactly this situation: pass_thread_control, take_thread_control (primary receiver only) and request_thread_control, plus webhook events announcing every transfer. A bot that records those events knows at all times whether it owns a thread, and never discovers ownership by failing to send.
What it looks like
{
"error": {
"message": "(#2018300) Message failed to send because another app is controlling this thread now.",
"type": "OAuthException",
"code": 2018300,
"fbtrace_id": "BLBz/WZt8dN"
}
}Why it happens
- A human agent replied from the Page inbox, moving thread control away from the bot's app.
- Two integrations (bot platform + live-chat tool) installed without configuring primary/secondary receiver roles.
- The bot passed control (e.g. to an agent tool) and never received it back.
- Ownership transfers announced via pass_thread_control webhooks that the app ignores.
- An app demoted from primary receiver in the Page's Messenger settings after a re-configuration.
How to fix Messenger error 2018300
- 1Check the Page's app roles under Settings -> Messenger -> Handover protocol (primary vs secondary receiver) and set them deliberately.
- 2If your app should own the thread and is the primary receiver, call take_thread_control; otherwise call request_thread_control and handle the response.
- 3Subscribe to and persist the handover webhook events (pass_thread_control, take_thread_control) so ownership state is always known.
- 4Design the human-handoff loop: pass control to the inbox or agent app on escalation, and reclaim it when the conversation is resolved.
- 5While not owner, queue or drop bot replies instead of erroring; standby-channel events tell you what the user is saying meanwhile.
How to stop it recurring
Decide the ownership topology before adding a second integration: one primary receiver, explicit pass/return flows, and standby processing for the non-owner. Test the human-then-bot sequence explicitly, reply from the Business Suite inbox, then confirm the bot recovers control, because that is the path users exercise daily. The handover-induced silent-bot symptom is covered in the Messenger troubleshooting guide, and the same protocol exists on Instagram (details here).
Official reference: Meta for Developers - Messenger Platform error codes. See all Messenger error codes or the Messenger limits and quotas.
Related codes
- 2018321: Thread controlled by Messenger automated flowThe chat is currently controlled by Messenger while the user is in an…
- 10: Application does not have permission for this actionApplication does not have permission for this action
- 200: pages_messaging not reviewed - app not livePermission Error: Cannot message users who are not admins, developers or…
Error 2018300 - quick answers
What does Messenger error 2018300 mean?
Code 2018300 is the handover protocol speaking: "Message failed to send because another app is controlling this thread now." Messenger allows multiple apps on one Page, a bot platform, a live-chat tool, an ads integration, and the handover protocol arbitrates which one owns each conversation at any moment.
How do I fix Messenger error 2018300?
1. Check the Page's app roles under Settings -> Messenger -> Handover protocol (primary vs secondary receiver) and set them deliberately. 2. If your app should own the thread and is the primary receiver, call take_thread_control; otherwise call request_thread_control and handle the response. 3. Subscribe to and persist the handover webhook events (pass_thread_control, take_thread_control) so ownership state is always known. 4. Design the human-handoff loop: pass control to…
Stop debugging Messenger by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.