Prerequisites
Quick Subscribe is a feature contained within the Appstore In-App Purchasing (IAP) API. Before you set up Quick Subscribe, you must do the following:- Integrate with the Appstore IAP Library version 2.12.2
@amazon-devices/keplerscript-appstore-iap-lib": "~2.12.2"or higher. - Have active in-app items.
Considerations
Before your start, review the following considerations and recommendations:- Optimize your app’s size to provide faster download and install times. It’s generally recommended to minimize the size of an app to 50 MB or less. Reducing the app size increases accessibility by allowing more users to install it and decreases the time required for installation and initial use. Additionally, smaller apps are less likely to be uninstalled due to storage constraints.
- The offers you present through Quick Subscribe work best for paid subscriptions. Quick Subscribe supports apps that offer a free trial. However, if your app uses a freemium model for acquisition, Quick Subscribe might not be the most optimal fit for your app. In a freemium model, the app itself is free and users can access a basic set of content and services without a paid subscription, but you charge a premium for additional content or advanced functionality.
- A purchase made through Quick Subscribe happens outside of your app. In the standard IAP flow without Quick Subscribe, a customer signs in to your app and then makes a purchase from within your app. However, with Quick Subscribe, the customer makes the purchase outside of the app first, after which the app opens and signs them in. Therefore, implementing Quick Subscribe has some differences from the standard IAP implementation. For help with integrating Quick Subscribe, use the steps on this page.
Step 1: Configure Quick Subscribe in the Developer Console
To configure Quick Subscribe for your app- Go to the Developer Console dashboard, and sign in to your account.
- From the navigation bar, choose My Apps.
- Find your app in the list and expand the row.
- In the In-App Items column, click the link to open the In-App Items screen.
- Select Create Quick Subscription.
-
An overlay pop-up appears as shown in the following image.
In the Choose default subscription drop-down, the list is populated with your existing IAP subscriptions. Choose the subscription on which you want to enable Quick Subscribe.

