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"
}
FieldDescription
fieldThe event type
payloadEvent-specific payload object
timestampTimestamp 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:

FieldDescription
eventTypemessages
eventDataPayload of the event - this is the data that you will receive in your webhook handler
eventDatafieldmessages
eventDatapayloadchannelsms, whatsapp
eventDatapayloadaccount_idSender account UUID
eventDatapayloadmessage_idMessage UUID (use for tracking the message)
eventDatapayloadtemplate_idUUID of the Template used for the message
eventDatapayloadinbound_numberInbound number (Sender number)
eventDatapayloadoutbound_numberOutbound number (Recipient number)
eventDatapayloadmessage_statusPENDING, SENT, RETRYING, FAILED
deliveryStatusPENDING, DELIVERED, RETRYING, FAILED (will reflect the acknowledgement from your webhook handler)
httpStatusCodeHTTP status code of the response from your webhook handler
responseBodyResponse body from you webhook handler
deliveryAttemptsNumber of delivery attempts to your webhook
errorMessagePopulated only on webhook delivery failures with specific error code and message

Status Definitions:

StatusDescription
PENDINGMessage accepted and queued for sending
SENDMessage delivered to recipient's device
RETRYINGMessage delivery failed and is being retried
FAILEDMessage 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 review
  • approved - Ready to use
  • rejected - Needs changes (see rejection_reason)
  • disabled - Temporarily disabled by Meta
  • paused - 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.