Contents

Messaging

Event catalogue

The 152 event types a webhook endpoint can receive. Every event shares one envelope (id, type, apiVersion, occurredAt, sequence, livemode, accountSid, data); data holds the resource listed below. This list is generated from the same schemas the platform validates events against.

Subscribe with exact types or wildcards such as message.*. How to receive them: webhooks.

Generated event catalogue descriptions, resource labels, fields and types are shown in their original contract language.

Messages

Every step of an outbound message, and every inbound message.

message.accepted

ShipMsg accepted the message and queued it.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"queued"yes

message.scheduled

The message is waiting for its sendAt time.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"scheduled"yes

message.deferred

Sending was postponed on purpose (pacing, a recipient cap or quiet hours); queuedReason and readyAt say why and until when.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstringyes
readyAtstring (date-time)yes
status"queued"yes

message.meta_accepted

WhatsApp accepted the request to send the message.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"sending"yes

message.held_for_quality

WhatsApp is holding the message while it assesses its quality.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"sending"yes

message.sent

WhatsApp sent the message.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"sent"yes

message.delivered

The message reached the customer's phone.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"delivered"yes

message.read

The customer opened the message.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"read"yes

message.played

The customer played the voice message.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"played"yes

message.warning

WhatsApp reported a non-fatal problem with the message.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"queued" | "scheduled" | "sending" | "sent" | "delivered" | "read" | "played" | "failed" | "canceled" | "expired" | "unknown"yes

message.deleted

The customer deleted the message.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound" | "inbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"queued" | "scheduled" | "sending" | "sent" | "delivered" | "read" | "played" | "failed" | "canceled" | "expired" | "unknown"yes

message.failed

The message will not be delivered; data.error says why.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobjectyes
queuedReasonstring | null
readyAtstring (date-time) | null
status"failed"yes

message.expired

The message's validity period ended before it could be sent.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobjectyes
queuedReasonstring | null
readyAtstring (date-time) | null
status"expired"yes

message.canceled

The message was canceled before it was sent.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"canceled"yes

message.recipient_opted_out

The recipient opted out of this kind of message, so it was not sent.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"failed"yes

message.unknown

WhatsApp has not reported what happened to the message.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"unknown"yes

message.duplicate_detected

A second send of the same message was detected and not sent again.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
duplicateOfAttemptinteger (1–)
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"queued" | "scheduled" | "sending" | "sent" | "delivered" | "read" | "played" | "failed" | "canceled" | "expired" | "unknown"yes

message.redacted

The message's content was erased (retention or a deletion request).

data is a Message resource, with:

FieldTypeAlways present
direction"outbound" | "inbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"queued" | "scheduled" | "sending" | "sent" | "delivered" | "read" | "played" | "failed" | "canceled" | "expired" | "unknown"yes

message.received

A customer sent you a message.

data is a Message resource, with:

FieldTypeAlways present
direction"inbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"delivered"yes

message.echoed

A message was sent from the WhatsApp Business app on a shared (coexistence) number.

data is a Message resource, with:

FieldTypeAlways present
direction"outbound"yes
errorobject
queuedReasonstring | null
readyAtstring (date-time) | null
status"sent"yes

message.inbound

An inbound message was added to an inbox conversation.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

message.outbound

An outbound message was added to an inbox conversation.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

message.batch.completed

A batch send finished.

Fields in data (2)
FieldTypeAlways present
object"message_batch"yes
sidstringyes

Conversations

Inbox conversations: routing, assignment, service windows and surveys.

conversation.opened

conversation opened.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.routed

conversation routed.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)yes
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.assigned

conversation assigned.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstringyes
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.released

conversation released.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstringyes
reasonstringyes
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.closed

conversation closed.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstringyes
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstringyes
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.reopened

conversation reopened.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstringyes
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstringyes
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.snoozed

conversation snoozed.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstringyes
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstringyes
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)yes
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.unsnoozed

conversation unsnoozed.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstringyes
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticbooleanyes
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.collaborator_added

conversation collaborator added.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstringyes
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstringyes
collaboratorRole"COLLABORATOR" | "FOLLOWER"yes
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.collaborator_removed

conversation collaborator removed.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstringyes
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstringyes
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.bot_handoff_requested

conversation bot handoff requested.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)yes
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)yes
handoffSidstring (BH… SID)yes
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)yes

conversation.bot_handoff_unavailable

conversation bot handoff unavailable.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)yes
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackbooleanyes
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstringyes
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.bot_handoff_accepted

