Amazon Developer

as

Settings
Sign out
Notifications
Alexa
Amazon Appstore
Ring
AWS
Documentation
Support
Contact Us
My Cases
Category SDK
MCP toolkit
Certify
Resources
Skip to main content
This guide provides the steps to build an add-on with the Category SDK.

Prerequisites

Before you begin, make sure you have set up your development environment. For details, see Set Up Your Development Environment. You choose the category for your add-on when you initialize your projet. You can select from one of the following categories:
  • Food Ordering
  • Home Services
  • Local Booking
  • Restaurant Reservation
  • Ticketing
This doc explains how to create the add-on manually, using the Alexa AI CLI. Alternatively. you can use an AI coding agent instead. For details, see Create a Category Add-on Using an AI Coding Agent. You can implement the handlers manually or by using an AI coding agent to generate the code.

High-level steps for building a category add-on

You complete the following steps to build your add-on.
  1. Initialize a new project for your intended category. This provides you with the initial starter code. See Initialize your add-on project.
  2. Implement the Service Provider Interfaces (SPIs) to call your APIs. See Implement the SPI handlers.
  3. Configure the add-on manifest file with required metadata for your add-on. See Configure the add-on manifest.
  4. Configure account linking if needed. Account linking is required for operations that modify user data.
  5. Build and deploy the add-on for testing. See Deploy the add-on.
  6. For categories that require local search, such as restaurant reservation, define a test Point of Interest (POI) catalog and associate it with your add-on. See Prepare Point of Interest (POI) data
  7. Test your add-on. You both test locally to validate your SPI implementation, and also test in the web simulator and on an Alexa device. See Test your add-on.
  8. Submit the add-on for certification. See Certification
The following diagram shows how category add-ons work.

Category add-on flow

Initialize your add-on project

You use the Alexa AI CLI to create a new add-on project. This step installs a category-specific starter package and its dependencies. In this release, you can choose from the following categories:
  • Food Ordering
  • Home Services
  • Local Booking
  • Restaurant Reservation
  • Ticketing
This release supports typescript for the programming language, and cdk for the backend. Open a command prompt and navigate to the directory where you want to create the add-on. Run the alexa-ai new action command. Respond to the prompts in the command line wizard.
The following example shows completing this wizard for restaurant reservation add-on. The following example shows how to complete this wizard for the restaurant reservation add-on. Use your business name (such as Uber, OpenTable) for the add-on display name. Alternatively, you can use “AddOnTest1” or “AddOnTest2” if you want to create multiple add-ons.
The new project has the following structure.

Implement the SPI handlers

The starter package provides stub implementations with mock data in the action/<category-name>/src/operations directory. You replace the mock logic in these files with real calls to your APIs. Architecture pattern
Handler files The handler file for each operation is in action/<category-name>/src/handlers. These files are generated and you don’t normally need to make changes to them.
Operation files For each operation in the relevant SPI, you provide calls to your API. The operation files are in action/<category-name>/src/operations.
See the following tables for the list of operations for each category.
OperationPurpose
BatchGetMenuItemsRetrieve detailed information for multiple menu items
CancelPurchaseCancel an in-progress purchase
CreateCartItemAdd a menu item selection to a cart
CreatePurchaseCreate a new purchase (checkout session)
DeleteCartItemRemove an item from a cart
GetAddressesGet saved delivery addresses for the user
GetMenuItemGet details and customization options for a menu item
GetPaymentMethodsGet saved payment methods for the user
GetPurchaseGet details of an in-progress purchase
GetRestaurantGet details for a specific restaurant
GetRestaurantAvailabilityCheck restaurant availability for ordering
PreviewPurchaseGenerate a checkout preview before submission
RecreatePurchaseRecreate a purchase from a previous order
SearchOrdersSearch for placed orders
SearchPurchasesSearch for active purchases (in-progress checkouts)
SubmitPurchaseSubmit a purchase and place the order
UpdateCartItemUpdate a cart item with new selections
UpdatePurchaseUpdate payment, tip, or fulfillment details
For the full list of operations, see Food Ordering SPI.
Unit testing The starter package includes test stubs in action/<category-name>/tests/ for each operation. Update these with test cases that cover your actual business logic. Use the following command to run the tests:

Add-on configuration

Configure the add-on manifest

Update addon-package/addon.json with your brand information and metadata for your add-on. The following tables show the manifest fields.

Top-level fields

FieldDescriptionRequired
manifestVersionSchema version (e.g., "1.0")Yes
storeListing.distributionCountriesCountry codes where add-on is available (only "US" for initial launch)Yes
storeListing.localesLocale-keyed store metadata (at least one required; "en-US" for launch)Yes
permissionsContains a usage description and the aggregated list of all permission scopes required by the add-on. Not required if your your add-on doesn’t require any customer data.No
permissions.localesLocale-keyed object containing localizable permission properties. At least one required: en-US for initial launch.Yes
permissions.locales.<locale>.usageDescriptionDescription of how your add-on uses the requested customer data. Shown to customers in the consent prompt to help them make an informed decision. Max 200 characters.Yes
permissions.scopes[].nameArray of scopes. Each scope is an object with a name field.Yes
integrationsArray of integration entries (at least one required).Yes

Per-locale fields

