Skill Development Notifications REST API Reference
Use the Skill Development Notifications Service (SDNS) REST API to create and manage subscribers and subscriptions for skill development notifications. SDNS is a message delivery system for Alexa skill development events.
If you develop Alexa skills by using the Alexa Skill Management API (SMAPI) or the Alexa Skills Kit Command-Line Interface (ASK CLI), you can use the SDNS to notify you about Alexa skill development events. Before you use the SDNS REST API, you must create an Amazon Simple Notification Service (SNS) topic to receive notifications.
For an overview of SDNS and the steps to set up notifications, see Use the Alexa Skill Development Notifications. For more details about the skill development events, see Alexa Skill Development Event Schemas.
API endpoint
The endpoint of the SDNS 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). For details, see SDNS Prerequisites.
Operations
The SDNS API includes the following operations.
Operation | HTTP method and URI |
---|---|
| |
| |
| |
| |
| |
` GET /v0/developmentEvents/subscriptions/{subscriptionId}` | |
| |
| |
| |
|
Create subscriber
Create a subscriber to the specified the Amazon SNS topic. You use the subscriber to create a subscription to skill development events.
When you create a subscriber, SDNS sends an empty JSON object to the endpoint that you define in the request. This empty notification enables you to verify that you set up the subscriber correctly. If you set up any form of Amazon SNS topic notification, such as email, mobile SMS, or another channel, you receive this empty object through that channel.
Request
To create a subscriber, you make a POST
request to the developmentEvents/subscribers
resource.
Request path and header example
POST /v0/developmentEvents/subscribers
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Header |
String |
Yes |
Request body example
{
"name": "subscriber.name.1",
"vendorId": "your.vendor.id.1",
"endpoint": {
"uri": "https://sns.amazonaws.com/example.topic",
"authorization": {
"type": "AWS_IAM",
"arn": "arn:aws:iam::us-east-1:1"
}
}
}
Request body properties
Property | Description | Type | Required |
---|---|---|---|
|
Identifies the vendor to which the SNS topic belongs. |
String |
Yes |
|
Name for the subscriber. |
String |
Yes |
|
Defines the SNS endpoint to receive the notifications, as well as the authorization required to publish to that endpoint. |
Object |
Yes |
|
URI of the endpoint that receives the notifications. |
String |
Yes |
|
Describes the authorization required to publish a notification to the endpoint. |
Object |
Yes |
|
Specifies the type of authorization. |
String |
Yes |
|
Amazon Resource Name (ARN) for the AWS Identity and Access Management (IAM) role to use for authentication. |
String |
Yes |
Response
A successful response returns HTTP 201 Created
, along with a Location
parameter in the response header that contains the subscriberId
URL to retrieve the subscriber.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
The response has no body.
Response body properties
The response has no body.
HTTP status codes
Status | Description |
---|---|
|
Subscriber created successfully. The response header contains a
|
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
Create subscription
Create a new subscription for the specified subscriber. The subscription defines the events that trigger a notification to the subscriber.
Request
To create a subscription, you make a POST
request to the developmentEvents/subscriptions
resource.
Request path and header example
POST /v0/developmentEvents/subscriptions
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Header |
String |
Yes |
Request body example
{
"vendorId": "your.vendor.id.1",
"subscriberId": "amzn1.ask-subscriber.1",
"name": "your.subscription.name",
"events": [
"AlexaDevelopmentEvent.SkillPublish",
"AlexaDevelopmentEvent.SkillCertification"
]
}
Request body properties
Property | Description | Type | Required |
---|---|---|---|
|
Identifies the vendor to which the subscription belongs. |
String |
Yes |
|
Identifies the subscriber to receive the notifications. |
String |
Yes |
|
Name for the subscription. |
String |
Yes |
|
List of skill development events that trigger notifications to the subscriber endpoint. For more details about events, see Alexa Skill Development Event Schemas. |
Array of strings |
Yes |
Response
A successful response returns HTTP 201 Created
, along with a Location
parameter in the response header that contains the subscriptionId
URL to retrieve the subscription.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
The response has no body.
Response body properties
The response has no body.
HTTP status codes
Status | Description |
---|---|
|
Subscription created successfully. The response header contains a
|
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
Delete subscriber
Deletes the subscriber with the specified subscriberId
from the topic. To delete a subscriber, you must delete the associated subscriptions first.
Request
To remove a subscriber, you make a DELETE
request to the developmentEvents/subscribers
resource.
Request path and header example
DELETE /v0/developmentEvents/subscribers/{subscriberId}
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Path |
Identifies the subscriber to an SNS topic. |
String |
Yes |
|
Header |
String |
Yes |
Request body example
The request has no body.
Request body properties
The request has no body.
Response
A successful response returns HTTP 204 No Content
.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
The response has no body.
Response body properties
The response has no body.
HTTP status codes
Status | Description |
---|---|
|
Subscriber deleted successfully. |
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
Delete subscription
Delete the specified subscription. The vendor who created the subscriber and the vendor that published the event can delete a subscription.
Request
To delete a subscription, you make a DELETE
request to the developmentEvents/subscriptions
resource.
Request path and header example
DELETE /v0/developmentEvents/subscriptions/{subscriptionId}
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Path |
Identifies the subscription. |
String |
Yes |
|
Header |
String |
Yes |
Request body example
The request has no body.
Request body properties
The request has no body.
Response
A successful response returns HTTP 204 No Content
.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
The response has no body.
Response body properties
The response has no body.
HTTP status codes
Status | Description |
---|---|
|
Subscription deleted successfully |
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
Get subscriber
Get the details for the specified subscriber.
Request
To get a subscriber, you make a GET
request to the developmentEvents/subscribers
resource.
Request path and header example
GET /v0/developmentEvents/subscribers/{subscriberId}
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Accept: application/json
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Path |
Identifies the subscriber to an SNS topic. |
String |
Yes |
|
Header |
String |
Yes |
Request body example
The request has no body.
Request body properties
The request has no body.
Response
A successful response returns HTTP 200 OK
, along with the subscriber information.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
{
"subscriberId": "amzn1.ask-subscriber.1",
"name": "subscriber.name.1",
"vendorId": "your.vendor.id.1",
"endpoint": {
"uri": "https://sns.amazonaws.com/example.topic",
"authorization": {
"type": "AWS_IAM",
"arn": "arn:aws:iam::us-east-1:1"
}
}
}
Response body properties
Property | Description | Type |
---|---|---|
|
Identifies the subscriber to an SNS topic. |
String |
|
Name for the subscriber. |
String |
|
Identifies the vendor to which the SNS topic belongs. |
String |
|
Defines the SNS endpoint to receive the notifications, as well as the authorization required to publish to that endpoint. |
Object |
|
URI of the endpoint that receives the notifications. |
String |
|
Describes the authorization required to publish a notification to the endpoint. |
Object |
|
Specifies the type of authorization. |
String |
|
Amazon Resource Name (ARN) for the AWS Identity and Access Management (IAM) role to use for authentication. |
String |
HTTP status codes
Status | Description |
---|---|
|
Response body contains the subscriber information. |
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
Get subscription
Get the details for the specified subscription.
Request
To get a subscription, you make a GET
request to the developmentEvents/subscriptions
resource.
Request path and header example
GET /v0/developmentEvents/subscriptions/{subscriptionId}
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Accept: application/json
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Path |
Identifies the subscription. |
String |
Yes |
|
Header |
String |
Yes |
Request body example
The request has no body.
Request body properties
The request has no body.
Response
A successful response returns HTTP 200 OK
, along with the subscription information.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
{
"vendorId": "your.vendor.id.1",
"subscriberId": "amzn1.ask-subscriber.1",
"subscriptionId": "amzn1.ask-subscription.1",
"name": "your.subscription.name",
"events": [
"AlexaDevelopmentEvent.SkillPublish",
"AlexaDevelopmentEvent.SkillCertification"
]
}
Response body properties
Property | Description | Type |
---|---|---|
|
Identifies the vendor to which the subscription belongs. |
String |
|
Identifies the subscriber to receive the notifications. |
String |
|
Identifies the subscription. |
String |
|
Name for the subscription. |
String |
|
List of skill development events that trigger notifications to the subscriber endpoint. For more details about events, see Alexa Skill Development Event Schemas. |
Array of strings |
HTTP status codes
Status | Description |
---|---|
|
Response body contains the subscription information. |
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
List subscribers
List the subscribers for the specified vendor.
Request
To list subscribers, you make a GET
request to the developmentEvents/subscribers
resource.
Request path and header example
GET /v0/developmentEvents/subscribers?vendorId={vendorId}&maxResults={maxResults}&nextToken={nextToken}
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Accept: application/json
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Query |
Identifies the vendor to which the SNS topic belongs. |
String |
Yes |
|
Query |
Maximum number of results to return in the response. |
Integer |
No |
|
Query |
Token from the previous response. If not included, the Alexa service returns the first page of results. |
String |
No |
|
Header |
String |
Yes |
Request body example
The request has no body.
Request body properties
The request has no body.
Response
A successful response returns HTTP 200 OK
, along with a list of subscribers for the specified vendor.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
{
"subscribers": [{
"subscriberId": "amzn1.ask-subscriber.1",
"name": "subscriber.name.1",
"clientId": "your.client.id.1",
"status": "ACTIVE",
"endpoint": {
"uri": "https://sns.amazonaws.com/example.topic",
"authorization": {
"type": "AWS_IAM",
"arn": "arn:aws:iam::us-east-1:1"
}
}
},
{
"subscriberId": "amzn1.ask-subscriber.2",
"name": "subscriber.name.2",
"clientId": "your.client.id.1",
"status": "ACTIVE",
"endpoint": {
"uri": "https://sns.amazonaws.com/example.topic",
"authorization": {
"type": "AWS_IAM",
"arn": "arn:aws:iam::us-east-1:1"
}
}
}
],
"nextToken": "string",
"_links": {
"self": {
"href": "string"
},
"next": {
"href": "string"
}
}
}
Response body properties
Property | Description | Type |
---|---|---|
|
List of subscribers for the specified vendor. |
Array of objects |
|
Identifies the subscriber to an SNS topic. |
String |
|
Name for the subscriber. |
String |
|
Indicates the current status of the subscriber. |
String |
|
Unique identifier for the subscriber. |
String |
|
Defines the SNS endpoint to receive the notifications, as well as the authorization required to publish to that endpoint. |
Object |
|
URI of the endpoint that receives the notifications. |
String |
|
Describes the authorization required to publish a notification to the endpoint. |
Object |
|
Specifies the type of authorization. |
String |
|
Amazon Resource Name (ARN) for the AWS Identity and Access Management (IAM) role to use for authentication. |
String |
|
(Optional) Included when there are more results to return. Use this value in a subsequent request. |
String |
|
Links for item navigation. |
_links object |
HTTP status codes
Status | Description |
---|---|
|
Response body contains a list of subscribers defined for the specified vendor. |
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
List subscriptions
List the subscriptions for the specified vendor, specified subscriber or both.
Request
To list subscriptions, you make a GET
request to the developmentEvents/subscriptions
resource.
Request path and header example
GET /v0/developmentEvents/subscriptions?vendorId={vendorId}&subscriberId={subscriberId}&maxResults={maxResults}&nextToken={nextToken}
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Accept: application/json
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Query |
Identifies the vendor to which the subscription belongs. |
String |
No |
|
Path |
Identifies the subscriber to an SNS topic. |
String |
No |
|
Query |
Maximum number of results to return in the response. |
Integer |
No |
|
Query |
Token from the previous response. If not included, the Alexa service returns the first page of results. |
String |
No |
|
Header |
String |
Yes |
Request body example
The request has no body.
Request body properties
The request has no body.
Response
A successful response returns HTTP 200 OK
, along with a list of subscriptions.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
{
"subscriptions": [{
"subscriptionId": "amzn1.ask-subscription.1",
"name": "subscription.name.1",
"subscriberId": "amzn1.ask-subscriber.1",
"vendorId": "your.vendor.id.1",
"events": [
"AlexaDevelopmentEvent.SkillPublish",
"AlexaDevelopmentEvent.SkillCertification"
]
},
{
"subscriptionId": "amzn1.ask-subscription.2",
"name": "subscription.name.2",
"subscriberId": "amzn1.ask-subscriber.1",
"vendorId": "your.vendor.id.1",
"events": [
"AlexaDevelopmentEvent.ManifestUpdate"
]
}
],
"nextToken": "string",
"_links": {
"self": {
"href": "string"
},
"next": {
"href": "string"
}
}
}
Response body properties
Property | Description | Type |
---|---|---|
|
List of subscribers for the specified vendor. |
Array of objects |
|
Identifies the subscription. |
String |
|
Name of the subscription. |
String |
|
Identifies the subscriber to an SNS topic. |
String |
|
List of skill development events that trigger notifications to the subscriber endpoint. For more details about events, see Alexa Skill Development Event Schemas. |
Array of strings |
|
(Optional) Included when there are more results to return. Use this value in a subsequent request. |
String |
|
Links for item navigation. |
_links object |
HTTP status codes
Status | Description |
---|---|
|
Response body contains a list of subscriptions for the specified filter. |
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
Update subscriber
Update the properties of the specified subscriber. You can update the subscriber if your developer account is part of the same vendor ID as the subscriber. This operation overwrites the existing subscriber values. You can't update the subscriberId
.
Request
To update a subscriber, you make a PUT
request to the developmentEvents/subscribers
resource.
Request path and header example
PUT /v0/developmentEvents/subscriptions/{subscriptionId}
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Path |
Identifies the subscriber to an SNS topic. |
String |
Yes |
|
Header |
String |
Yes |
Request body example
{
"name": "subscriber.name.1",
"endpoint": {
"uri": "https://sns.amazonaws.com/example.topic",
"authorization": {
"type": "AWS_IAM",
"arn": "arn:aws:iam::us-east-1:1"
}
}
}
Request body properties
Property | Description | Type | Required |
---|---|---|---|
|
Name for the subscriber. |
String |
Yes |
|
Defines the SNS endpoint to receive the notifications, as well as the authorization required to publish to that endpoint. |
Object |
Yes |
|
URI of the endpoint that receives the notifications. |
String |
Yes |
|
Describes the authorization required to publish a notification to the endpoint. |
Object |
Yes |
|
Specifies the type of authorization. |
String |
Yes |
|
Amazon Resource Name (ARN) for the AWS Identity and Access Management (IAM) role to use for authentication. |
String |
Yes |
Response
A successful response returns HTTP 204 No Content
.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
The response has no body.
Response body properties
The response has no body.
HTTP status codes
Status | Description |
---|---|
|
Subscriber updated successfully. |
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
Update subscription
Update the subscription name or list of events. This operation overwrites the existing subscription values. You can't update the subscriberId
or subscriptionId
.
Request
To update a subscription, you make a PUT
request to the developmentEvents/subscriptions
resource.
Request path and header example
PUT /v0/developmentEvents/subscriptions/{subscriptionId}
Host: api.amazonalexa.com
Content-Type: application/json
Authorization: Bearer {access token}
Request path and header parameters
Parameter | Located in | Description | Type | Required |
---|---|---|---|---|
|
Path |
Identifies the subscription. |
String |
Yes |
|
Header |
String |
Yes |
Request body example
{
"name": "subscriber.name.1",
"endpoint": {
"uri": "https://sns.amazonaws.com/example.topic",
"authorization": {
"type": "AWS_IAM",
"arn": "arn:aws:iam::us-east-1:1"
}
}
}
Request body properties
Property | Description | Type | Required |
---|---|---|---|
|
Name for the subscription. |
String |
Yes |
|
List of skill development events that trigger notifications to the subscriber endpoint. For more details about events, see Alexa Skill Development Event Schemas. |
Array of strings |
Response
A successful response returns 204 No Content
.
On error, the response returns the appropriate HTTP status code and includes a response body with an error code and human readable message.
Response body example
The response has no body.
Response body properties
The response has no body.
HTTP status codes
Status | Description |
---|---|
|
Subscription updated successfully. |
|
Indicates that one or more properties in the request body aren't valid.
|
|
Request didn't include the authorization token, or the included token expired or isn't valid. Or, you don't have access to the resource. |
|
Indicates that the authorization token is valid, but the requested operation isn't allowed. |
|
Requested resource not found. |
|
Permitted rate limit, specified as number of requests per unit of time, exceeded. Retry the request by using exponential back-off. |
|
Error occurred on the server. Retry the request by using exponential back-off. |
|
Server is down for maintenance, overloaded, or otherwise unavailable to handle the incoming request. |
Related topics
Last updated: Aug 01, 2024