conversation bot handoff accepted.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)yes
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"yes
tagstring
webhookEndpointSidstring (WH… SID)

conversation.bot_handoff_completed

conversation bot handoff completed.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)yes
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"yes
tagstring
webhookEndpointSidstring (WH… SID)

conversation.bot_handoff_failed

conversation bot handoff failed.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)yes
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"yes
tagstring
webhookEndpointSidstring (WH… SID)

conversation.bot_handoff_timed_out

conversation bot handoff timed out.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)yes
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"yes
tagstring
webhookEndpointSidstring (WH… SID)

conversation.bot_handoff_taken_over

conversation bot handoff taken over.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)yes
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"yes
tagstring
webhookEndpointSidstring (WH… SID)

conversation.note_created

conversation note created.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)yes
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.tag_added

conversation tag added.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstringyes
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstringyes
webhookEndpointSidstring (WH… SID)

conversation.tag_removed

conversation tag removed.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstringyes
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstringyes
webhookEndpointSidstring (WH… SID)

conversation.sla_warning

conversation sla warning.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"yes
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)yes
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.sla_breached

conversation sla breached.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"yes
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)yes
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.window_opened

conversation window opened.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.window_expiring

conversation window expiring.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)yes
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.window_expired

conversation window expired.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)yes
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.csat_dispatched

conversation csat dispatched.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)yes
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstring
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

conversation.csat_skipped

conversation csat skipped.

data is a Conversation resource, with:

FieldTypeAlways present
actingPrincipalRefstring
applicationSidstring (BA… SID)
assigneePrincipalRefstring
automaticboolean
clock"first_response" | "next_response" | "resolution"
collaboratorPrincipalRefstring
collaboratorRole"COLLABORATOR" | "FOLLOWER"
dueAtstring (date-time)
expiresAtstring (date-time)
handoffSidstring (BH… SID)
humanFallbackboolean
noteSidstring (NT… SID)
priorAssigneePrincipalRefstring
reasonstringyes
routingRuleIdstring | null (uuid)
snoozedUntilstring (date-time)
state"open" | "idle" | "closed" | "archived"
tagstring
webhookEndpointSidstring (WH… SID)

api key

api_key.created

api key created.

data is a API key resource, with:

FieldTypeAlways present
status"active"yes

api_key.disabled

api key disabled.

data is a API key resource, with:

FieldTypeAlways present
status"disabled"yes

api_key.revoked

api key revoked.

data is a API key resource, with:

FieldTypeAlways present
status"revoked"yes

api_key.rotated

api key rotated.

data is a API key resource, with:

FieldTypeAlways present
status"active"yes

api_key.inactive_flagged

api key inactive flagged.

data is a API key resource, with:

FieldTypeAlways present
status"active"yes

user

user.invited

user invited.

data is a User resource, with:

FieldTypeAlways present
status"invited"yes

user.updated

user updated.

data is a User resource, with:

FieldTypeAlways present
status"invited" | "active" | "locked" | "disabled"yes

user.disabled

user disabled.

data is a User resource, with:

FieldTypeAlways present
status"disabled"yes

account

account.suspended

account suspended.

data is a Account resource, with:

FieldTypeAlways present
status"suspended"yes

account.reinstated

account reinstated.

data is a Account resource, with:

FieldTypeAlways present
status"active"yes

Contacts

Contact records, identifiers, opt-outs and merges.

contact.created

contact created.

Fields in data (2)
FieldTypeAlways present
object"contact"yes
sidstringyes

contact.updated

contact updated.

Fields in data (2)
FieldTypeAlways present
object"contact"yes
sidstringyes

contact.identifier_added

contact identifier added.

Fields in data (2)
FieldTypeAlways present
object"contact"yes
sidstringyes

contact.user_id_updated

contact user id updated.

Fields in data (2)
FieldTypeAlways present
object"contact"yes
sidstringyes

contact.opted_out

contact opted out.

Fields in data (2)
FieldTypeAlways present
object"contact"yes
sidstringyes

contact.opted_in

contact opted in.

Fields in data (2)
FieldTypeAlways present
object"contact"yes
sidstringyes

contact.conflict

contact conflict.

Fields in data (8)
FieldTypeAlways present
conflictIdstring (uuid)yes
contactIdstring (uuid)yes
identifierType"PHONE_E164" | "BSUID" | "USERNAME"yes
object"contact"yes
owningContactIdstring (uuid)yes
scopeRefstring | nullyes
sidstringyes
sourcestringyes

