Status lifecycle
Every message moves through a defined set of statuses. Map all four in your system, or your delivery tracking will be wrong.read only ever arrives if the recipient has read receipts enabled. Its absence is not evidence
the message went unread, so never treat delivered without a subsequent read as a failure.Payload format
Top-level fields
string
Unique identifier of the WhatsApp Business Account generating the event.
string
Custom key passed at the time of submission, echoed back unchanged.
string
Custom key passed at the time of submission.
string
Custom key passed at the time of submission.
string
Custom key passed at the time of submission.
string
Custom key passed at the time of submission.
array
Webhook event batches from WhatsApp.
The
custref1–custref5 fields are the simplest way to correlate a callback with your own
records — set them on the original send and they come straight back. See
Send template messages.Value fields
string
The business WhatsApp number visible to users.
string
Unique ID of the WhatsApp number.
string
Messaging platform identifier —
whatsapp.array
Message delivery status updates.
Status fields
string
Unique message ID. Match it against the ID returned when you sent the message.
string
Delivery status —
sent, delivered, read, or failed.string
Unix timestamp of the status event.
string
Recipient’s WhatsApp phone number.
Errors
Theerrors object is present only when status is failed.
string
Error code indicating the failure reason. See
WhatsApp error codes for the values OneXtel has
observed and whether each is worth retrying.
string
Description of the error.
string
Short error category or title.
string
URL for detailed error documentation.
string
Additional granular error detail.
Conversation
string
Unique conversation identifier.
string
How the conversation was initiated —
user_initiated, business_initiated, or referral.string
Timestamp when the conversation window expires.
expiration_timestamp is when the session window closes. After it passes you can no longer send
free-form messages to that recipient — only templates. Track it if your application sends
session messages. See Send session messages.Pricing
string
Message category used for billing —
utility, marketing, or authentication.boolean
Whether the message is billable.
string
Pricing model used for billing.
The pricing object is what to reconcile billing against —
category here is the category Meta
actually charged at, which is not always the category you submitted the template under.
