The Notification resource sends a notification to existing Bindings or a list of addresses.
You can notify users over these channels:
It's a good practice to obtain your end users' consent before you send them messages and some jurisdictions might require it by law.
We recommend that you consult with your legal counsel to make sure that your communications comply with all applicable laws.
To make sure your messages reach the right people, you should make sure that they have given you their consent to send them messages and that their contact information is current.
Check out the Twilio Marketplace for Add-ons from our partners that can help you keep your database up to date.
The unique string that we created to identify the Notification resource.
^NT[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The SID of the Account that created the Notification resource.
^AC[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The SID of the Service the resource is associated with.
^IS[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The date and time in GMT when the resource was created specified in RFC 2822 format.
The list of identity
values of the Users to notify. We will attempt to deliver notifications only to Bindings with an identity in this list.
The tags that select the Bindings to notify. Notifications will be attempted only to Bindings that have all of the tags listed in this property.
The list of Segments to notify. The Segment resource is deprecated. Use the tags
property, instead.
The priority of the notification. Can be: low
or high
and the default is high
. A value of low
optimizes the client app's battery consumption; however, notifications may be delivered with unspecified delay. For FCM and GCM, low
priority is the same as Normal
priority. For APNS low
priority is the same as 5
. A value of high
sends the notification immediately, and can wake up a sleeping device. For FCM and GCM, high
is the same as High
priority. For APNS, high
is a priority 10
. SMS does not support this property.
high
low
How long, in seconds, the notification is valid. Can be an integer between 0 and 2,419,200, which is 4 weeks, the default and the maximum supported time to live (TTL). Delivery should be attempted if the device is offline until the TTL elapses. Zero means that the notification delivery is attempted immediately, only once, and is not stored for future delivery. SMS does not support this property.
0
The notification title. For FCM and GCM, this translates to the data.twi_title
value. For APNS, this translates to the aps.alert.title
value. SMS does not support this property. This field is not visible on iOS phones and tablets but appears on Apple Watch and Android devices.
The notification text. For FCM and GCM, translates to data.twi_body
. For APNS, translates to aps.alert.body
. For SMS, translates to body
. SMS requires either this body
value, or media_urls
attribute defined in the sms
parameter of the notification.
The name of the sound to be played for the notification. For FCM and GCM, this Translates to data.twi_sound
. For APNS, this translates to aps.sound
. SMS does not support this property.
The actions to display for the notification. For APNS, translates to the aps.category
value. For GCM, translates to the data.twi_action
value. For SMS, this parameter is not supported and is omitted from deliveries to those channels.
The custom key-value pairs of the notification's payload. For FCM and GCM, this value translates to data
in the FCM and GCM payloads. FCM and GCM reserve certain keys that cannot be used in those channels. For APNS, attributes of data
are inserted into the APNS payload as custom properties outside of the aps
dictionary. In all channels, we reserve keys that start with twi_
for future use. Custom keys that start with twi_
are not allowed and are rejected as 400 Bad request with no delivery attempted. For SMS, this parameter is not supported and is omitted from deliveries to those channels.
The APNS-specific payload that overrides corresponding attributes in the generic payload for APNS Bindings. This property maps to the APNS Payload
item, therefore the aps
key must be used to change standard attributes. Adds custom key-value pairs to the root of the dictionary. See the APNS documentation for more details. We reserve keys that start with twi_
for future use. Custom keys that start with twi_
are not allowed.
The GCM-specific payload that overrides corresponding attributes in the generic payload for GCM Bindings. This property maps to the root JSON dictionary. Target parameters to
, registration_ids
, and notification_key
are not allowed. We reserve keys that start with twi_
for future use. Custom keys that start with twi_
are not allowed.
The FCM-specific payload that overrides corresponding attributes in the generic payload for FCM Bindings. This property maps to the root JSON dictionary. See the FCM documentation for more details. Target parameters to
, registration_ids
, condition
, and notification_key
are not allowed in this parameter. We reserve keys that start with twi_
for future use. Custom keys that start with twi_
are not allowed. FCM also reserves certain keys, which cannot be used in that channel.
The SMS-specific payload that overrides corresponding attributes in the generic payload for SMS Bindings. Each attribute in this value maps to the corresponding form
parameter of the Twilio Message resource. These parameters of the Message resource are supported in snake case format: body
, media_urls
, status_callback
, and max_price
. The status_callback
parameter overrides the corresponding parameter in the messaging service, if configured. The media_urls
property expects a JSON array.
Deprecated.
POST https://notify.twilio.com/v1/Services/{ServiceSid}/Notifications
Creating a Notification resource sends a notification to existing Bindings or to addresses provided in the request.
Set Identity
or Tag
to specify the stored Bindings to notify. To notify all available stored Bindings, set Tag
to all. If both Identity
and Tag
have values, only the Bindings that match both will be notified.
Check out the below examples which show you how to
Set ToBinding
to the JSON object that defines the Bindings to notify. Check out the below example which shows you how to
Define channel-specific features in the request to tailor the notification to the channel. Check out the below example
application/x-www-form-urlencoded
The notification text. For FCM and GCM, translates to data.twi_body
. For APNS, translates to aps.alert.body
. For SMS, translates to body
. SMS requires either this body
value, or media_urls
attribute defined in the sms
parameter of the notification.
The priority of the notification. Can be: low
or high
and the default is high
. A value of low
optimizes the client app's battery consumption; however, notifications may be delivered with unspecified delay. For FCM and GCM, low
priority is the same as Normal
priority. For APNS low
priority is the same as 5
. A value of high
sends the notification immediately, and can wake up a sleeping device. For FCM and GCM, high
is the same as High
priority. For APNS, high
is a priority 10
. SMS does not support this property.
high
low
How long, in seconds, the notification is valid. Can be an integer between 0 and 2,419,200, which is 4 weeks, the default and the maximum supported time to live (TTL). Delivery should be attempted if the device is offline until the TTL elapses. Zero means that the notification delivery is attempted immediately, only once, and is not stored for future delivery. SMS does not support this property.
The notification title. For FCM and GCM, this translates to the data.twi_title
value. For APNS, this translates to the aps.alert.title
value. SMS does not support this property. This field is not visible on iOS phones and tablets but appears on Apple Watch and Android devices.
The name of the sound to be played for the notification. For FCM and GCM, this Translates to data.twi_sound
. For APNS, this translates to aps.sound
. SMS does not support this property.
The actions to display for the notification. For APNS, translates to the aps.category
value. For GCM, translates to the data.twi_action
value. For SMS, this parameter is not supported and is omitted from deliveries to those channels.
The custom key-value pairs of the notification's payload. For FCM and GCM, this value translates to data
in the FCM and GCM payloads. FCM and GCM reserve certain keys that cannot be used in those channels. For APNS, attributes of data
are inserted into the APNS payload as custom properties outside of the aps
dictionary. In all channels, we reserve keys that start with twi_
for future use. Custom keys that start with twi_
are not allowed and are rejected as 400 Bad request with no delivery attempted. For SMS, this parameter is not supported and is omitted from deliveries to those channels.
The APNS-specific payload that overrides corresponding attributes in the generic payload for APNS Bindings. This property maps to the APNS Payload
item, therefore the aps
key must be used to change standard attributes. Adds custom key-value pairs to the root of the dictionary. See the APNS documentation for more details. We reserve keys that start with twi_
for future use. Custom keys that start with twi_
are not allowed.
The GCM-specific payload that overrides corresponding attributes in the generic payload for GCM Bindings. This property maps to the root JSON dictionary. See the GCM documentation for more details. Target parameters to
, registration_ids
, and notification_key
are not allowed. We reserve keys that start with twi_
for future use. Custom keys that start with twi_
are not allowed. GCM also reserves certain keys.
The SMS-specific payload that overrides corresponding attributes in the generic payload for SMS Bindings. Each attribute in this value maps to the corresponding form
parameter of the Twilio Message resource. These parameters of the Message resource are supported in snake case format: body
, media_urls
, status_callback
, and max_price
. The status_callback
parameter overrides the corresponding parameter in the messaging service, if configured. The media_urls
property expects a JSON array.
The FCM-specific payload that overrides corresponding attributes in the generic payload for FCM Bindings. This property maps to the root JSON dictionary. See the FCM documentation for more details. Target parameters to
, registration_ids
, condition
, and notification_key
are not allowed in this parameter. We reserve keys that start with twi_
for future use. Custom keys that start with twi_
are not allowed. FCM also reserves certain keys, which cannot be used in that channel.
The Segment resource is deprecated. Use the tag
parameter, instead.
The destination address specified as a JSON string. Multiple to_binding
parameters can be included but the total size of the request entity should not exceed 1MB. This is typically sufficient for 10,000 phone numbers.
The identity
value that uniquely identifies the new resource's User within the Service. Delivery will be attempted only to Bindings with an Identity in this list. No more than 20 items are allowed in this list.
A tag that selects the Bindings to notify. Repeat this parameter to specify more than one tag, up to a total of 5 tags. The implicit tag all
is available to notify all Bindings in a Service instance. Similarly, the implicit tags apn
, fcm
, gcm
, sms
and facebook-messenger
are available to notify all Bindings in a specific channel.
1// NOTE: This example uses the next generation Twilio helper library - for more2// information on how to download and install this version, visit3// https://www.twilio.com/docs/libraries/node4// To set up environmental variables, see http://twil.io/secure5const accountSid = process.env.TWILIO_ACCOUNT_SID;6const authToken = process.env.TWILIO_AUTH_TOKEN;7const Twilio = require('twilio');89const client = new Twilio(accountSid, authToken);1011const service = client.notify.services('ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');1213service.notifications14.create({15identity: '00000001',16body: 'Hello Bob',17})18.then(notification => {19console.log(notification);20})21.catch(error => {22console.log(error);23})24.done();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"sid": "NTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",4"service_sid": "ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"date_created": "2015-08-26T00:07:12Z",6"identities": ["00000001"],7"tags": [],8"priority": "high",9"ttl": 2419200,10"title": null,11"body": "Hello Bob",12"sound": null,13"action": null,14"data": null,15"apn": null,16"gcm": null,17"sms": null,18"fcm": null19}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function createNotification() {11const notification = await client.notify.v112.services("ISaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")13.notifications.create({14body: '"Hello new user!"',15tag: ["new_user"],16});1718console.log(notification.sid);19}2021createNotification();
1{2"sid": "NTb8021351170b4e1286adaac3fdd6d082",3"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",4"service_sid": "ISaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"date_created": "2016-03-24T23:42:28Z",6"identities": [7"jing"8],9"tags": [],10"segments": [],11"priority": "high",12"ttl": 2419200,13"title": "test",14"body": "\"Hello new user!\"",15"sound": null,16"action": null,17"data": null,18"apn": null,19"fcm": null,20"gcm": null,21"sms": null,22"facebook_messenger": null,23"alexa": null24}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function createNotification() {11const notification = await client.notify.v112.services("ISaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")13.notifications.create({14body: '"Hello, Charlie!"',15identity: ["00000001"],16tag: ["preferred_device"],17});1819console.log(notification.sid);20}2122createNotification();
1{2"sid": "NTb8021351170b4e1286adaac3fdd6d082",3"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",4"service_sid": "ISaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"date_created": "2016-03-24T23:42:28Z",6"identities": [7"jing"8],9"tags": [],10"segments": [],11"priority": "high",12"ttl": 2419200,13"title": "test",14"body": "\"Hello, Charlie!\"",15"sound": null,16"action": null,17"data": null,18"apn": null,19"fcm": null,20"gcm": null,21"sms": null,22"facebook_messenger": null,23"alexa": null24}
You can send notifications to addresses without storing them by using the toBinding
parameter. However, the total size of the request entity shouldn't exceed 1MB
. This is typically sufficient for 10,000 phone numbers.
1// NOTE: This example uses the next generation Twilio helper library - for more2// information on how to download and install this version, visit3// https://www.twilio.com/docs/libraries/node4// To set up environmental variables, see http://twil.io/secure5const accountSid = process.env.TWILIO_ACCOUNT_SID;6const authToken = process.env.TWILIO_AUTH_TOKEN;7const Twilio = require('twilio');89const client = new Twilio(accountSid, authToken);1011const service = client.notify.services('ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');1213service.notifications14.create({15toBinding: [16JSON.stringify({17binding_type: 'sms',18address: '+15555555555',19}),20JSON.stringify({21binding_type: 'facebook-messenger',22address: '123456789123',23}),24],25body: 'Hello Bob',26})27.then(notification => {28console.log(notification);29})30.catch(error => {31console.log(error);32})33.done();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"sid": "NTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",4"service_sid": "ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"date_created": "2015-08-26T00:07:12Z",6"toBindings": [{7"binding_type":"sms",8"address":"+15555555555"9},{10"binding_type":"facebook-messenger",11"address":"123456789123"12}],13"identities": [],14"tags": [],15"priority": "high",16"ttl": 2419200,17"title": null,18"body": "Hello Bob",19"sound": null,20"action": null,21"data": null,22"apn": null,23"gcm": null,24"sms": null,25"fcm": null26}
There is a list of available keys for building notification messages for iOS and Android. You can pass any of the available keys forApple orGoogle on the APNs or FCM parameters. You can also combine these (as well as the sms
key) all in the same Notification API request, as shown in the Send custom notifications by channel
code sample.
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function createNotification() {11const notification = await client.notify.v112.services("ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.notifications.create({14apn: {15aps: {16alert: {17title: "Short title for Watch.",18},19},20},21body: "This is the body for all Bindings",22data: {23custom_key1: "custom value 1",24custom_key2: "custom value 2",25},26fcm: {27notification: {28title: "New alert",29body: "Hello Bob!",30},31},32identity: ["00000001"],33title: "Generic loooooooong title for all Bindings",34});3536console.log(notification.sid);37}3839createNotification();
1{2"sid": "NTb8021351170b4e1286adaac3fdd6d082",3"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",4"service_sid": "ISXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"date_created": "2016-03-24T23:42:28Z",6"identities": [7"jing"8],9"tags": [],10"segments": [],11"priority": "high",12"ttl": 2419200,13"title": "Generic loooooooong title for all Bindings",14"body": "This is the body for all Bindings",15"sound": null,16"action": null,17"data": {18"custom_key1": "custom value 1",19"custom_key2": "custom value 2"20},21"apn": {22"aps": {23"alert": {24"title": "Short title for Watch."25}26}27},28"fcm": {29"notification": {30"title": "New alert",31"body": "Hello Bob!"32}33},34"gcm": null,35"sms": null,36"facebook_messenger": null,37"alexa": null38}
Name | Description |
---|---|
binding_type | The channel to use. Possible values: sms , apn , fcm . |
address | The destination address. For SMS, it is the phone number in E.164 format. For APNS and FCM, it is the device or registration token. |
Notifications can be tailored to each notification channel to take advantage of channel-specific features or to customize the content to each channel.
The channel-specific payload of a notification can be provided by adding a parameter whose name is the BindingType and the value is the channel specific payload in a JSON object. The example Send custom notifications by channel includes several such objects.
These channels support channel-specific payloads:
The channel-specific content specified in this parameter can add a new property for the channel or replace the value in an existing property, but it cannot remove a property.
The example Send custom notifications by channel sends a notification to all Bindings with Identity 00000001
. A generic Title
is specified and will be used for sms
binding and specifically for fcm
and apn
binding types a payload with title
and body
are also added, which will override the generic Title
.
When the underlying notification channel indicates an unrecoverable error, it is usually because there's a problem with the Binding. To ensure your database contains only valid Bindings, we delete the Bindings that return unrecoverable errors.
The following errors are unrecoverable.
Channel | Error |
---|---|
APNS | APNS response status code 410 with error string "Unregistered" |
APNS | Address in invalid format |
FCM | Firebase response status code 200 + error:NotRegistered |
FCM | Firebase response status code 200 + error:InvalidRegistration |
FCM | Firebase response status code 200 + error:MismatchSenderId |
SMS | 21604 - 'To' phone number is blank |