contact.merged

contact merged.

Fields in data (10)
FieldTypeAlways present
contactIdstring (uuid)yes
mergeIdstring (uuid)yes
mergedContactIdstring (uuid)yes
mergedContactSidstring (CT… SID)yes
movedIdentifiersinteger (0–)yes
object"contact"yes
reasonstringyes
reversibleForDaysinteger (0–)yes
sidstringyes
survivorContactSidstring (CT… SID)yes

contact.unmerged

contact unmerged.

Fields in data (5)
FieldTypeAlways present
contactIdstring (uuid)yes
mergeIdstring (uuid)yes
object"contact"yes
sidstringyes
survivorContactIdstring (uuid)yes

Opt-in and opt-out records.

consent.recorded

consent recorded.

Fields in data (2)
FieldTypeAlways present
object"consent"yes
sidstringyes

consent.withdrawn

consent withdrawn.

Fields in data (2)
FieldTypeAlways present
object"consent"yes
sidstringyes

Suppression

Numbers blocked from some or all messages.

suppression.added

suppression added.

Fields in data (2)
FieldTypeAlways present
object"suppression"yes
sidstringyes

suppression.removed

suppression removed.

Fields in data (2)
FieldTypeAlways present
object"suppression"yes
sidstringyes

Senders

Your WhatsApp numbers: connection, quality, limits and restrictions.

sender.created

sender created.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.connected

sender connected.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.status_changed

sender status changed.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.health_changed

sender health changed.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.quality_changed

sender quality changed.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.throughput_changed

sender throughput changed.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.limit_changed

sender limit changed.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.restricted

sender restricted.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.disconnected

sender disconnected.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.reconnected

sender reconnected.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.name_status_changed

sender name status changed.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.migrated

sender migrated.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

sender.ownership_changed

sender ownership changed.

Fields in data (12)
FieldTypeAlways present
activeRegionstringyes
actorstring
epochIssuedAtstring (date-time)yes
executionEpochinteger (0–)yes
fromAccountSidstring (AC… SID)
homeRegionstringyes
object"sender"yes
operationSidstring (OP… SID)
senderSidstring (WA… SID)
sidstringyes
toAccountSidstring (AC… SID)
wabaIdstring

WhatsApp Business Accounts

Connection and review state of the accounts that own your numbers.

waba.connected

waba connected.

Fields in data (2)
FieldTypeAlways present
object"waba"yes
sidstringyes

waba.disconnected

waba disconnected.

Fields in data (2)
FieldTypeAlways present
object"waba"yes
sidstringyes

waba.review_changed

waba review changed.

Fields in data (2)
FieldTypeAlways present
object"waba"yes
sidstringyes

waba.billing_mode_changed

waba billing mode changed.

Fields in data (2)
FieldTypeAlways present
object"waba"yes
sidstringyes

onboarding

onboarding.abandoned

onboarding abandoned.

Fields in data (5)
FieldTypeAlways present
currentStepstringyes
embeddedSignupSessionIdstring | null
event"CANCEL"yes
object"onboarding_session"yes
sidstringyes

Templates

Review decisions, category changes, quality and pauses.

template.submitted

template submitted.

Fields in data (2)
FieldTypeAlways present
object"template"yes
sidstringyes

template.status_changed

WhatsApp approved, rejected, paused or disabled a template.

Fields in data (2)
FieldTypeAlways present
object"template"yes
sidstringyes

template.category_changed

template category changed.

Fields in data (2)
FieldTypeAlways present
object"template"yes
sidstringyes

template.quality_changed

template quality changed.

Fields in data (2)
FieldTypeAlways present
object"template"yes
sidstringyes

template.paused

template paused.

Fields in data (2)
FieldTypeAlways present
object"template"yes
sidstringyes

template.disabled

template disabled.

Fields in data (2)
FieldTypeAlways present
object"template"yes
sidstringyes

template.components_updated

template components updated.

Fields in data (2)
FieldTypeAlways present
object"template"yes
sidstringyes

template.deleted

template deleted.

Fields in data (2)
FieldTypeAlways present
object"template"yes
sidstringyes

Campaigns

Campaign state and batches.

campaign.state_changed

campaign state changed.

Fields in data (2)
FieldTypeAlways present
object"campaign"yes
sidstringyes

campaign.pending_approval

campaign pending approval.

Fields in data (2)
FieldTypeAlways present
object"campaign"yes
sidstringyes

campaign.started

campaign started.

