Platform Events Reference
This section is the definitive source for all webhook event types emitted by Sent.
Event Structure
Every event that your webhook endpoint will receive has a consistent envelope:
{
"field": "messages",
"payload": {
"channel": "sms",
"account_id": "********-****-****-****-***********",
"message_id": "********-****-****-****-***********",
"template_id": "********-****-****-****-***********",
"inbound_number": "********",
"message_status": "DELIVERED",
"outbound_number": "+********"
},
"timestamp": "2025-10-31T10:10:42Z"
}{
"field": "templates",
"payload": {
"status": "approved",
"channel": "whatsapp",
"category": "UTILITY",
"language": "en",
"account_id": "********-****-****-****-***********",
"template_id": "********-****-****-****-***********",
"template_name": "template",
"whatsapp_template_id": "whatsapp_template_1"
},
"timestamp": "2025-10-31T12:18:14Z"
}| Field | Description |
|---|---|
field | The event type |
payload | Event-specific payload object |
timestamp | Timestamp of event creation |
Event Types & Details
Below you will find the details of the events that you will receive in your webhook endpoint.
The eventData object is the payload that your webhook handler will receive.
The other fields are metadata about the event, which are visible only from the Sent Dashboard and contain information about how your webhook handler performed and replied to the event.
messages
Triggered whenever a message's delivery status changes (pending, delivered, retrying, failed).
{
"eventType": "messages",
"eventData": {
"field": "messages",
"payload": {
"channel": "sms",
"account_id": "********-****-****-****-***********",
"message_id": "********-****-****-****-***********",
"template_id": "********-****-****-****-***********",
"inbound_number": "********",
"message_status": "SENT",
"outbound_number": "+********"
},
"timestamp": "2025-10-31T12:12:33Z"
},
"deliveryStatus": "DELIVERED",
"httpStatusCode": 200,
"responseBody": "Your Webhook Handler response",
"deliveryAttempts": 1,
"errorMessage": null,
"createdAt": "2025-10-31T12:12:33.990361+00:00",
"processingStartedAt": "2025-10-31T12:12:50.406303+00:00",
"processingCompletedAt": "2025-10-31T12:12:51.441666+00:00"
}{
"eventType": "messages",
"eventData": {
"field": "messages",
"payload": {
"channel": "whatsapp",
"account_id": "********-****-****-****-***********",
"message_id": "********-****-****-****-***********",
"template_id": "********-****-****-****-***********",
"inbound_number": "********",
"message_status": "FAILED",
"outbound_number": "+********"
},
"timestamp": "2025-10-31T11:45:06Z"
},
"deliveryStatus": "RETRYING",
"httpStatusCode": null,
"responseBody": null,
"deliveryAttempts": 1,
"errorMessage": null,
"createdAt": "2025-10-31T11:45:06.251533+00:00",
"processingStartedAt": "2025-10-31T11:45:15.187346+00:00",
"processingCompletedAt": "2025-10-31T11:45:16.01081+00:00"
}{
"eventType": "messages",
"eventData": {
"field": "messages",
"payload": {
"channel": "sms",
"account_id": "********-****-****-****-***********",
"message_id": "********-****-****-****-***********",
"template_id": "********-****-****-****-***********",
"inbound_number": "********",
"message_status": "SENT",
"outbound_number": "+********"
},
"timestamp": "2025-10-31T09:52:24Z"
},
"deliveryStatus": "FAILED",
"httpStatusCode": null,
"responseBody": null,
"deliveryAttempts": 3,
"errorMessage": "Exceeded maximum retry attempts (3)",
"createdAt": "2025-10-31T09:52:24.571768+00:00",
"processingStartedAt": "2025-10-31T10:01:24.035467+00:00",
"processingCompletedAt": "2025-10-31T10:01:25.787988+00:00"
}Fields:
| Field | Description | ||
|---|---|---|---|
eventType | messages | ||
eventData | Payload of the event - this is the data that you will receive in your webhook handler | ||
eventData | field | messages | |
eventData | payload | channel | sms, whatsapp |
eventData | payload | account_id | Sender account UUID |
eventData | payload | message_id | Message UUID (use for tracking the message) |
eventData | payload | template_id | UUID of the Template used for the message |
eventData | payload | inbound_number | Inbound number (Sender number) |
eventData | payload | outbound_number | Outbound number (Recipient number) |
eventData | payload | message_status | PENDING, SENT, RETRYING, FAILED |
deliveryStatus | PENDING, DELIVERED, RETRYING, FAILED (will reflect the acknowledgement from your webhook handler) | ||
httpStatusCode | HTTP status code of the response from your webhook handler | ||
responseBody | Response body from you webhook handler | ||
deliveryAttempts | Number of delivery attempts to your webhook | ||
errorMessage | Populated only on webhook delivery failures with specific error code and message |
Status Definitions:
| Status | Description |
|---|---|
PENDING | Message accepted and queued for sending |
SEND | Message delivered to recipient's device |
RETRYING | Message delivery failed and is being retried |
FAILED | Message delivery failed permanently |
templates
Triggered when a WhatsApp template moves through the approval process.
{
"field": "templates",
"payload": {
"status": "approved",
"channel": "whatsapp",
"category": "UTILITY",
"language": "en",
"account_id": "00000000-0000-0000-0000-000000000000",
"template_id": "00000000-0000-0000-0000-000000000002",
"template_name": "test_template",
"whatsapp_template_id": "test_whatsapp_tmpl_987654321"
},
"timestamp": "2025-10-31T12:18:14Z"
}Status Values:
pending- Submitted for reviewapproved- Ready to userejected- Needs changes (see rejection_reason)disabled- Temporarily disabled by Metapaused- Paused by business
Event Filtering
You can configure which events to receive in the webhook settings in your Sent Dashboard to reduce noise and improve performance.
Available Filters:
- Messages - Filter message status updates (delivered, failed, etc.)
- Templates - Filter by specific template names
Rate Limits
Webhook delivery is subject to rate limits to ensure reliability:
- Per endpoint: 1000 requests per minute
- Burst capacity: Up to 100 requests in 10 seconds
- Retry backoff: Exponential backoff on failures
- Max payload size: 10MB per event
Rate Limit Handling
If your endpoint consistently exceeds rate limits, webhook delivery may be temporarily suspended. Ensure your endpoint can handle the expected event volume.