Notify delivery callbacks
We are no longer allowing customers to onboard to Notify. We intend to deprecate the Notify product on April 25, 2024. Learn more in our Notify API End of Life Notice. We prepared this Transition Guide to assist in supporting your push notification use cases.
What is a Notify delivery callback?
A Notify delivery callback is a URL that sends webhooks which provides you with information about how many messages were sent and if those messages were sent correctly by the Notify API. Let’s keep in mind that Notify is a bulk-first messaging API, where one API call can trigger from zero to multiple thousands messages.
Note: Each Callback will contain the status for up to 1000 SMS and/or pushes.
What information is reported in delivery callbacks?
Every callback contains a list of the deliveries-messages which were sent as part of the notification.
The status of one notification can be delivered in one or multiple delivery callbacks, depending on the size of the notification. The final callback from the Notify API will always have a flag IsFinal
set to True
to indicate that notification is handled completely.
Every delivery in the list has one of the following status
:
- SENT: Notify successfully passed the message to the channel (i.e. Twilio SMS, FCM, APN)
- FAILED: The channel (Twilio SMS, FCM, APM) returned an error.
Notify callbacks do not update the state of the message once it has been passed to the channel. It means there will be no further updates when a recipient has received a message.
Data format
Notify delivery callback provides the following payload information.
Parameter | Type | Description |
NotificationSid |
string |
A 34 character string that uniquely identifies the Notification that triggered the Delivery attempt |
AccountSid |
string |
The unique ID of the Account that sent this notification |
ServiceSid |
string |
The unique ID of the Service that sent this notification |
Count |
integer |
Number of Deliveries in this report |
SequenceId |
integer |
Sequence number of the batch starting from 0 |
IsFinal |
boolean |
Flag to indicate it is the final batch for the bulk notification |
DeliveryState |
JSON |
The status of this Delivery attempt |
Data format for DeliveryState
The DeliveryState
indicates the status of a delivery attempt. The number of performed delivery attempts should be equal to the number of DeliveryState
parameters shown in the payload.
Parameter |
Type |
Description |
sid |
string |
Provider unique message id (for APN/FCM) or message sid (SMxxx for SMS, MMxxx for MMS, RUxxx for rest of adapters) |
type |
string |
Channel type (e.g., APN, FCM, SMS, etc...) |
status |
string |
SENT or FAILED |
identity |
string |
Identity |
error_code |
Integer (optional) |
Twilio error code, if error happened. For more information, go to Twilio error codes |
Payload example
Content-Type: application/x-www-form-urlencoded
&SequenceId=0
&NotificationSid={NotificationSid}
&IsFinal=False
&Count=2
&DeliveryState[0]="{ \"sid\": \"message sid\", \"channel\": \"APN\", \"status\": \"SENT\" }"
&DeliveryState[1]="{ \"sid\": \"message sid\",
\"channel\": \"APN\",
\"status\": \"FAILED\",
\"error_code\": 52131,
\"error_message\": \"The provided APNs device token has been unregistered\" }"
How to subscribe to the status callback?
The Notification's resource accepts an optional "DeliveryCallbackUrl" field that should contain a URL which will be called to provide the Notification status, as shown in the following example:
curl -X POST 'https://notify.twilio.com/v1/Services/ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Notifications' \
--data-urlencode 'Identity=00000001' \
--data-urlencode 'Body=Hello Bob' \
--data-urlencode 'DeliveryCallbackUrl=https://myhost/notifyCallbacks'
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
Need some help?
We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd by visiting Twilio's Stack Overflow Collective or browsing the Twilio tag on Stack Overflow.