Fields in data (2)
FieldTypeAlways present
object"campaign"yes
sidstringyes

campaign.paused

campaign paused.

Fields in data (2)
FieldTypeAlways present
object"campaign"yes
sidstringyes

campaign.resumed

campaign resumed.

Fields in data (2)
FieldTypeAlways present
object"campaign"yes
sidstringyes

campaign.completed

campaign completed.

Fields in data (2)
FieldTypeAlways present
object"campaign"yes
sidstringyes

campaign.canceled

campaign canceled.

Fields in data (2)
FieldTypeAlways present
object"campaign"yes
sidstringyes

campaign.failed

campaign failed.

Fields in data (2)
FieldTypeAlways present
object"campaign"yes
sidstringyes

campaign.batch.planned

campaign batch planned.

Fields in data (2)
FieldTypeAlways present
object"campaign_batch"yes
sidstringyes

campaign.batch.completed

campaign batch completed.

Fields in data (2)
FieldTypeAlways present
object"campaign_batch"yes
sidstringyes

Operations

Long-running jobs such as template submissions, imports and exports.

operation.state_changed

operation state changed.

Fields in data (2)
FieldTypeAlways present
object"operation"yes
sidstringyes

operation.completed

operation completed.

Fields in data (2)
FieldTypeAlways present
object"operation"yes
sidstringyes

Media

Uploaded files after scanning, and before they expire.

media.ready

media ready.

Fields in data (2)
FieldTypeAlways present
object"media"yes
sidstringyes

media.rejected

media rejected.

Fields in data (2)
FieldTypeAlways present
object"media"yes
sidstringyes

media.expiring

media expiring.

Fields in data (2)
FieldTypeAlways present
object"media"yes
sidstringyes

flow

flow.status_changed

flow status changed.

Fields in data (2)
FieldTypeAlways present
object"flow"yes
sidstringyes

flow.endpoint_unhealthy

flow endpoint unhealthy.

Fields in data (2)
FieldTypeAlways present
object"flow"yes
sidstringyes

approval

approval.requested

approval requested.

Fields in data (2)
FieldTypeAlways present
object"approval"yes
sidstringyes

coexistence

coexistence.sync_deadline

coexistence sync deadline.

Fields in data (2)
FieldTypeAlways present
object"coexistence"yes
sidstringyes

mfa

mfa.changed

mfa changed.

Fields in data (2)
FieldTypeAlways present
object"mfa"yes
sidstringyes

security

security.new_device_login

security new device login.

Fields in data (5)
FieldTypeAlways present
authenticationMethod"password" | "magic_link" | "oidc" | "saml"yes
devicestring (max 120 chars)yes
object"user"yes
sessionIdstring (uuid)yes
sidstringyes

security.account_locked

security account locked.

Fields in data (4)
FieldTypeAlways present
failedLoginCountinteger (1–)yes
lockedUntilstring (date-time)yes
object"user"yes
sidstringyes

security.password_reset

security password reset.

Fields in data (4)
FieldTypeAlways present
mfaRevokedbooleanyes
object"user"yes
sessionsRevokedinteger (0–)yes
sidstringyes

risk

risk.review_required

risk review required.

Fields in data (2)
FieldTypeAlways present
object"risk_decision"yes
sidstringyes

call

call.permission_replied

call permission replied.

Fields in data (2)
FieldTypeAlways present
object"call"yes
sidstringyes

call.started

call started.

Fields in data (2)
FieldTypeAlways present
object"call"yes
sidstringyes

call.ended

call ended.

Fields in data (2)
FieldTypeAlways present
object"call"yes
sidstringyes

call.failed

call failed.

Fields in data (2)
FieldTypeAlways present
object"call"yes
sidstringyes

Webhook endpoints

Your endpoints’ own health: verification, pauses and suspensions.

webhook.endpoint.verified

webhook endpoint verified.

Fields in data (2)
FieldTypeAlways present
object"webhook_endpoint"yes
sidstringyes

webhook.endpoint.paused

webhook endpoint paused.

Fields in data (2)
FieldTypeAlways present
object"webhook_endpoint"yes
sidstringyes

webhook.endpoint.resumed

webhook endpoint resumed.

Fields in data (2)
FieldTypeAlways present
object"webhook_endpoint"yes
sidstringyes

webhook.endpoint.suspended

webhook endpoint suspended.

Fields in data (2)
FieldTypeAlways present
object"webhook_endpoint"yes
sidstringyes

webhook.endpoint.secret_rotated

webhook endpoint secret rotated.

