RVS is the truth
What the device posts is never trusted for dates or state.
Store
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.
What the device posts is never trusted for dates or state.
The signing certificate must come from an sns.<region>.amazonaws.com HTTPS URL.
RevenueDot confirms the SNS subscription by itself and the console shows Verified.
A missing or rejected key answers 5xx, so the SDK keeps the purchase and retries.
Setup
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.
In the Amazon Developer Console open Settings, Identity, and copy the Shared Key.
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.
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.
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
Purchases.proxyURL = URL("https://api.revenuedot.app") // or your own server
Purchases.configure(AmazonConfiguration.Builder(this, "amzn_…").build()) GET /v1/receipts/amazon/{store_user_id}/{receipt_id} for a subscription's term SKU, then posts the receipt to POST /v1/receipts.store_identifier for subscriptions, such as pro.monthly.| What Amazon reports | Event |
|---|---|
| A new subscription receipt | INITIAL_PURCHASE (TRIAL during a free trial) |
renewalDate moved one term later | RENEWAL |
| Auto-renew turned off, or back on | CANCELLATION (UNSUBSCRIBE), UNCANCELLATION |
| A grace period | BILLING_ISSUE and CANCELLATION (BILLING_ERROR), access continues to the grace end date |
| Cancel date reached, or grace over | EXPIRATION |
| A deferred tier change | PRODUCT_CHANGE to the deferred SKU |
| A consumable or entitlement bought | NON_RENEWING_PURCHASE |
Webhooks report store: AMAZON. Amazon has no subscription pause.
Honest notes
FAQ
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.
In the Amazon Developer Console under Settings, Identity. Copy the Shared Key and paste it on the app in RevenueDot, then click Check credentials.
Yes. Configure the Android SDK with AmazonConfiguration and your amzn_ key, and set the proxy URL to RevenueDot before configure. Only that URL changes.
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.
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
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