Get help with anything related to RevenueCat.
Recently active
Hello,I just want to ask1. What are the rate limits of the REST API?2. Is it ok if I call the REST API for every webhook received or is that unnecessary?Thank you! :)
Hey,I suddenly started getting 500 errors from the grant promotionals API. I’m running a promotion on my app right now that all new signups get free access until January 2. This of course is suddenly broken.The response I’m getting from RevenueCat is{"code":7110,"message":"Internal server error."} I of course want to figure out what the problem is now, and not 48 hours from now when support finally gets back to me.
I'm using presentPaywallIfNeeded to call a paywall in Flutter. But I want it to be locked, user cannot swipe to close. How do I do this?
I need to create discounts of my app for a program affiliate. on iOS i can create a promo code that is a Discounted % of my base price.it appears on Android, their “promo” code is only Free. The only option is to create an “Offer” inside the subscription base plan, but I don’t want to do this.So, is it possible to create a PromoCode on Android that is a discount, not a free code?
Hello,I’m currently testing the restore purchase functionality in my app, and I’ve encountered an issue where TestFlight testers receive a true response when triggering restore, even though they have no purchase history.Details: In Sandbox, it works correctly. In TestFlight, the restore function returns success (true) even when no purchases were made. Is this behavior specific to TestFlight? Will this issue persist in the production environment, or is it safe to assume it will work correctly in live deployment?
Hi, Is it possible to add a download link for the app in the email that is sent to the user after the payment?If not, is it something in your roadmap? Thanks!
Hi there,I’m trying to build a subscription flow with some limitations for my plans. Currently i have the code from my Stripe implementation where i have set metadata for each product.My Silver plan can save up to 10 things per month and my Gold plan can save up to 100 things.I see that you have implemented the ability to add metadata per in Offerings but not in Products. Do you plan to add metadata to products as well or is there any other workaround to achieve what i mentioned above? Thanks!
On iOS, my paywall works just fine. So that’s proof that my product settings and paywall settings are all setup correctly for App Store. On Android, I followed the documentation and checklist - three times over - to make sure each step is followed to the letter. I have verified my google ↔ RevenueCat server-side connection is setup correctly, by sending test messages successfully from google. My subscription products in Google Play are in active status - which I’ve “imported” into RevenueCat. I have a attached entitlements, and created one offering with packages in RC correctly (both Apple App Store and Google Play Store products in each package - and all that is working correctly in iOS). My app is in “alpha/closed” testing stage (and approved by google) - when I download the app on a real device, and run it, I still get the following error: "Error 23: There is an issue with your configuration. Check the underlying error for more details." In case you are wondering how Google a
Hello,I am working on integrating webhooks to store and update users' subscription statuses on our server.As suggested in the official documentation (https://www.revenuecat.com/docs/integrations/webhooks#syncing-subscription-status), We’re implementing a system where our server listens to webhook events such as INITIATE_PURCHASE and RENEWAL.Upon receiving these events, we call the RevenueCat V2 Subscriptions API to retrieve the latest subscription status stored in RevenueCat and update our server data accordingly.However, in the case of the RENEWAL event, when we call the V2 Subscriptions API immediately after receiving the webhook event, the response often contains outdated information. It seems that we need to wait at least several seconds before calling the API to retrieve the latest data.To synchronize subscription statuses in an idempotent and robust manner, I agree with the documentation’s suggestion to rely on REST API data rather than directly using the information from webhook
Currently, the restore functionality works correctly in the Sandbox environment, but issues arise in TestFlight.In TestFlight, when a user who has not made a purchase presses the Restore button, it incorrectly shows the purchase as restored. In Sandbox, when a user who has not made a purchase presses the Restore button, it does not show the purchase as restored, which is the expected behavior.I’m unsure why this issue only occurs in TestFlight. What solutions are available to address this discrepancy?
I’m using the iOS SDK, all products can not be loaded in China Mainland unless using a VPN.Any solutions for that? It’s a fatal situcation.
It goes something like this:1 - Sign into RC with appID12 - Purchase subscription.3 - Sign out and back in again using appID24 - RC says no subscription active for appID2 and so we present offerings.5 - Purchase fails because (presumably) Play Store thinks we already have an active sub because appID1 bought one using the common PlayStore sign in.I’d like to prohibit sub sharing across different accounts.In order for appID2 to be able to purchase a subscription, another Play Store account needs to be used.What’s the general best practice for dealing with this scenario?Many thanks.
Hello,iOS users changed subscription plan but it seems the new subscription does not immediately affect their account.Customer profile shows user successfully changed their renewal preference to higher subscription plan but user’s current Entitlement has not been changed. I think the user's Entitlement will be changed on the next subscription renewal.What I want is crossgrade, users should upgrade and use new plan immediately.All of our subscription plans are in the same subscription group and subscription duration are same. It should be Crossgrading with Same Duration but I have no idea what is the problem.Please help me to solve the problem.
DEBUG: ℹ️ API request failed: GET '/v1/subscribers/$RCAnonymousID%3A4d4f3f826e1d447abbffa71973d3eedd' (<>): The request timed out. WARN: ⚠️ Attempt to update CustomerInfo from network failed.The operation couldn’t be completed. (RevenueCat.BackendError error 0.)Underlying error: The request timed out.
Hello,I have a question regarding the V2 API.When I make a single API call(`/subscriptions`), the value of RevenueCat-Rate-Limit-Current-Usage in the response headers appears something weird. For instance, I receive values like 686 or 602 for a few calls, while RevenueCat-Rate-Limit-Current-Limit is set to 480.The Current-Usage value is higher than the Current-Limit, yet no rate limiting is applied.Could you explain the logic behind how these values are determined?Or is trial and error until the rate limit is triggered the best approach to understand this?
Currently have an iOS app with a subscription group, Basic & Plus. In Revenue Cat I have 2 entitlements containing the respective “product (subscription)” from the app store. Then in my offerings I have 1 group called default, which contains the packages tied to a single product. How can I make sure that my Plus plan is prioritized? I want to make it so that if a user has Basic and buys Plus auto cancel the basic and go to the Plus.
Hello,I’m currently developing a Flutter-based fitness app, and we’re integrating the payments feature using RevenueCat (not live in production yet). The app offers three types of subscriptions: 1 month, 6 months, and 12 months.Here’s the functionality I would like to implement: Monthly Subscriptions: If a user with a 1-month subscription burns a certain calorie threshold for the month (determined by my backend), they should receive a 50% discount on their next month’s subscription. And then if the user doesn’t burn enough calories on month 2, they get back to full price. Long-Term Subscriptions (6 or 12 months): My backend tracks whether the user burns enough calories each month. For each successful month, a value (e.g., 50% of that month’s fee) is added to a virtual piggy bank. At the end of their subscription, the total amount in the piggy bank will be used as a discount for their next subscription. I also would like to get the possibility to keep that value somewhere instead, s
I am planning influencer campaigns on would like to come back to them with credentials so they can login & use the app for free Currently there is either no login, either login with email. How can I “whitelist” their email address so they can skip paywall upon onboarding?
I've implemented a listener for subscription status changes in my Flutter app like this: void listenToCustomerInfoUpdates(Function(CustomerInfo) listener) { Purchases.addCustomerInfoUpdateListener((customerInfo) { // Called whenever subscription status changes listener(customerInfo); });}I want to confirm: If a user cancels their subscription through the system subscription settings (App Store), will this listener automatically detect the change?My implementation:I've set up the listener in my service layerUsing it with BLoC pattern to update UI stateThe listener is registered when the app initializesIs this the correct approach for handling real-time subscription status updates? Will it catch all subscription state changes including cancellations through the system settings?Thanks in advance for any clarification!
Hi, I’m developing iOS 18+ app with RevenueCat 5.12.1.I found SubscriptionStoreView is almost perfect for me to make a paywall.My earlier code without SubscriptionStoreView used a custom purchase button like this. var buttonToPurchase: some View { let packages = offering?.availablePackages ?? [] let package = packages.first ?? nil Button { guard let currentPackage = package else { return } Purchases.shared.purchase(package: currentPackage) { (transaction, info, error, userCancelled) in if info?.entitlements[Constants.entitlementID]?.isActive == true { navigationViewModel.path.removeAll() } else if let error = error { self.error = error as NSError self.displayError = true } } } label: { Text("Continue") } } I don’t know how to apply Purchase.shared.purchase(package:) into SubscriptionStoreView.I know Su
This is P0 issue , My users have started to push me hard, and it's almost the weekend. in china guangdong
Hi everyone..I am successfully running React Naive on an İOS only React Native Expo project.Now payments are handled by Apple App Store.I want to port this Expo project to web but then how will I handle payments for Non-Apple users?Do I need to open a stripe account and handle payments that way?If I do that, will the subscription and purchases be recognized by Revenue Cat once the client gets an iOS device?Thanks..
I received this email from Google Play titled Introducing a new way to re-engage your users [Opt-out link below] ..Do we know how this affects purchases via revenue cat?
Hello allI've just got a message from a user saying that the price of their weekly subscription was $60. I thought it was a mistake on my end, but it turns out that in some countries like Taiwan and Mexico, Apple doesn't show a specific currency symbol, but uses the generic $. In that user case, it should be NT$60 = $1.85 (USD).I already submitted a ticket to Apple, but I don't have high expectations that they'll do anything. I'm wondering if RevenueCat could add a new variable to the paywall, like {currency_code}, to make it clear that the price is in the local currency. Does anyone have any other ideas on how to work around this problem?
I have a question regarding Testflight and beta testing. Previously, before submitting it to Testflight I could successfully subscribe and cancel subscriptions with the sandbox account that I created on App Store Connect. However now when I am testing with a real Apple account I manage to subscribe to a subscription, but I cannot cancel that subscription in the App Store settings by using the managementURL from RevenueCat. On the “Confirm Cancellation” screen when pressing confirm I get the following message: “Your request is temporarily unable to be processed, please try again later”. Have some of you experienced the same thing with beta testing on Testflight?
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.