Fields in data (2)
FieldTypeAlways present
object"webhook_endpoint"yes
sidstringyes

webhook.endpoint.failing

webhook endpoint failing.

Fields in data (2)
FieldTypeAlways present
object"webhook_endpoint"yes
sidstringyes

Test

The verification challenge and test events.

test.ping

The endpoint verification challenge or a test event; answer with data.challenge.

Fields in data (2)
FieldTypeAlways present
object"webhook_endpoint"yes
sidstringyes

credential

credential.invalidated

credential invalidated.

Fields in data (2)
FieldTypeAlways present
object"credential"yes
sidstringyes

delegated access

delegated_access.granted

delegated access granted.

Fields in data (2)
FieldTypeAlways present
object"delegated_access"yes
sidstringyes

delegated_access.ended

delegated access ended.

Fields in data (2)
FieldTypeAlways present
object"delegated_access"yes
sidstringyes

account alerts

account_alerts

account alerts.

Fields in data (2)
FieldTypeAlways present
object"sender"yes
sidstringyes

payment configuration update

payment_configuration_update

payment configuration update.

Fields in data (2)
FieldTypeAlways present
object"waba"yes
sidstringyes

wallet

wallet.low_balance

wallet low balance.

Fields in data (2)
FieldTypeAlways present
object"wallet"yes
sidstringyes

invoice

invoice.created

invoice created.

Fields in data (2)
FieldTypeAlways present
object"invoice"yes
sidstringyes

invoice.paid

invoice paid.

Fields in data (2)
FieldTypeAlways present
object"invoice"yes
sidstringyes

invoice.overdue

invoice overdue.

Fields in data (2)
FieldTypeAlways present
object"invoice"yes
sidstringyes

invoice.opened

invoice opened.

Fields in data (5)
FieldTypeAlways present
artifactSha256string (pattern ^[0-9a-f]{64}$)yes
invoiceSidstring (IN… SID)yes
object"invoice"yes
providerInvoiceRefstringyes
sidstringyes

billing mode

billing_mode.changed

billing mode changed.

Fields in data (2)
FieldTypeAlways present
object"waba"yes
sidstringyes

deletion

deletion.requested

deletion requested.

Fields in data (2)
FieldTypeAlways present
object"deletion_request"yes
sidstringyes

deletion.completed

deletion completed.

Fields in data (2)
FieldTypeAlways present
object"deletion_request"yes
sidstringyes

export

export.ready

export ready.

Fields in data (2)
FieldTypeAlways present
object"export"yes
sidstringyes

platform

platform.incident

platform incident.

Fields in data (2)
FieldTypeAlways present
object"incident"yes
sidstringyes

platform.provider_change

platform provider change.

Fields in data (2)
FieldTypeAlways present
object"provider_change"yes
sidstringyes

platform.api_deprecation

platform api deprecation.

Fields in data (2)
FieldTypeAlways present
object"provider_change"yes
sidstringyes

notification

notification.created

notification created.

Fields in data (6)
FieldTypeAlways present
categorystringyes
object"notification"yes
resourceRefstringyes
severitystringyes
sidstringyes
targetRolestringyes

Resources carried in data

Message resource

Fields every event carrying a Message resource includes.

FieldTypeAlways present
attemptinteger (1–)
createdAtstring (date-time)yes
deliverBeforestring (date-time) | null
deliveredAtstring (date-time) | null
fromstring (WA… SID)yes
livemodebooleanyes
metadataobject
object"message"yes
priority"critical" | "transactional" | "normal" | "marketing"
providerMessageIdstring | null
readAtstring (date-time) | null
sentAtstring (date-time) | null
sidstring (SM… SID)yes
toobjectyes
typestringyes
updatedAtstring (date-time)

Conversation resource

Fields every event carrying a Conversation resource includes.

FieldTypeAlways present
attemptinteger (1–)
contactSidstring (CT… SID)
inboxSidstring (IB… SID)
object"conversation"yes
senderSidstring (WA… SID)
sidstring (CO… SID)yes
versioninteger (1–)

API key resource

Fields every event carrying a API key resource includes.

FieldTypeAlways present
object"api_key"yes
sidstring (SK… SID)yes

User resource

Fields every event carrying a User resource includes.

FieldTypeAlways present
object"user"yes
sidstring (US… SID)yes

Account resource

Fields every event carrying a Account resource includes.

FieldTypeAlways present
object"account"yes
operationSidstring (OP… SID)yes
sidstring (AC… SID)yes