Skip to main content
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.