The standby field gives an app a passive view of conversations it does not own under Meta's Conversation Routing. When several responders share one business phone number, the thread owner receives normal messages webhooks and every other responder with standby visibility receives standby webhooks instead.
What standby Reports
The value.standby object contains exactly one of three arrays:
| Sub-field | What happened |
|---|---|
standby.messages | A WhatsApp user sent a message on a thread you do not own. Uses the same schema as normal inbound messages, for every message type. |
standby.message_echoes | Another responder, such as Meta Business Agent, sent a message to the user. |
standby.statuses | A message sent by another responder was sent, delivered, or read. |
You do not receive standby webhooks for threads you own (those arrive as messages), for messages your own app sends, or when the conditions below are not met.
Do not reply to a user because of a standby webhook. Only the thread owner may send Service messages; a non-owner's send is rejected. The exception is the designated escalation partner, whose Service message takes the thread implicitly. See messaging_handovers.
Prerequisites
Standby is off by default. An app receives it only when both are true:
- the app is subscribed to the
standbyfield in its App Dashboard, and - the business granted the app standby visibility in its routing configuration in Meta Business Suite.
The app cannot grant visibility to itself, and it can decline standby by not subscribing.
Payload Shape
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "<WABA_ID>",
"changes": [
{
"field": "standby",
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "<BUSINESS_PHONE_NUMBER>",
"phone_number_id": "<PHONE_NUMBER_ID>"
},
"standby": {
"contacts": [
{ "profile": { "name": "Test User" }, "wa_id": "<WA_ID>" }
],
"messages": [
{
"from": "<WA_ID>",
"id": "<WAMID>",
"timestamp": "<UNIX_SECONDS>",
"type": "text",
"text": { "body": "Test standby message" }
}
]
}
}
}
]
}
]
}
Message Echoes
Each standby.message_echoes[] item has the message id, its send timestamp, and message: the exact request body the other responder passed to POST /<PHONE_NUMBER_ID>/messages, not the rendered content.
| Field | Present for | Notes |
|---|---|---|
message | Every echo | The send-time request body, including to, type, and context. |
template | Template messages | The full unhydrated template definition, with placeholders. message.template holds the values substituted at send time. |
flow | Flow messages | The flow definition as returned by GET /<FLOW_ID>. |
Status Receipts
Each standby.statuses[] item has id, status (sent, delivered, or read), timestamp, recipient_id, conversation (id and origin.type), and pricing (billable, pricing_model, category, type).
If you receive standby events for a conversation, a control_passed notification for it carries no conversation_context summary, because you already have the history.
Dualhook Handling
Dualhook subscription: not subscribed. Dualhook's Meta app does not subscribe to standby, so a Dualhook connection never delivers it to you, even though Meta allows Webhook Override for this field. Dualhook has no Conversation Routing features.
Meta Business Agent moves other integrations here. Once Meta Business Agent is enabled on a number, it becomes the primary responder for new conversations, and previous primary responders receive the conversations they don't own on standby instead of messages. On a Dualhook connection, those conversations stop reaching your endpoint. Don't enable it on a number your own agent answers through Dualhook; see AI agents on WhatsApp Business.
To observe threads as a standby responder, subscribe your own Meta app to standby and have the business grant that app standby visibility in Meta Business Suite. Standby payloads contain message content, so they belong on your own infrastructure.
Implementation Notes
- Store standby context so your app can continue the conversation if it later receives a pass.
- Index stored events by BSUID where you have one; it stays stable if the user's phone number changes.
- Deduplicate on the message
id, since Meta can redeliver. - Use status receipts to measure delivery and read rates for other responders' messages.