Create new quick subscription dialog
- In the Select term drop-down, choose a term for the quick subscription.
- If you would like to offer additional subscriptions for Quick Subscribe, select Add another quick subscription.
-
Choose your target devices for Quick Subscribe by checking the boxes.
- For Fire TV devices, you can choose to specifically target either Fire OS devices, Vega OS devices, or both:
- To target only Fire OS devices, check only Fire TV (Fire OS).
- To target only Vega OS devices, check only Fire TV (Vega).
- To target both Fire OS and Vega OS devices, check both Fire TV (Fire OS) and Fire TV (Vega).
- For Fire TV devices, you can choose to specifically target either Fire OS devices, Vega OS devices, or both:
-
Choose whether to create the quick subscription for Live App Testing (LAT) only or for both LAT and your live app.
- To create a quick subscription for LAT only, select Create Quick Subscription for Test.
- To create the quick subscription for both LAT and the live app, select Create Quick Subscription for Test and Live.
Step 2: Configure security profile
For Quick Subscribe to properly work, you must set up a security profile for your app. The security profile is essential because it allows Amazon to securely share customer data with you and lets you automatically create an account and sign in a user. A security profile associates Amazon data, including security credentials, with one or more apps. For example, if you have two apps, “My Game - Free” and “My Game - HD”, they can share data by using the same security profile. Name your security profile in a way that helps identify your app or app family. For more details, see Security Profile. To configure a security profile for your app- Go to the Developer Console dashboard, and sign in to your account.
- From the navigation bar, choose My Apps, and then select your app.
- Select App Services and scroll to the Security Profile section.
- Click Select existing security profile or create new to expand the options.
- Use the drop-down to select the security profile that you want to map to this app, then click Enable Security Profile. Alternatively, you can create a new security profile by clicking Create Security Profile.
Step 3: Implement getPurchaseUpdates
ThegetPurchaseUpdates() method retrieves the customer’s receipts. When a customer makes a purchase through Quick Subscribe, the purchase happens outside of the app. Therefore, Quick Subscribe requires that your app calls getPurchaseUpdates() to verify the customer’s purchase status. With this call, you can make sure that the customer receives the content that they purchased when the app opens. If you fail to properly implement getPurchaseUpdates(), it can prevent a customer from accessing the content that they purchased.
Use the useIapPurchaseUpdates() hook to call the getPurchaseUpdates() method. The hook takes one boolean parameter, reset, with the following behavior:
- When set to
false: Appstore returns only the new receipts that your app hasn’t sent a fulfillment result for. These receipts appear in everygetPurchaseUpdates(false)call until your app acknowledges the receipts by sending a fulfillment result of eitherFULFILLEDorUNAVAILABLE. - When set to
true: Appstore returns all of the receipts for this user.
Implementation requirements
Follow these requirements to properly implement thegetPurchaseUpdates() method.
- You must call the
useIapPurchaseUpdates()hook in your main screen component. - To get only the latest receipts that your app hasn’t sent a fulfillment result for, use the
falseflag when callinggetPurchaseUpdates(). If you use thetrueflag, the response returns the full history of receipts, and you would have to add extra filtering logic to handle the response. - Add a “Restore Purchases” option in your app which calls
useIapPurchaseUpdates()with thetrueflag when selected by the customer. - The receipts received through
getPurchaseUpdates()must always be persisted and must be mapped to the app’s login ID. Use this mapping to unlock the subscribed content to customers when they open the app.
Step 4: Integrate with RVS
The Receipt Verification Service (RVS) lets you validate purchases made by your app’s users. For details about RVS, see . When you make a request to the RVS server, the JSON response returned includes apurchaseMetadataMap field. If the purchase was initiated using Quick Subscribe, the purchaseMetadataMap appears as {"QuickSubscribe":"true"}, as seen in the following example.
purchaseMetadataMap appears as null. The following table provides a description for all fields in the response object.
Step 5: Send fulfillment result to Amazon
When you send a fulfillment result, you ensure that Amazon can confirm whether users can access the content that they paid for. Always communicate the fulfillment result to Amazon. To do this, use thenotifyFulfillment() method included in the PurchasingService. If you don’t send a fulfillment result, Amazon automatically cancels the subscription to make sure that customers don’t continue to pay for subscriptions that aren’t fulfilled.
After a customer signs in, call notifyFulfillment() with status FULFILLED when the subscription is fulfilled. If the customer already has a subscription that wasn’t purchased through Amazon, call notifyFulfillment() with status UNAVAILABLE to indicate that the customer has signed in, but the purchase isn’t applicable.
If you’ve previously integrated with the Acknowledge Receipt API, you can continue to use it in place of the notifyFulfillment() method. You must use either the notifyFulfillment() method or the Acknowledge Receipt API in your app to communicate the fulfillment result to Amazon.
Implementation requirements
Follow these requirements to properly implement thenotifyFulfillment() method.
- To communicate the fulfillment status to Amazon, you must call
notifyFulfillment()every time a receipt is processed. - When calling
notifyFulfillment():- Send
FULFILLEDwhen the following conditions are met:- You successfully map a customer to a receipt and unlock subscription content for the customer.
- Send
UNAVAILABLEwhen either of these conditions occur:- You identify that the customer has an existing subscription that wasn’t purchased through Amazon.
- The customer is not eligible to sign up for an account for your service.
- Send
Auto-cancellation
Amazon uses auto-cancellation to make sure that customers don’t continue to pay for subscriptions that aren’t fulfilled. If you don’t update a purchase receipt to theFULFILLED status by using notifyFulfillment() or the Acknowledge Receipt API within 14 days of purchase, Appstore automatically cancels and refunds the subscription. However, if within 14 days of purchase, you update the purchase receipt to the UNAVAILABLE status, Appstore immediately cancels and refunds the subscription.
Acknowledge Receipt API
Open/Close Acknowledge Receipt API details
Open/Close Acknowledge Receipt API details
acknowledgeReceipt operation which allows you to notify Amazon that a subscription purchase has been fulfilled, so customers won’t lose access.The acknowledgeReceipt operation is a REST API, much like the verifyReceiptId operation used in RVS, but you must use a PUT request, rather than a GET request.acknowledgeReceipt operation is 1.0. For more details on the query parameters, review the following table.Query parameters
The Acknowledge Receipt API response uses the following query parameters.Response codes
After making the HTTP request, the Acknowledge Receipt API responds with one of the following codes.Acknowledge Receipt FAQ
The following are frequently asked questions (FAQ) about the Acknowledge Receipt API.Should the Acknowledge Receipt API be called after every renewal, or only after purchase?
Should the Acknowledge Receipt API be called after every renewal, or only after purchase?
What response is sent if the Acknowledge Receipt API is invoked with status FULFILLED when it has already been acknowledged?
What response is sent if the Acknowledge Receipt API is invoked with status FULFILLED when it has already been acknowledged?
FULFILLED is an idempotent operation, and you get the same response every time.Step 6: Integrate with RTN
With Quick Subscribe, customers subscribe to your app through Amazon, but outside of your app. This could lead to your app missing some information about a customer’s purchase state. ThegetPurchaseUpdates() method sends data only when an app is opened.
Real-Time Notifications (RTN) provides customer purchase information for all transactions, including the ones that occur outside your app. When your server receives a purchase notification from Amazon’s RTN server, use the Receipt Verification Service (RVS) to validate the receipt.
With RTN, Amazon sends you updates about a customer’s subscription events, such as when a customer purchases, renews, or cancels a subscription. This information is important for apps with Quick Subscribe because it makes sure your app always has the most up-to-date information about the user’s subscription.
For details about how to set up RTN, see Use Real-Time Notifications.
Step 7: Integrate one-click account information sharing
To integrate your app with the one-click account information sharing feature, follow the guide. The following diagram shows the code flow for Quick Subscribe with one-click account information sharing.
Open/Close Text description of diagram
Open/Close Text description of diagram
- App opens.
- Call PurchasingService.getUserData().
- Get UserProfileAccessConsentStatus from UserData response object by calling UserData.userProfileAccessConsentStatus.
- If user consented, go to step 5, otherwise go to step 11.
- Call PurchasingService.requestUserProfileAccess().
- If call is successful and userProfileAccessAuthCode is present in the response, go to step 7, otherwise go to step 11.
- Update your server with the authorization code.
- Call the Appstore IAP Get Access Token API to get the access token.
- If the call is successful, call the Appstore IAP Get User Profile API using the access token and go to step 10. If the call fails, go to step 11.
- Create account with email. End flow
- Show app’s default account sign-up or sign-in experience.
- Authorize with local account using username and password. End flow
- Implement
getUserData(). - Determine customer’s consent status.
- If customer doesn’t provide consent, use your standard account creation process.
- If customer provides consent, proceed to next step.
- Get an access token by using the Appstore IAP Get Access Token REST API.
- Get customer’s profile data by using the Appstore IAP Get User Profile REST API.
- Get customer’s email.
- Create an account for your service using the customer’s email.
Step 8: Test Quick Subscribe with LAT
With Amazon’s Live App Testing (LAT) service, you can distribute an app that you intend to publish to the Amazon Appstore to a pre-defined set of testers before going live. The testers can sample the full suite of Amazon services against Amazon’s production environment, to make sure your app is working as expected.Set up LAT for Quick Subscribe
To test Quick Subscribe with Live App Testing (LAT), first configure Quick Subscribe for LAT in the Developer Console using the steps in Configure Quick Subscribe in the Developer Console. You can configure Quick Subscribe for LAT only, or configure it for both your live and LAT apps, as shown in the following image.
If you choose to configure Quick Subscribe for LAT only, you can later promote the configuration to your live app by selecting Actions > Promote to Live as shown in the following image.
If you configured Quick Subscribe for your LAT app differently than your live app, a TEST label appears in the quick subscription details for the LAT app as shown in the following image.
You can test the Quick Subscribe flow through the Amazon retail website or on a Fire device. When you start a live app test, you can send invitations to testers. Testers receive an email with a link to the Amazon website with the LAT version of the app.
Test Quick Subscribe on the website
From the LAT invitation email, select the Amazon website for your marketplace. On the app detail page, select the subscription option, which appears as a paid option for a subscription term, such as $20.00 monthly. Then, select a device to deliver to, and click Get App.Test Quick Subscribe on the device
To get started with testing Quick Subscribe on the device, you can use the LAT invitation email or the device notification. To test from the LAT invitation- Use the link in the invitation email to go to the app detail page on the Amazon website.
- Select the App Only option.
-
If you have multiple devices associated with your account:
- Click the device name in Deliver to <device name>.
- In the Deliver to dialog, select the device where you want to deliver app.
- Click Get App.
- On a Fire TV device associated with the Amazon account, click the icon for Your Apps & Channels (the icon appears on the navigation bar as three squares and a plus sign).
- Find the LAT version of your app, which has a TEST banner on the app icon. You might need to click App Library to see the app.
- Select the app icon to open the app detail page on the device.
- Select Subscription Options and download the app.

