Notifications API
You can use the Alexa Notifications REST API to send notifications to your customers.
Notification types
This API can deliver notifications to up to a hundred different units in a single request. You can specify one of the following notification types:
- Device notification – For Alexa-enabled devices without screens, the device notification is a yellow ring and a chime sound. For devices with screens, the device notification is a banner and a persistent notification indicator.
- Announcement – For devices with and without screens, Alexa makes announcements by voice. Devices with screens also display a message on the screen.
- Persistent visual alert – Persistent visual alerts are available for devices with screens. A persistent visual alert is a notification that displays on the screen until it expires or the guest or resident dismisses it.
API endpoint
In the request header, set Host
to one of the following, depending on the region of your organization:
Country | Endpoint |
---|---|
CA, US |
|
DE, ES, FR, IT, UK |
|
JP |
|
Authentication
Each API request must have an authorization header whose value is the access token retrieved from Login with Amazon (LWA).
Operations
The Notifications API includes the following operations.
Operation | HTTP Method and URI |
---|---|
| |
| |
| |
|
Send notifications
Call POST /v3/notifications
to send notifications to customers.
This operation is available in the following countries.
Healthcare | Hospitality | Senior Living | Core |
---|---|---|---|
US |
US, UK, FR, CA, IT, DE, ES, JP |
US, UK, FR, CA, IT, DE, ES, JP |
US |
Request format
POST /v3/notifications HTTP/1.1
Host: api.amazonalexa.com
Accept: application/json
Authorization: Bearer {LWA Token}
Request body examples
The following example shows a device notification.
{
"recipients": [
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId1}"
},
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId2}"
}
],
"notification": {
"variants": [
{
"type": "DeviceNotification",
"content": {
"variants": [
{
"type": "SpokenText",
"values": [
{
"locale": "en-US",
"text": "Example notification text."
}
]
}
]
}
}
]
}
}
The following example shows an announcement.
{
"recipients": [
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId1}"
},
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId2}"
},
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId3}"
}
],
"notification": {
"variants": [{
"type": "Announcement",
"content": {
"variants": [{
"type": "SpokenText",
"values": [{
"locale": "en-US",
"text": "Example notification text."
}]
}]
}
}]
}
}
The following example shows a persistent visual alert.
{
"recipients": [
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId1}"
},
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId2}"
},
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId3}"
},
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId4}"
}
],
"notification": {
"variants": [{
"type": "PersistentVisualAlert",
"content": {
"variants": [{
"type": "V0Template",
"values": [{
"locale": "en-US",
"document": {
"type": "Link",
"src": "doc://alexa/apl/documents/enterprise/notifications/persistentvisualalert/textWrappingTemplate"
},
"datasources": {
"displayText": {
"primaryText": "Example notification primary text.",
"secondaryText": "Example notification text."
},
"background": {
"backgroundImageSource": "https://www.example.com/image.jpg"
}
}
}]
}]
},
"dismissalTime": "2021-04-30T10:00:00.00Z"
}],
"referenceId": "595973fd-5b66-4970-9401-53f19142aa48"
}
}
Request body parameters
Field | Description | Type | Required |
---|---|---|---|
|
The recipient of the notification. |
Array |
Yes |
|
Recipient type: |
Enum |
Yes |
|
The unit ID, in the format Note: The maximum number of unit IDs per request is 100.
|
String |
Yes |
|
The notification object. |
Object |
Yes |
|
Notification delivery type. For details about the differences, see Notification types. |
Enum |
Yes |
|
Content for the notification. The specific fields for this object depend on the |
Object |
Yes |
|
The locale-specific notification content to deliver to the unit. |
Array of objects |
Yes |
|
Type of notification. Accepted values
For both types, you provide the notification content within the |
Enum |
Yes |
|
Content values array. Each element in the array represents a localized version of the notification. |
Array of objects |
Yes |
|
The locale in which the spoken text is rendered, in BCP-47 format. The locale must include both the language and country or region, for example: |
String |
Yes |
|
Spoken text in plain text format. Maximum length is 1024 characters or 2048 bytes. Applies when the notification |
String |
Yes for |
|
Object that defines the APL document to display. Applies when the notification |
Object |
Yes, for |
|
Type of APL document to display. Set to |
String |
Yes, for |
|
Set to one of the three supported APL templates to display:
|
String |
Yes, for |
|
Contains the data for the specified Applies when the notification |
Object |
Yes, for |
|
The date and time of the expiry for the notification, in ISO 8601 format. The notification remains on the device until this time, unless the guest or resident dismisses the notification manually. Applies when the notification |
String |
No |
|
For |
String |
No |
Response header
Host
value is the same as the Host
value in the request.HTTP/1.1 202 Accepted
Host: api.amazonalexa.com
X-Amzn-RequestId: {request-id}
Content-Type: application/json
Field | Description | Type |
---|---|---|
|
Unique identifier for the request. If a problem occurs, Amazon can use this value to troubleshoot the problem.. |
String |
Response body examples
The following example shows a response when the notification was sent to all recipients successfully.
{
"type": "ALL_SUCCESS",
"message": "All message published successfully.",
"successResults": [
{
"id": "amzn1.alexa.unit.did.<unitId1>",
"referenceId": "0176a8dd-1f79-4933-a3a4-8e76fc43fd7a"
},
{
"id": "amzn1.alexa.unit.did.<unitId2>",
"referenceId": "475dc098-2319-11ec-9621-0242ac130002"
}
],
"errors": [
]
}
The following example shows a response when the notification failed to send to some of the recipients.
{
"type": "PARTIAL_SUCCESS",
"message": "1 of 3 failed to publish.",
"successResults": [
{
"id": "amzn1.alexa.unit.did.<unitId1>",
"referenceId": "0176a8dd-1f79-4933-a3a4-8e76fc43fd7a"
},
{
"id": "amzn1.alexa.unit.did.<unitId2>",
"referenceId": "475dc098-2319-11ec-9621-0242ac130002"
}
],
"errors": [
{
"id": "amzn1.alexa.unit.did.<unitId3>",
"status": 400,
"errorCode": "Bad Request",
"errorDescription": "Request or recipient ID is malformed."
}
]
}
The following example shows a response when the notification failed to send to all the recipients. The reason for failure could be different for each recipient.
{
"type": "ALL_FAILED",
"message": "All messages failed to publish.",
"successResults": [
],
"errors": [
{
"id": "amzn1.alexa.unit.did.<unitId2>",
"status": 403,
"errorCode": "Forbidden",
"errorDescription": "Request is forbidden."
},
{
"id": "amzn1.alexa.unit.did.<unitId2>",
"status": 400,
"errorCode": "Bad Request",
"errorDescription": "Request or recipient ID is malformed."
},
{
"id": "amzn1.alexa.unit.did.<unitId3>",
"status": 400,
"errorCode": "Bad Request",
"errorDescription": "Unit already has active PersistentVisualAlert."
}
]
}
Response parameters
If the action is successful, the service sends back an HTTP 202 response. The following data is returned in JSON format by the service.
Field | Description | Type |
---|---|---|
|
Short description. |
String |
|
Detailed description of the result. |
String |
|
List of successfully processed units. |
Array |
|
Successfully processed unit ID. |
String |
|
Unique identifier for the unit. If a problem occurs, Amazon can use this value to troubleshoot the problem. |
String |
|
List of unsuccessful unit IDs. |
Array |
|
Unsuccessfully processed unit ID. |
String |
|
Error status. |
Integer |
|
Short error code. |
String |
|
Detailed description of the error for a unit. |
String |
Error response examples
If the action failed as whole, the service sends back an HTTP response other than 202. The following data is returned in JSON format by the service.
{
"type": "Unauthorized",
"message": "HTTP 401 Unauthorized"
}
Error response element
Field | Description | Type |
---|---|---|
|
Short description. |
String |
|
Detailed description of the result. |
String |
HTTP response codes
Status Code | Name | Description |
---|---|---|
202 |
Accepted |
The request is accepted. Status of individual recipient is either inside |
400 |
Bad Request |
The request is malformed or is missing one or more required parameters. |
401 |
Unauthorized |
The access token is missing, expired, or invalid. |
403 |
Forbidden |
The user doesn't have permission to perform the operation. |
429 |
Too many requests |
The request is throttled. |
500 |
Internal Server Error |
The request couldn't be handled because of an internal service error. |
503 |
Service Unavailable |
The server is temporarily unavailable. |
Delete notification by unit ID
Call DELETE /v3/notifications?recipients.id={unitid}&recipients.type=Unit¬ification.variants.type=DeviceNotification
to delete all notifications associated with a unit.
This operation is available in the following countries.
Healthcare | Hospitality | Senior Living | Core |
---|---|---|---|
US |
US, UK, FR, CA, IT, DE, ES, JP |
US, UK, FR, CA, IT, DE, ES, JP |
US |
Request format
DELETE /v3/notifications?recipients.id={unitid}&recipients.type=Unit¬ification.variants.type=DeviceNotification
Host: api.amazonalexa.com
Content-type: application/json
Authorization: Bearer {LWA Token}
Request path parameters
Field | Description | Type | Required |
---|---|---|---|
|
Unit ID, in the format |
String |
Yes |
|
Recipient type: |
String |
Yes |
|
Notification delivery type. Valid values: |
String |
Yes |
Request body examples
The request has no body.
Request body parameters
The request has no body.
Response header
Host
value is the same as the Host
value in the request.HTTP/1.1 202 Accepted
Host: api.amazonalexa.com
Content-Type: application/json
X-Amzn-RequestId: {request-id}
Response header parameters
Field | Description | Type |
---|---|---|
|
Unique identifier for the request. If a problem occurs, Amazon can use this value to troubleshoot the problem.. |
String |
Response body examples
A successful response doesn't contain a body. Upon successfully receiving a deletion request, the server returns an HTTP 202 OK status response. The server returns this response even if the specified unit doesn't have any of the specified notification type to delete.
Error response examples
If the action failed as whole, the service sends back an HTTP response other than 202. The following data is returned in JSON format by the service.
{
"type": "Unauthorized",
"message": "HTTP 401 Unauthorized"
}
Error response element
Field | Description | Type |
---|---|---|
|
Short description. |
String |
|
Detailed description of the result. |
String |
HTTP response codes
Status Code | Name | Description |
---|---|---|
202 |
Accepted |
The deletion request for the specified unit was accepted. All of the specified notification types for this unit are deleted. |
400 |
Bad Request |
The request is malformed or is missing one or more required parameters. |
401 |
Unauthorized |
The access token is missing, expired, or invalid. |
403 |
Forbidden |
The user doesn't have permission to perform the operation. |
429 |
Too many requests |
The request is throttled. |
500 |
Internal Server Error |
The request couldn't be handled because of an internal service error. |
503 |
Service Unavailable |
The server is temporarily unavailable. |
Delete all notifications
Call POST /v3/notifications/delete
to delete all notifications that are associated with the specified units.
This operation is available in the following countries.
Healthcare | Hospitality | Senior Living | Core |
---|---|---|---|
US |
US, UK, FR, CA, IT, DE, JP |
US, UK, FR, CA, IT, DE, JP |
US |
Request format
The following example shows how to delete device notifications.
POST /v3/notifications/delete
Host: api.amazonalexa.com
Content-type: application/json
Authorization: Bearer {LWA Token}
Request body examples
{
"recipients" : [
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId1}"
},
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId2}"
}
],
"notificationTypes" : ["PersistentVisualAlert"]
}
Request body parameters
Parameter | Description | Type | Required |
---|---|---|---|
|
List of IDs of units for which to delete notifications. Minimum size: 1. Maximum size: 100. |
Array |
Yes |
|
Type of recipient for which to delete notifications. Valid value: |
Enum |
Yes |
|
ID of the unit for which to delete notifications. Must be in the format |
String |
Yes |
|
Type of notification to delete. Valid values: |
Array |
Yes |
Response header
Host
value is the same as the Host
value in the request.HTTP/1.1 202 Accepted
Host: api.amazonalexa.com
Content-Type: application/json
X-Amzn-RequestId: {request-id}
Response header parameters
Field | Description | Type |
---|---|---|
|
Unique identifier for the request. If a problem occurs, Amazon can use this value to troubleshoot the problem. |
String |
Response body examples
A successful response doesn't contain a body. Upon successfully receiving a deletion request, the server returns an HTTP 202 OK status response.
Error response examples
If the action fails as whole, the service sends back an HTTP response other than 202.
For example, when authorization fails with a 401 response code, the following data is returned in JSON format.
{
"type": "Unauthorized",
"message": "The access token is missing, expired, or invalid.",
"errors": []
}
The following example shows the body of a 400 response when a specified unit ID is invalid.
{
"type": "Bad Request",
"message": "Invalid payload format, please check documentation.",
"errors": [{
"id": "amzn1.alexa.unit.did.{unitId1}",
"status": 400,
"errorCode": "Bad Request",
"errorDescription": "Invalid UnitId."
}]
}
The following example shows the body of a 400 response when you're not authorized to operate on one or more unit IDs.
{
"type": "Bad Request",
"message": "Invalid payload format, please check documentation.",
"errors": [{
"id": "amzn1.alexa.unit.did.{unitId1}",
"status": 403,
"errorCode": "Forbidden",
"errorDescription": "User not authorized"
},{
"id": "amzn1.alexa.unit.did.{unitId2}",
"status": 403,
"errorCode": "Forbidden",
"errorDescription": "User not authorized"
},{
"id": "amzn1.alexa.unit.did.{unitId3}",
"status": 403,
"errorCode": "Forbidden",
"errorDescription": "User not authorized"
}]
}
Error response element
Field | Description | Type |
---|---|---|
|
Short description. |
String |
|
Detailed description of the result. |
String |
|
List of unit IDs that failed to process along with the associated error information. |
String |
|
The unit ID that fails to process. |
String |
|
Error status code. |
Integer |
|
Code that indicates the error type. |
String |
|
Error description. |
String |
HTTP response codes
Status Code | Name | Description |
---|---|---|
202 |
Accepted |
The deletion request for a list of units is accepted and being processed. |
400 |
Bad Request |
The request is malformed or is missing one or more required parameters. |
401 |
Unauthorized |
The access token is missing, expired, or invalid. |
429 |
Too many requests |
The request is throttled. |
500 |
Internal Server Error |
The request couldn't be handled because of an internal service error. |
503 |
Service Unavailable |
The server is temporarily unavailable. |
Query persistent visual alerts
To query the persistent visual alerts present in a list of units, call POST /v3/notifications/query
.
This operation is available in the following countries.
Healthcare | Hospitality | Senior Living | Core |
---|---|---|---|
US |
US, UK, FR, CA, IT, DE, ES, JP |
US, UK, FR, CA, IT, DE, ES, JP |
US |
Request format
POST /v3/notifications/query HTTP/1.1
Host: api.amazonalexa.com
Accept: application/json
Authorization: Bearer {LWA Token}
Request body format
{
"query": {},
"paginationContext": {
"maxResults": 10,
"nextToken": "paginationTokenString"
}
}
Request parameters
Field | Description | Type | Required |
---|---|---|---|
|
Object that provides filtering conditions. This object has only one allowed field, which can be either The query must adhere to the following rules:
A A |
Object |
Yes |
|
Maximum number of items to return in one request. Minimum value: 1. Maximum value: 100. |
Integer |
No |
|
Token you use to retrieve subsequent data in the previous response, if applicable. This field must either be null or a valid value returned from the server. |
String |
No |
Query object
Field | Description | Type | Required |
---|---|---|---|
|
Conditions to apply using a logical |
Array |
No |
|
Conditions to apply using a logical |
Array |
No |
Request body example that gets active persistent visual alert notifications for one or more units
The following example gets active persistent visual alert notifications for one or more units.
{
"query": {
"and": [
{
"or": [
{
"match": {
"recipients.id": "U1"
}
},
{
"match": {
"recipients.id": "U2"
}
}
]
},
{
"match": {
"recipients.type": "Unit"
}
},
{
"match": {
"notification.variants.type": "PersistentVisualAlert"
}
}
]
},
"paginationContext": {
"maxResults": 10,
"nextToken": "paginationTokenString"
}
}
Request body example that gets active notifications using one or more reference IDs
The following example gets active notifications using one or more reference IDs.
{
"query": {
"or": [
{
"match": {
"notification.referenceId": "R1"
}
},
{
"match": {
"notification.referenceId": "R2"
}
}
]
},
"paginationContext": {
"maxResults": 10,
"nextToken": "paginationTokenString"
}
}
Response header
HTTP/1.1 200 OK
Host: api.amazonalexa.com
Content-Type: application/json
X-Amzn-RequestId: {request-id}
Response header parameters
Field | Description | Type |
---|---|---|
|
Unique identifier for the request. If a problem occurs, Amazon can use this value to troubleshoot the problem. |
String |
Response body example (success)
The following example shows a complete or partially successful response.
{
"paginationContext": {
"nextToken": "paginationTokenString"
},
"successResults": [
{
"recipients": [
{
"type": "Unit",
"id": "amzn1.alexa.unit.did.{unitId1}"
}
],
"notification": {
"variants": [
{
"type": "PersistentVisualAlert",
"content": {
"variants": [
{
"type": "V0Template",
"values": [
{
"locale": "en-US",
"document": {
"type": "Link",
"src": "doc://alexa/apl/documents/enterprise/notifications/persistentvisualalert/textWrappingTemplate"
},
"datasources": {
"displayText": {
"primaryText": "Example notification primary text.",
"secondaryText": "Example notification text."
},
"background": {
"backgroundImageSource": "https://www.example.com/image.jpg"
}
}
}
]
}
]
},
"dismissalTime": "2021-04-30T10:00:00.00Z"
}
],
"referenceId": "595973fd-5b66-4970-9401-example"
}
}
]
}
Response body example (error)
The following example shows an error response.
{
"type": "BAD_REQUEST",
"message": "Invalid payload format, please check documentation."
}
Response body parameters
Field | Description | Type |
---|---|---|
|
Object containing pagination information. If omitted, all evaluation results were already returned. |
Object |
|
Continuation token that you use in the next call to query persistent visual alerts. If this field is null, all evaluation results were already returned. If this field isn't null, there are more results in the next page. |
String |
|
List of persistent visual alert notifications that matched the query criteria. For the possible properties of a notification, see the request body for the Send notification operation. |
Array of objects |
HTTP response codes
Status Code | Name | Description |
---|---|---|
200 |
OK |
The request succeeded. |
400 |
Bad Request |
The request is malformed or is missing one or more required parameters. |
401 |
Unauthorized |
The access token is missing, expired, or invalid. |
403 |
Forbidden |
The user doesn't have permission to perform the operation. |
429 |
Too Many Requests |
Request is throttled. |
500 |
Internal Server Error |
The request couldn't be handled because of an internal service error. |
503 |
Service Unavailable |
Service is temporarily unavailable. |
Persistent visual alert templates
The following sections provide details about each of the available templates you can use for a persistent visual alert. Specify the template in the notification.variants[].content.variants[].values[].document.src
property of the Send notifications request body. Then set the fields for the template in the notification.variants[].content.variants[].values[].datasources
object.
About background images
For each of these templates, you can provide a background image with the background.backgroundImageSource
property. The template scales the image uniformly up or down to completely fill the screen ("best-fill"). As a result, if there is a mismatch between the aspect ratio of the image and the device screen, the image might get cut off.
For best results with images, consider the following recommendations:
- Avoid images with text that extends to the edges of the image, as this text might be truncated due to the scaling.
- If possible, test your images on the same device types used in your units.
- If separate units contain different devices, consider targeting the different units with separate persistent visual alerts so that you can optimize the images for the devices. This strategy works when all the devices in a given unit have the same aspect ratio.
- By default, the templates apply a scrim to the background image to make the text over the image easier to read. If the scrim makes the image too dark, you can turn it off by setting the
background.colorOverlay
property for the template tofalse
.
You can provide images in PNG or JPG format. The image files can't exceed 400 KB in size.
Text wrapping template data source
The text wrapping template has the following properties within the notification.variants[].content.variants[].values[].datasources
object.
Property name | Description | Type | Required? |
---|---|---|---|
|
URL for the attribution image to display. Provide either |
String |
No |
|
Attribution text displayed under the other text fields. Provide either |
String |
No |
|
URL for the background image. When choosing images, see the recommendations in About background images. |
String |
No |
|
When |
Boolean |
No, defaults to |
|
Header text displayed before all the other text fields. |
String |
No |
|
Hint text displayed at the bottom of the screen. |
String |
No |
|
Primary text to display. This text displays in a larger font than the rest of the text. |
String |
Yes |
|
Secondary text displayed under the primary text in a smaller font. |
String |
No |
|
Tertiary text displayed next to the secondary text. |
String |
No |
Media template data source
The media template has the following properties within the notification.variants[].content.variants[].values[].datasources
object.
Property name | Description | Type | Required? |
---|---|---|---|
|
URL for the attribution image to display. Provide either |
String |
No |
|
Attribution text displayed under the other text fields. Provide either |
String |
No |
|
URL for the background image. When choosing images, see the recommendations in About background images. |
String |
No |
|
When |
Boolean |
No, defaults to |
|
Header text displayed before all the other text fields. |
String |
No |
|
Hint text displayed at the bottom of the screen. |
String |
No |
|
Primary text to display. This text displays in a larger font than the rest of the text. |
String |
Yes |
|
Secondary text displayed under the primary text in a smaller font. |
String |
No |
|
Tertiary text displayed next to the secondary text. |
String |
No |
|
URL for the image thumbnail to display next to the text fields. |
String |
No |
Rating template data source
The rating template has the following properties within the notification.variants[].content.variants[].values[].datasources
object.
Property name | Description | Type | Required? |
---|---|---|---|
|
URL for the background image. When choosing images, see the recommendations in About background images. |
String |
No |
|
When |
Boolean |
No, defaults to |
|
Header text displayed before all the other text fields. |
String |
No |
|
Hint text displayed at the bottom of the screen. |
String |
No |
|
Primary text to display. This text displays in a larger font than the rest of the text. |
String |
Yes |
|
Number of stars for the rating. The rating number can be between one and five, and can include half stars, such as |
Number between one and five |
Yes |
|
Brief text to give context to the star rating. Must be fewer than eight characters. |
String |
Yes |
|
URL for the image thumbnail to display. |
String |
No |
Related topics
Last updated: Aug 07, 2024