These fields are under storeListing.locales.en-US.
FieldDescriptionRequired
name.valueDisplay name in Alexa+ Store (max 30 chars)Yes
name.spokenFormVoice-friendly invocation name if different from display name (e.g., “Verbo” for VRBO)No
shortDescriptionSummary shown in add-on list (max 123 chars)Yes (on submit)
fullDescriptionFull description with limited markup support: \n, - , **bold** (max 4000 chars)Yes (on submit)
examplePhrasesSample utterances to invoke add-on (min 3, max 4 items, max 200 chars each)Yes (on submit)
recentChangesUpdates made with the latest releaseYes (on submit)
mediaAssets.icons.lightLight theme icons — all sizes required: 72x72, 64x64, 88x88, 126x126, 180x180, 241x241Yes (on submit)
mediaAssets.icons.darkDark theme icons — same sizes as lightNo
mediaAssets.carouselImagesCarousel images for store page (600x900 px, max 5, with altText)Yes (on submit)
mediaAssets.bannerImagesHero images for mobile/tablet (1200x600 and 1200x300, with altText)No
privacyAndCompliance.privacyPolicyUrlHTTPS URL to privacy policyYes (on submit)
privacyAndCompliance.termsOfUseUrlHTTPS URL to terms of useYes (on submit)
For your media assets, note the following requirements:
  • You must use an internet-accessible endpoint URL. Alexa copies the content and hosts it during deploy.
  • Logos are mandatory for the Category SDK and must be included for you to deploy your add-on.
Permissions: Pre-declared per template based on SPI requirements.

SPI configuration

The starter package includes the file addon-package/action/<SPI>-config.json. Don’t edit this file directly. The alexa-ai deploy command overwrites the contents of this file using config_builder.ts.

Deploy the add-on

You deploy your add-on through three separate steps.
  1. Deploy your backend infrastructure to AWS with basic authentication enabled for testing purposes.
  2. Deploy your backend infrastructure to AWS with basic authentication disabled.
  3. Deploy your add-on manifest to Alexa+.

Install dependencies and build code

Registry access was configured when you ran the script to configure npm for the private CodeArtifact registry. Before bootstrapping, review the stack name in action/infrastructure/cdk/bin/app.ts. The default name is shared across all projects created from this template. If multiple add-ons use the same stack name in the same AWS account, they share one CloudFormation stack — updating or destroying it affects all of them. Rename it to something unique, such as MyRestaurantApp-AddOn. Use the following commands to install project dependencies:

Deploy AWS infrastructure for endpoint testing

You deploy your Lambda functions and API Gateway to your own AWS account with basic authentication enabled. This lets you test your API endpoint and validate SPI contract compliance. Your add-on doesn’t accept actual Alexa requests during this phase. Set your basic auth credentials as environment variables:
After successful deployment, the terminal outputs your API Gateway endpoint:
Test your endpoint using the Interface Validation Test, as described in Run the interface test tool to validate your SPI implementation.

Deploy AWS infrastructure

Once you have verified that your endpoint works correctly, you can deploy again basic auth disabled. Run the following command:

Update endpoint configuration

Update action/<category-name>/src/config_builder.ts with your actual endpoint:

Deploy the add-on

Run the following command to deploy your add-on.
On first deployment, this creates a new add-on ID (stored in .alexa-ai/config.json). Subsequent deployments create new versions. Use --ignore-hash to force a redeploy even if no manifest changes are detected:

Check for library updates

Use standard npm tooling to check for outdated dependencies:
This queries the CodeArtifact registry for newer versions of your @alexa-ai/* dependencies. To update:
Alternatively, use your AI coding tool (agentic workflow) to run npm outdated, identify updates, and apply the necessary package.json changes. After updating dependencies, redeploy: npm run build && npm run deploy && alexa-ai deploy --ignore-hash

Prepare Point of Interest (POI) data

Point of Interest (POI) data is required for categories that involve local search, such as Restaurant Reservations. Test data enables sandboxed (isolated) testing before certification. Note that test catalogs are scoped to the add-on. If multiple developer accounts upload catalogs for the same add-on, the latest upload overrides any previous uploads. All accounts access the same catalog when testing in simulator. For the accepted POI data format, refer to Point of Interest Catalog Schema. When you upload your catalog, you use the --usage parameter to specify whether it is test or production data. Use the test usage during development and isolated testing. To provide your POI data, you define a catalog and associate it with your add-on. Then, you upload your data. You can upload your data multiple times, overwriting the previous version.

Define a catalog and associate it with your add-on.

Create the test catalog with the create-catalog command.
Associate catalog with your add-on with the associate-catalog-with-addon command.

Upload test data

Upload the data with the upload-catalog command. You can do the upload repeatedly to modify test data. Any new catalog upload replaces the previously uploaded catalog.
Use the get-content-upload-by-id command to check the status of the upload.
For the full POI schema and field definitions, see Point of Interest Catalog Schema.

Test your add-on

After you deploy, test your add-on to validate your SPI implementation, verify end-to-end functionality, and confirm account linking works correctly. For details, see Test Your Category Action Add-on.

Ingest Production POI Data

Before you submit your add-on for certification, ingest your production POI data. The flow is the same as test data ingestion but uses the production --usage value. (Alexa.Catalog.PointOfInterest) Create the catalog with the create-catalog command.
Associate catalog with your add-on with the associate-catalog-with-addon command.
Upload the data with the upload-catalog command. Upload production data at a regular cadence to ensure catalog is up-to-date.
Use the get-content-upload-by-id command to check the status of your upload.
Production catalogs use --usage Alexa.Catalog.PointOfInterest instead of Alexa.Catalog.PointOfInterest.Test. Production POI data is required before certification for categories involving local search.

Submit your add-on for certification

See Alexa+ Add-on Certification Guidelines.
Last modified on August 31, 2026