Delivered on the endpoint you registered in
Webhooks, which is also where signature verification,
the envelope and retry behaviour are described. This page is only which
events WhatsApp produces.
GET /api/v2/webhooks/catalogue/ returns the live list, including the resource
each event carries and the scope it needs. Your code probably wants that rather
than this table.
message.received fires for media before the voice note is transcribed, so
channel.media.transcription may be empty on arrival. Render the message
immediately rather than waiting — a customer’s voice note appearing thirty
seconds late looks like a broken inbox. Fetch the file with
GET /media/{ref}/.
Delivery status
The ticks you draw beside a message, and the per-recipient outcome a broadcast
report is built from.
pricing.category is what a broadcast cost estimate multiplies, and this is the
only place it is available.
A failure carries Meta’s own diagnosis rather than ours:
sent is not re-emitted as a status. message.sent already fired when we
handed the message to Meta. Emitting the same fact twice under two names is how
a delivery report ends up counting every message once too often.The states you receive are delivered, read and failed — and they can
arrive out of order, or not at all. A customer with read receipts disabled
never produces message.read, which is not a failure and not something to wait
for.
Template approval
Approval takes hours, so it arrives long after the POST that created the
template.
Meta sends this against the WhatsApp Business Account rather than a phone
number, so it arrives for the merchant that owns the WABA. See
Templates.