Get help with anything related to RevenueCat.
Recently active
Hi RevenueCat fam,I’m testing my paywall with real device. My payment still shows up after my purchasing and even tho I use .presentPaywallIfNeeded( function which should automatically check if I’ve paid. .presentPaywallIfNeeded(requiredEntitlementIdentifier: "pro",purchaseCompleted: { customerInfo inprint("Purchase completed: \(customerInfo.entitlements)")},restoreCompleted: { customerInfo in// Paywall will be dismissed automatically if "pro" is now active.print("Purchases restored: \(customerInfo.entitlements)")}) Attached is what I saw after click purchase on paywall a 2nd timeAnd this is my LOG DEBUG: ℹ️ There are no requests currently running, starting request GET /v1/subscribers/$RCAnonymousID%3A65c82d3b6f4442e9996c0c824846953aDEBUG: ℹ️ API request started: GET '/v1/subscribers/$RCAnonymousID%3A65c82d3b6f4442e9996c0c824846953a'DEBUG: ℹ️ API request completed: GET '/v1/subscribers/$RCAnonymousID%3A65c82d3b6f4442e9996c0c824846953a' (304)DEBUG: 😻 CustomerInfo updated from network.D
So Ive built an EXPO app and have successfully managed to run development builds using sandbox environment for an app and tested purchase flows which all works fine. signed the paid agreements etc and set up my apple IAP and subscriptions properly. I’ve now tried to submit my app but I keep getting rejected due to: “Guideline 2.1 - Performance - App CompletenessWe found that your in-app purchase products exhibited one or more bugs which create a poor user experience. Specifically, there was no response when we tapped Unlock Now in Inspiration, Guests, and Budget. Please review the details and resources below and complete the next steps.Review device details:- Device type: iPhone 13 mini- OS version: iOS 18.5” Its very frustrating as it appears the issue is my IAPs have not been accepted/in review.The other issue I noticed before i submitted was that in testflight i was unable to trigger the paywalls, which I assumed was due to the IAP and subscriptions not being reviewed and accepted
I have added localization through RevenueCat which has updated the text content. I would like to change the main image for each language to help improve conversions by country. Is it possible to “localize” the image in addition to the text copy?
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
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
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
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 ?
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!
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?
Hello,I deleted a user on accident. I have the RevenueCat id, is there any way to restore this user and their entitlement? Will it restore when the subscription bills again? Im hoping there is some deleted db that RevenueCat persists for a bit or some solution. Thanks!
How can I solve this problem?
Hi, I'm struggling to handle lifetime products with experiments and paywall v2.I have a flutter app that has some free and paid items. All paid items are lifetime/non consumable and each one unlock a different entitlement related only to that item. Let's say I have 2 offerings for each item to do some A/B testing. 1: The only way that I thought of using this 2 offerings for each different item is putting in the metadata the entitlement identifier for the offering and a boolean to say which one is the one active. Is that the only way to do it? As only one offering can be marked as default/current I couldn't see other way. Besides that I couldn't get offerings by its entitlement using the api in Flutter. 2: Now, let's say that I want to run Experiments for each item with this 2 offerings in the experiment. Will I get many offerings that are "current", each one with a different entitlement on the metadata? Or will I get only one as current? Having trouble figuring out this. Thanks for the
I'm using Flutterflow with native integration. I've made all the necessary settings. My app is from Google and is in closed testing, all the subscriptions are configured correctly. I've already redone the project, recreated the products and the error is still the same.
I have a webhook set up and working. A user recently paused their subscription, and we received the relevant SUBSCRIPTION_PAUSED event through, which includes the date the subscription will auto-resume.But now the user says they have unpaused the subscription. We have not received any new event though, so from our end, in our customer database, their subscription status is still paused, meaning they are unable to use our app properly.Should we be receiving an event through when they unpause a subscription? And if so, what event type is it? I can’t find anything in the docs, so how are we meant to handle this situation?Thanks,Ian
My react native application takes around 30s to return data from the Purchases.getProducts() function call. There has been no issues until now regarding this and we haven’t changed anything regarding initialization. I am using react-native-purchases@7.28.1 which should be stable according to documentation.
Failed to build iOS app - Swift Compiler Error (Xcode): 'SubscriptionPeriod' is ambiguous for type lookup in this context, also on IOS emulator; already built apps cannot load subscription products, it keeps load indefinitely. Launching lib/main.dart on iPhone 16 Plus in debug mode...Xcode build done. 26.7sFailed to build iOS appSwift Compiler Error (Xcode): 'SubscriptionPeriod' is ambiguous for type lookup in this context...Pods/PurchasesHybridCommon/ios/PurchasesHybridCommon/PurchasesHybridCommon/StoreProduct+HybridAdditions.swift:47:50Swift Compiler Error (Xcode): 'SubscriptionPeriod' is ambiguous for type lookup in this context...ios/Pods/PurchasesHybridCommon/ios/PurchasesHybridCommon/PurchasesHybridCommon/StoreProduct+HybridAdditions.swift:64:54Could not build the application for the simulator.Error launching application on iPhone 16 Plus. Please i need assistance on this Thank You!
My paywall has dynamic terminology for if the user has access to a 7 day free trial or not and I want to determine if the user is eligible for the free trial offer I have setup for my subscription on ios and android.My app is built in react native and I’m using the react-native-purchases library from RevenueCat.I know for IOS I can use the const eligibility = await Purchases.checkTrialOrIntroductoryPriceEligibility(["myPackage"]);but for Android this isn’t available/doesn’t work.For Android can I fetch the offerings and check the introPrice field in the product and if it isn’t null I can assume that they’re eligible to use the free trial ? const offerings = await Purchases.getOfferings();const annualPackage = offerings.all["myPackage"]?.availablePackages.find(pkg => pkg.packageType === "ANNUAL");if (annualPackage && annualPackage.product.introPrice != null) { setFreeTrial(true);}
We've configured our subscription in App Store Connect with the following setup: Introductory Offer: 2-week free trial Promotional Offer (Offer Code): 20% discount for the first year While the paywall correctly reflects the free trial via RevenueCat, we're unable to read or display the discounted price from the promotional offer using any of the available variables or fields in the paywall.Is there a way to retrieve or display the discounted price from the offer code directly in the paywall? Or does RevenueCat currently not support surfacing this data?Any guidance would be appreciated.
Variables like ‘{{ product.offer_period_in_days }}’ & ‘{{ product.offer_price_per_month }}/month’ are showing the values in the Editor but not upon being loaded in the app.
export const setAttributes = async( req: Request, res: Response, next: NextFunction) => { try { const {customer_id} = req.params; const attributeUrl = `https://api.revenuecat.com/v2/projects/${project_id}/customers/${customer_id}/attributes`; const url = new URL(attributeUrl); const attributes = [ { name: "jhon" } ]; const response = await fetch(url.toString(), { method: "POST", headers: { Authorization: `Bearer ${process.env.REVENUE_CAT_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify(attributes), }); if (!response.ok) { const errorData = await response.json(); const status = response.status; console.error(`Error from RevenueCat: ${status}`, errorData); switch (status) { case 401: return res.status(401).json({ error: "Invalid API key" }); case 403: return res.status(403).json({ error: "Access denied. Insufficient permissions" }); case 429: const retryAfter = response.h
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.