Store

Amazon Appstore receipt verification and real-time notifications for subscriptions

Amazon Appstore receipt verification works through Amazon's Receipt Verification Service (RVS). Save your Amazon shared key in RevenueDot, and it sends every receipt to RVS, which is the only source of dates and state. Add RevenueDot's URL as a Real-time Notifications endpoint so renewals, grace periods and cancellations arrive through SNS.

Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.

The Amazon app page in the RevenueDot dashboard with the shared key field, the Real-time Notifications URL and its live status

RVS is the truth

What the device posts is never trusted for dates or state.

SNS signatures checked

The signing certificate must come from an sns.<region>.amazonaws.com HTTPS URL.

Self-confirming

RevenueDot confirms the SNS subscription by itself and the console shows Verified.

Retry-safe

A missing or rejected key answers 5xx, so the SDK keeps the purchase and retries.

Setup

How to set up Amazon Appstore receipt verification with RevenueDot

  1. 01

    Create the Amazon app

    Add an Amazon app in RevenueDot with your package name. Its public SDK key starts with amzn_. Start free on Cloud if you have no account.

  2. 02

    Copy the shared key

    In the Amazon Developer Console open Settings, Identity, and copy the Shared Key.

  3. 03

    Save it and check it

    Paste the key on the app in RevenueDot and click Check credentials. RevenueDot asks RVS about a made-up receipt. Amazon answers 496 for a wrong key, so a bad key shows up here and not on a customer's purchase.

  4. 04

    Add the Real-time Notifications endpoint

    In the Amazon Appstore Console open your app, App Services, Real-time Notifications. Add an endpoint with your notification URL, which looks like https://api.revenuedot.app/v1/notifications/amazon/{app_id}, and click Submit. RevenueDot confirms the SNS subscription by itself.

  5. 05

    Point the SDK at RevenueDot

    Set the proxy URL and configure the SDK with the Amazon key, as in the code below. Your Android app keeps the RevenueCat SDK.

Android code

The SDK configuration for Amazon

Amazon configurationKotlin
Purchases.proxyURL = URL("https://api.revenuedot.app")   // or your own server
Purchases.configure(AmazonConfiguration.Builder(this, "amzn_…").build())

What the SDK sees from the server

  • The SDK first asks GET /v1/receipts/amazon/{store_user_id}/{receipt_id} for a subscription's term SKU, then posts the receipt to POST /v1/receipts.
  • An unknown receipt or user answers 400 (code 7103), so the SDK stops trying.
  • Amazon being down, throttling, a missing shared key or a rejected one answers 5xx (code 7101). The SDK keeps the purchase unfulfilled and retries. A rejected key also marks the app's credentials as failing and sends an alert email.
  • Products use the term SKU as store_identifier for subscriptions, such as pro.monthly.

How Amazon states map to RevenueDot events

What Amazon reportsEvent
A new subscription receiptINITIAL_PURCHASE (TRIAL during a free trial)
renewalDate moved one term laterRENEWAL
Auto-renew turned off, or back onCANCELLATION (UNSUBSCRIBE), UNCANCELLATION
A grace periodBILLING_ISSUE and CANCELLATION (BILLING_ERROR), access continues to the grace end date
Cancel date reached, or grace overEXPIRATION
A deferred tier changePRODUCT_CHANGE to the deferred SKU
A consumable or entitlement boughtNON_RENEWING_PURCHASE

Webhooks report store: AMAZON. Amazon has no subscription pause.

Honest notes

Sandbox testing and known limits

  • Purchases from Live App Testing and Amazon's test transactions are sandbox data and stay out of production numbers.
  • Receipts from App Tester exist only in RVS's cloud sandbox. RevenueDot asks it when production RVS does not know a receipt.
  • Amazon's accelerated test timelines are not supported, so event times follow real time.
  • RVS has no price. RevenueDot saves the price the SDK posts and converts it to USD at the purchase date's rate.
  • RevenueDot does not detect refunds of Amazon subscriptions, which matches RevenueCat's documented behavior.
  • Run a Live App Testing purchase before you ship.

FAQ

Amazon Appstore: questions people ask

How do I verify Amazon Appstore receipts on my server?

Send each receipt to Amazon's Receipt Verification Service (RVS) with your shared key. RevenueDot does this for you: save the shared key on the Amazon app, and every receipt the RevenueCat SDK posts is checked with RVS before access is granted.

Where do I find the Amazon shared key?

In the Amazon Developer Console under Settings, Identity. Copy the Shared Key and paste it on the app in RevenueDot, then click Check credentials.

Does the RevenueCat SDK work on Fire tablets with RevenueDot?

Yes. Configure the Android SDK with AmazonConfiguration and your amzn_ key, and set the proxy URL to RevenueDot before configure. Only that URL changes.

How do Amazon Real-time Notifications reach RevenueDot?

Amazon publishes them through SNS to the endpoint you add in the Appstore Console. RevenueDot confirms the subscription, checks the SNS signature and re-reads the receipt from RVS before it changes anything.

Can I test Amazon purchases without going live?

Yes. Live App Testing and Amazon's test transactions are recorded as sandbox data, and App Tester receipts are checked against RVS's cloud sandbox. Amazon's accelerated test timelines are not supported.

Get started

Run subscriptions without the revenue share.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.

Already have an account? Sign in · Prefer your own servers? Self-host free