Discussion and help from anything related to RevenueCat.
Recently active
The slow fetch product informations issue was resolved yesterday, but it is still very slow to buy an IAP in sandbox mode, my app was rejected because of this, since the reviewer failed to buy the IAP successfully. Please fix it ASAP!! It is very important to me!! Thanks.
Hi RevenueCat Community,I have a question regarding event data retrieval via the API.We know that when RevenueCat sends webhook notifications, each event payload includes a unique id for that specific event instance (e.g., INITIAL_PURCHASE, RENEWAL, etc.).My question is: Is there a way to use this unique event ID to directly query the RevenueCat API and retrieve the detailed data for that specific past event at a later time?For example, if I have an event ID like "evt_xxxxxxxxxxxxxx", is there an API endpoint similar to GET /events/{event_id} where I can fetch the details of this single event?I understand we can get a list of events associated with a customer through the /subscribers/{app_user_id} endpoint, and that webhooks provide event details at the time of occurrence. However, I'm specifically interested in whether it's possible to look up a single event's data using only its unique event ID after it has already been processed by our webhook system.Any clarification or guidance on
The Paywall Editor seems to have a bug right now where I can’t re-arrange elements by dragging the handle of the element on the left side. Is there any workaround to move things around?
Now, I may just be paranoid but ALL initiated purchases on my app in the last week ended in this “Purchase was cancelled” error, which to me, seems highly on unlikely for an app that used to get purchases every few days. I wonder whether users really cancelled all these purchases or is there something else going on here.{ "nativeStackAndroid": [], "userInfo": { "userCancelled": true, "code": 1, "underlyingErrorMessage": "Error updating purchases. DebugMessage: . ErrorCode: 1.", "readableErrorCode": "PurchaseCancelledError", "readable_error_code": "PurchaseCancelledError", "message": "Purchase was cancelled." }, "code": "1", "userCancelled": true}
Context:I'm currently using my own backend as the source of truth for subscription status. This is necessary since we have users who don’t go through the standard payment flow.While debugging an issue, I noticed the following behavior in the Customer History (see attached screenshot, customerId: user_01jtg9rmtwe6x8g96v43bcn2z3): A trial started event for pulso_suscripcion:pulso-anual occurred at 2025-05-05 01:29 PM UTC. However, the first time this webhook was delivered to my API was at 2025-05-05 07:49 PM UTC. This 6+ hour delay was the first attempt at delivery (not a retry), which likely caused a bug in my system logic (the user was able to subscribe again, so an expiration event then revoked its entitlement from my backend). Another point: I explicitly do not want Platform Server Notifications, as those were sending events tied to anonymous IDs. (https://community.revenuecat.com/sdks-51/after-purchase-new-alias-app-user-id-created-6098?tid=6098&fid=51, https://www.revenueca
While preparing my app for publishing on Google Play, I noticed that the Play Console requires paywalls to clearly display information about subscription auto-renewal and how users can manage or cancel their subscription.However, I couldn’t find any fields in the RevenueCat Paywall UI editor to add this required information directly. I want to make sure my app is compliant and avoid potential rejection.Would adding this info in the “Footer Link” > Terms of Service URL be sufficient for Play Console reviewers?Or is there another recommended way to include this content in the paywall?Here is my paywall UI; Also, one small extra question:On my paywall, the monthly subscription option shows a "%37 off" label.Is this calculated automatically by RevenueCat? If so, is there a way to disable or hide that label?
Every app download now gets a unique ID tied to the user’s Apple ID — perfect for things like offering one-time deals, detecting reinstalls, or even blocking repeat offenders. Will RevenueCat support this, or do we need to pull it directly from the device? Available starting iOS 16+More info: https://developer.apple.com/documentation/storekit/apptransaction/apptransactionid
I need some serious help as I think I messed things up with my latest code update. I use the Flutter SDK and this is what I do when the app starts up: configuration.purchasesAreCompletedBy = PurchasesAreCompletedByRevenueCat(); if (authService.currentUser != null) { configuration.appUserID = authService.currentUser!.uid; } await Purchases.configure(configuration); if (authService.currentUser != null) { if (authService.currentUser!.displayName != null) { Purchases.setDisplayName(authService.currentUser!.displayName!); } if (authService.currentUser!.email != null) { Purchases.setEmail(authService.currentUser!.email!); } } else { log.t('4. User is not logged in, setting app user ID to null'); configuration.appUserID = null; }The authService just checks if the user is logged in and if they are, it assigns the actual uid from the app to the user account so that I can find them quickly.However, I noticed with this code, m
Hello, I’m trying to configure my revenuecat project for development with Stripe, I already connect my stripe to revenuecat successfully, but in revenue cat when I try to add a Stripe product, it says “Product not found in live mode, it may exist as a test mode product”, and is right I want to add Stripe sandbox products, I don't want to test with live product, revenuecat is able to see the live ones, but not the ones that I created in the new Stripe sandbox or even Stripe Test mode. How can I create a test environment between revenuecat and stripe? Take in consideration that if I test with live products I can’t use Stripe fictitious credit cards, so is not an option.
Hello everyone,We’re looking to adopt the web purchase flow for our iOS app using RevenueCat. I’ve set up a Web Billing project and configured it for our default offering (see attached screenshot). My understanding is that, once everything is configured correctly, the `webCheckoutUrl` property should be populated for the relevant package when fetched via the SDK.However, I’m still seeing that `webCheckoutUrl` is `nil`. Is this likely due to a misconfiguration on my end, or am I misunderstanding how and when this property should be set?Any insights or suggestions would be greatly appreciated. Thank you!
One frustrating feature of RC is the bad user-experience with dev/prod projects and thus the dashboard.I think Clerk does this very well, allowing a single project with a dev/prod instance (picture 1). This makes things very easy to flip between the two, isolates sandbox data vs real data, and allows very clear separate API keys, management, etc. Example - Lets assume I have a very active project, post launch perhaps:If I wanted to test adding a new type of webhook for the firebase extension, without the risk of blowing up my firebase functions quota, I’d need to set up an entirely separate RC project, duplicate all the settings over (which is equally a painful process right now), update my local application with new API / public keys, just to test the addition of a single webhook event. I would *LOVE* to see a unified unified approach that really separated the environments, and the intent behind the data. I don’t believe the sandbox toggle is sufficient - here’s a RC example:The first
Are there any plans to support fetching Web Billing products on mobile platforms?ContextWe are using RevenueCat Web Billing to manage our web app subscriptions.On the companion mobile app, we would like to show users some details regarding their subscription.As such we are configuring our Purchases instance with the WebBilling API Key.This works well for the most part - with entitlements & subscription expiration data coming in as expected on the CustomerInfo response.IssueOther information (such as price) can only be obtained via the product instance itself.And any attempt to fetch the WebBilling product returns a “Not Found” error with it being obvious that the SDK is only searching among the PlayStore / AppStore products.Furthermore, attempting to manually specify the store via the PurchasesConfiguration.Builder is also met with an exception. And sure enough, looking into the implementation reveals that the provided store is cast to the one native to the platform (e.g. on Androi
I am getting logs that occasionally with some users Purchases.sharedInstance throws UninitializedPropertyAccessException even though Purchases.configure was called literally on the line before. Our app is only available via Google Play Store, so there shouldn't be any issues connected with prerequisites not being met on that front. Is Purchases.configure asynchronous in some sense? I skimmed through the code and I saw no indication that the configuration (and initialization of sharedInstance) should fail in any sense. One thing I should also note is that I access Purchases.sharedInstance via DI using Hilt. It occurred to me that maybe there somehow exist two instances of Purchases (one configured, and one not), but I think if that was the case, this problem would be ubiquitous, and not impacting just some of the users some of the time. I am using SDK v8.17.1
How are people restoring purchases with App2Web and RC paywalls?I’m in the sandbox for all of this right now, and I’ve been testing flows on Dipsea to see how they are supposed to work and I can’t figure this out at all:The restore purchase button in RC Paywalls does nothing if there is no active iOS or subscription or if there is an active RevenueCat Billing subscription. At the very least .onRestoreFailure should be called, but it is not, it seems like a bug that has been around for some time according to these forums. I noticed in Dipsea this is also the case, nothing happens when you press restore purchase. There is a progress wheel for a split second and then nothing.This leads to my next questionIf someone makes a purchase via App2Web, how do they restore their purchase? There seems to be no way of doing this right now via the RCPaywall? Or am I missing something? If they press restore purchase that does not seem to restore anything in sandbox or give them a prompt to sign in wit
Hello,On the Paywall is there a way to dynamically show the free trial text according to whether the customer is subscribing for the first time or has already subscribed before ?
I have noticed from the 14th and 15th of May that our scheduled data export on version 5 has had some columns move. Specifically `first_seen_time` and `auto_resume_time` which used to be in that order and have now been reversed in the export from the 15th onward. Has anyone else experienced this or similar? it broke our importer so I just wanted to see if it’s unique or if others have had the same and/or experienced this with other columns or exports in the past so I can find the best strategy to deal with it in our data pipeline. Thanks!
The filter for Last Seen App ID using either contains or does not contain seems to be broken. For example, I am trying to filter non-anonymous IDs using Last Seen App ID does not contain “$RCAnonymousID”. All customers are shown. Similarly, using contains returns no customers.
Hello, is there a way to check if the user that hasn't bought anything yet, is from Apple US Storefront with react native?
Hi RevenueCat Team,I’m seeing a currency mismatch in my TestFlight build on iOS 18.4 and 18.5: Tester’s Apple ID region is set to India. In-app UI shows prices in USD. Purchase sheet shows prices correctly in INR. I’ve tried uninstalling, reinstalling but no change. This started happening after updating to iOS 18.4 and 18.5, and IOS 18.3 is worked fine Is this a known sandbox/TestFlight issue or something with my RevenueCat setup? Any advice?Thanks
This has been partially addressed in previous posts, but I think it’s worth brining up again because there are aspects of solving for this that are not straightforward.I’m an indie iOS developer with limited resources, and my requirements are that a user is able to subscribe within one of my apps, and get access to all my other apps as well (3 in total). In RevenueCat I understand how to link products across multiple apps within the same project with a single entitlement, that part is straightforward. The parts that aren’t relate to user management.Apple doesn't provide for this, and recommends user management with my own server. RevenueCat creates anonymized user IDs, but they are not useful for my case since they’re linked to an app instance on a particular device. RevenueCat recommends custom App User IDs, but that still requires that I use my own backend for user management.I want to spend my energy bringing features to my users, and not spend it maintaining subscription infrastruc
I would like to know do RevenueCat support the c++ language? I'm currently using react native and their new architecture supports C++. Also I have some other projects that are not react native but they are Juce projects, which is a framework written completely on C++. I would like to know if there are any plans to release a C++ SDK.Juce allow us to create cross platform music applications. It's written in c++. I am trying my best to not need to write platforms specific code for iOS, macOS and android. I just like to use C++
Hi everyone,I'm running into an issue when testing the subscription flow in my Android app. After installing the app and reaching the paywall, I get the following error message:"Item not available in your country"This only happens on Android, and it prevents me from completing the flow to test the subscriptions properly.Here are a few details:The app is currently in closed alpha on the Play Store.Both the app and the subscription product are marked as available in my region (I've double-checked the Play Console settings), I am using flutter.The issue doesn't happen on iOS – only Android.I'm located in a supported region, and the Google account I'm using should meet all the criteria.Has anyone experienced this before or know how to fix it? Any help would be greatly appreciated – I’m stuck and really need to test the flow end-to-end.Thanks in advance!
Hey everyone!I'm using RevenueCat’s default PaywallView in my iOS app, and I’d like to know if there’s a supported way to run a custom validation before the actual purchase happens, using the default paywall UI.Here’s the use case I need to support: A user logs in to App Account A using Apple ID X, then subscribes successfully. Later, they log out and log in with App Account B, but still using the same Apple ID X. Before allowing them to subscribe again, I want to detect that Apple ID X already has a subscription tied to a different app user ID. To do this, I use restorePurchases() and compare the originalAppUserId.But currently, I can only run this validation before presenting the paywall, which isn’t ideal UX-wise.I saw that originalTemplatePaywallFooter accepts a purchaseStarted callback, like: CustomMarketingView().originalTemplatePaywallFooter(purchaseStarted: <PurchaseOfPackageStartedHandler?>) But i can't make it work. ❓What I’d really like:To trigger my validation onl
Hi,We encounter a problem when integrating RevenueCat with promotional offers on iOS. We’re using the same App User ID on all device, but we get different results on iOS emulator, on an iPhone plugged on a Mac and on an iPhone with Testflight. We were able to integrate “Developer Determined Offer” on Android with no issues.On the iOS emulator, when we use the RC function Purchases.getProducts, we correctly see the promotional offer full_access_fidelity in the returning JSON:{ "currencyCode":"USD", "discounts":[ { "cycles":12, "identifier":"full_access_fidelity", "period":"P1M", "periodNumberOfUnits":1, "periodUnit":"MONTH", "price":2.9, "priceString":"2.90 $" } ], "identifier":"sfw_full", "introPrice":{ "cycles":1, "period":"P1W", "periodNumberOfUnits":1, "periodUnit":"WEEK", "price":0, "priceString":"0.00 $" }, "price":29, "priceString":"29.00 $", "productCategory":"SUBSCRIPTION", "productType":"NON_CONSUMABLE", "subscriptionPerio
I’m trying to test the paywall in my app on a physical iPhone. The first time I tapped a subscription option, I was prompted to sign in with my Apple ID. After signing in, I received an error saying the user isn’t allowed to make in-app purchases in the sandbox environment. I later realized I needed to create a dedicated sandbox test user for this. I’ve since created the correct test users in App Store Connect. However, the issue I’m facing now is that the app seems to remember the original (non-sandbox) Apple ID I used, and I’m no longer prompted to log in when attempting a purchase. I’ve tried deleting and reinstalling the app, and signing out of iCloud on the device, but it still doesn’t trigger a login prompt when I tap the purchase button. Has anyone run into this? Is there a reliable way to reset or clear the previously cached Apple ID used for sandbox testing?
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.