# conversation.control_changed

Control of a conversation moved under Meta's handover protocol (`messaging_handovers`).

### Owner values

`control.owner` is `ai_agent` (Meta Business Agent, WhatsApp), `app` (you) or `other` (a WhatsApp partner app, or a receiver such as Page Inbox on Messenger and Instagram).

### Control fields

`control.previousOwner` is `null` when no handover touched the thread. `control.ownerAppId` is the new owner's Meta app id when named (Page Inbox is `263902037430900`). `control.metadata` is the transferring app's note, verbatim.

### WhatsApp

Meta Business Agent took the conversation, handed it to you, or another partner app took it. While `ai_agent` owns it, its replies arrive on `message.sent` with `source: "meta_business_agent"`.

### Taking control on WhatsApp

Sending any message through the inbox takes control back. To hand it to the agent without sending, call `POST /v1/inbox/conversations/{conversationId}/thread-control` with `action: "release"`.

### Facebook and Instagram

Another app on the Page passed the thread to you, or took or received it. While you are not the owner, sends answer `409` `not_thread_owner`.

### Taking control on Facebook and Instagram

Call `POST /v1/inbox/conversations/{conversationId}/thread-control` with `action: "take"`, or `"request"` to ask the owner to pass it. Both answer 400 `platform_not_supported` on Instagram Login connections.

### When it does not fire

A repeat report of the same owner fires nothing. A `request` changes nothing until the owner passes the thread.

### Standby messages

While another app owns the conversation, inbound messages arrive on `message.received` with `metadata.standby: true`.




**Payload for `conversation.control_changed`:**

- **test** `boolean`: Always true when present: only a sample sent by POST /v1/webhooks/test with an event carries it. Real deliveries never do.
- **id** (required) `string`: Stable webhook event ID: the dedupe key, also sent as the X-Zernio-Event-Id header and identical on every retry and redelivery. It identifies the event only, never an account or other resource.
- **profiles**: `WebhookProfiles` - See schema definition
- **event** (required) `string`: No description - one of: conversation.control_changed
- **conversation** (required): `InboxWebhookConversationDetail` - See schema definition
- **account** (required): `InboxWebhookAccount` - See schema definition
- **control** (required) `object`: 
  - **owner** (required) `string`: Who answers now. ai_agent: Meta Business Agent (WhatsApp); app: you; other: another app (a WhatsApp partner, or a Messenger / Instagram receiver such as Page Inbox). - one of: app, ai_agent, other
  - **previousOwner** (required) `string,null`: Owner before this change, null when no handover had touched the thread. - one of: app, ai_agent, other, 
  - **ownerAppId** `string`: Meta app id of the new owner, when Meta names it (Facebook and Instagram handovers, WhatsApp partner apps). Page Inbox is 263902037430900.
  - **metadata** `string`: Free-form string the transferring app attached to the handover, forwarded verbatim.
- **changedAt** (required) `string` (date-time): No description
- **timestamp** (required) `string` (date-time): UTC time at which Zernio generated this event (set once when the event payload is built, before delivery is queued). Retries and redeliveries keep the original value, so it reflects the event, not the delivery attempt.