Webhook payload example and field reference for Template Message Sent (templateMessageSent_v2).
{
"eventType": "templateMessageSent_v2",
"localMessageId": "84689938-5e2-877821d672c2",
"id": "693fd8ee21f81",
"whatsappMessageId": "wamid.HBgNODEYEjQ3RDMzQzM2QjM3QjU1ODQ4RQA=",
"templateId": "6929b",
"templateName": "test_jm4",
"created": "2025-12-15T09:46:23.4083984Z",
"conversationId": "68b68470e93cc",
"ticketId": "693fd6ab545f82",
"text": " \n\n Make your messages personal using variables like name and get more replies!",
"operatorEmail": "[email protected]",
"waId": "86151285",
"type": "template",
"statusString": "SENT",
"sourceType": "WEB",
"headerLink": null,
"headerType": null,
"templateContent": {
"headerText": "Welcome to our service",
"footerText": "Reply STOP to unsubscribe",
"buttons": [
{
"index": 0,
"cardIndex": null,
"type": "quick_reply",
"text": "Yes, I'm interested",
"url": null,
"targetUrl": null,
"originalUrl": null,
"phoneNumber": null
},
{
"index": 1,
"cardIndex": null,
"type": "url",
"text": "Visit Website",
"url": "https://example.com/track/abc123",
"targetUrl": "https://example.com/page",
"originalUrl": "https://example.com/page/{{1}}",
"phoneNumber": null
},
{
"index": 2,
"cardIndex": null,
"type": "call",
"text": "Call Us",
"url": null,
"targetUrl": null,
"originalUrl": null,
"phoneNumber": "+1234567890"
}
]
},
"channelId": null,
"channelPhoneNumber": "174742",
"bsuid": "HK.xxxxxxxxxxxxx",
"parentBsuid": "HK.ENT.xxxxxxxxxxxxx",
"username": "@bob"
}Field Descriptions
| Field Name | Type | Description |
|---|---|---|
| eventType | string | Event type, here "templateMessageSent_v2" indicates a template message has been sent (version 2) |
| localMessageId | string | Local message identifier used by the client for tracking and idempotency |
| id | string | Unique identifier for the message |
| whatsappMessageId | string | Message ID generated by the WhatsApp platform |
| templateId | string | Unique identifier for the template used to send this message |
| templateName | string | Name of the template used for sending the message |
| created | string | Timestamp when the message was created (ISO 8601 format) |
| conversationId | string | Unique identifier for the conversation, used to associate all messages within the same conversation |
| ticketId | string | Ticket ID used for ticket management in customer service systems |
| text | string | Text content of the template message |
| operatorEmail | string | Email address of the operator/customer service representative who sent the message |
| waId | string | WhatsApp ID, typically the complete phone number with country code |
| type | string | Message type, supported values include: "image", "text", "document", "location", "voice", "audio", "button", "interactive", "reaction", "video", "sticker", "contacts", "order", "catalog", "media_placeholder", "template" |
| statusString | string | Message status string, here "SENT" indicates the message has been sent successfully |
| sourceType | string | Source from which the message was sent, "WEB" indicates it was sent from the web interface |
| headerLink | string/null | Link associated with the template header, null if no header link is present |
| headerType | string/null | Type of header in the template (e.g., "text", "image", "video"), null if no header is present |
| templateContent | object/null | Structured content of the sent template, including header, footer, and buttons. Only present when the template contains these elements. |
| templateContent.headerText | string/null | Resolved header text of the template |
| templateContent.footerText | string/null | Footer text of the template |
| templateContent.buttons | array | List of buttons included in the template |
| templateContent.buttons[].index | number | Button position index (0-based) |
| templateContent.buttons[].cardIndex | number/null | Carousel card index (null if not a carousel template) |
| templateContent.buttons[].type | string | Button type: "quick_reply", "url", or "call" |
| templateContent.buttons[].text | string | Button display text |
| templateContent.buttons[].url | string/null | Tracking-wrapped URL for URL-type buttons (may differ from targetUrl if click tracking is enabled) |
| templateContent.buttons[].targetUrl | string/null | Resolved target URL with dynamic parameters substituted |
| templateContent.buttons[].originalUrl | string/null | Original URL template before parameter substitution (e.g., contains {{1}} placeholders) |
| templateContent.buttons[].phoneNumber | string/null | Phone number for call-type buttons |
| channelId | string/null | Identifier of the channel through which the message was sent, null if using default channel |
| channelPhoneNumber | string | Phone number of the channel from which the message was sent |
| bsuid | string/null | Business Solution User ID — a stable cross-channel identifier for the contact. Only present when available. |
| parentBsuid | string/null | Parent BSUID — the enterprise-level identifier. Only present when available. |
| username | string/null | Human-readable username handle for the contact. Only present when available. |

