Messenger Platform · error code

Messenger error 2018300: Another app is controlling this thread

ConfigurationHTTP 400Permissions, app review & thread control

Last verified against Meta for Developers - Messenger Platform error codes

What Messenger returns
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

  1. 1Check the Page's app roles under Settings -> Messenger -> Handover protocol (primary vs secondary receiver) and set them deliberately.
  2. 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.
  3. 3Subscribe to and persist the handover webhook events (pass_thread_control, take_thread_control) so ownership state is always known.
  4. 4Design the human-handoff loop: pass control to the inbox or agent app on escalation, and reclaim it when the conversation is resolved.
  5. 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

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.