Notifications API
VACANT
.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 only for devices with screens. A persistent visual alert is a notification that's displayed on the screen until it expires or the guest or resident dismisses it.
API endpoint
The endpoint of the Notifications API is https://api.amazonalexa.com
.
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 | Residential | Senior Living | Core |
---|---|---|---|---|
US |
US, UK, FR, CA, IT, DE |
US |
US, UK, FR, CA, IT, DE |
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/defaultTemplate"
},
"datasources": {
"displayText": {
"title": "Example notification title.",
"body": "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: |
Enum |
Yes |
|
Notification content helps developers specifying different variants of content for spoken and display purposes. |
Object |
Yes |
|
The locale-specific notification content to be delivered to the end user. |
Array |
Yes |
|
Type of content: |
Enum |
Yes |
|
Content values array. Each element in the array represents localized text input. |
Array |
Yes |
|
The locale in which the spoken text is rendered, in IETF BCP 47 format. |
String |
Yes |
|
Spoken text in plain text format. Maximum length is 1024 characters or 2048 bytes. |
String |
Yes |
|
For |
Object |
Yes, for |
|
For |
String |
Yes, for |
|
For |
String |
Yes, for |
|
For |
Object |
Yes, for |
|
For |
Object |
Yes, for |
|
For |
String |
Yes, for |
|
For |
String |
Yes, for |
|
Object that specifies different aspects of the background. |
Object |
No |
|
URL for the background image. |
String |
Yes, if you include |
|
For |
String |
No |
|
For |
String |
No |
Response header
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
All recipient processed 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": [
]
}
Failed to publish for some recipient.
{
"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."
}
]
}
All message failed to publish. 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 | Residential | Senior Living | Core |
---|---|---|---|---|
US |
US, UK, FR, CA, IT, DE |
US |
US, UK, FR, CA, IT, DE |
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
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 | Residential | Senior Living | Core |
---|---|---|---|---|
US |
US, UK, FR, CA, IT, DE |
US |
US, UK, FR, CA, IT, DE |
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
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 | Residential | Senior Living | Core |
---|---|---|---|---|
US |
US, UK, FR, CA, IT, DE |
US |
US, UK, FR, CA, IT, DE |
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/defaultTemplate"
},
"datasources": {
"displayText": {
"title": "Example title",
"body": "Example body"
}
},
"background": {
"backgroundImageSource": "https://s3.amazon.com/example_background_large.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. |
Array |
|
Recipient of the notification. |
Array |
|
Recipient type: |
Enum |
|
Unit ID, in the format |
String |
|
Objects that contain units and active notifications. |
Array |
|
Notification delivery type: |
Enum |
|
Object that enables you to specify different variants of notification content for spoken and display purposes. |
Object |
|
The locale-specific notification content to be delivered to the end user. |
Array |
|
Type of content: |
Enum |
|
Content values array. Each element in the array represents localized text input. |
Array |
|
Locale in which the spoken text is rendered, in IETF BCP 47 format. |
String |
|
For |
Object |
|
For |
String |
|
For |
String |
|
For |
Object |
|
For |
Object |
|
For |
String |
|
For |
String |
|
Object that specifies different aspects of the background. |
Object |
|
URL for the background image. |
String |
|
For |
String |
|
For |
String |
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. |
Last updated: Mar 15, 2023