Menu

Expand
Rate this page:

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

Rate this page:

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.

Loading Code Sample...
        
        
        

        Thank you for your feedback!

        Please select the reason(s) for your feedback. The additional information you provide helps us improve our documentation:

        Sending your feedback...
        🎉 Thank you for your feedback!
        Something went wrong. Please try again.

        Thanks for your feedback!

        thanks-feedback-gif