Discussion and help from anything related to RevenueCat.
Recently active
Well, this is something annoying...Suppose you are using placements to show different paywalls throughout your app. In our case we have around 20 different placements. For all sorts of various products and different intent triggers.Now, if you want to run an a/b test (experiment) for ONLY one of these placements, like “onboarding” paywall. You end up in a world of shit…1. First you must create your experiment with all the placements, or paywalls would start getting wrong offerings.2. Then, your data will be polluted by ALL purchases done from every placement in the app.So, its virtually impossible to get any reliable data for your “onboarding” placement test.You would like to create an experiment for ONE particular placement ONLY.As it is now, as your app grows and you get more than a single paywall, the experiments are getting worthless.Is there going to be a better RevenueCat experiment update for this in the near future? Or do we need to start looking for other ways to a/b test mone
Hi RevenueCat team/community,I'm facing a color rendering issue on Android.Problem: In the RevenueCat dashboard paywall editor, timeline text is configured as white. (both on dark mode and light mode) In the Android app, the same timeline text renders as white for the first step but black for the following steps. This is not related to light/dark mode logic (I've tested both modes and forced configurations). also some text does not respect the size configured Setup: react-native-purchases: ^9.10.4 react-native-purchases-ui: ^9.10.4 Expo SDK : 54.0.33 React Native : 0.81.5 Screenshots :correct paywall on the dashbord what i have on my phone Has anyone encountered this specific timeline text color discrepancy on Android? Any known workarounds or config fixes? thanks,
I created a test store and products/offering using this tutorial. I then checked the products in the dashboard to edit them, but can’t seem to edit the price I’ve initially set. I can only edit the name/customer facing details. Is this intentional?
I’ve set up a paywall by following this tutorial, and with a Test store set up and paywall, I want to use this only in the dev/debug version of my mobile app. Is it possible to serve two versions of paywalls depending on the build of the app?
I’m following the tutorial for setting up a tip jar via RevenueCat for my Kotlin Multiplatform app, and was wondering if users are able to request refunds if ever they’ve sent a tip.If they are able to, does RevenueCat have like a terms URL that I can use to show to users?
Hi RevenueCat team,We have multiple subscription products and multiple dynamically configured paywallsPaywalls are implemented using custom UI.Users can reach paywalls both via:In-app navigation CRM-triggered deeplinks from marketing campaigns We want to offer subscription discounts to users segmented by marketing.Basically if marketing needs to offer a discount to a cohort of users, they should see the correct paywall with correct discount price and be able to purchase it.Is there an official recommended approach using RC and Apple Introductory or Promotional offers ?NB: Asking only for Apple because on Google Play Console, it looks ok with the subscription + offer mechanism combined with “developer determined” eligibility and “rc-ignore-offer” tag to fully handle it on our side.Thanks for you help.
Hi.We've set up the RevenueCat + Appsflyer integration.We built a Fire OS build and uploaded it to Live App Testing.We're successfully processing payments and subscriptions, and we can see the data in RevenueCat.We can also see that the data has been successfully sent to Appsflyer.BUT we can't find this data in Appsflyer.What are we doing wrong?UPDATED!Appsflyer replied that the problem lies in the request data between the servers (RevenueCat → Appsflyer).I don't know how to fix this.
Hey team,I’m seeing conflicting info in the docs around trial credits and wanted to clarify what the actual behavior is. This page says trial credits do not expire: https://www.revenuecat.com/docs/offerings/virtual-currency/subscriptions#trial-credits-do-not-expire But this page suggests trial credits do expire:https://www.revenuecat.com/docs/offerings/virtual-currency/expiring-currencies#configurationCan you clarify: Do trial credits expire at the end of the trial period or after cancellation? Or are they always non-expiring unless explicitly configured otherwise? If configurable — what’s the recommended setup for trial credits in production? Just want to make sure we don’t end up with unexpected credit loss or abuse.
---Hi, we're trying to retrieve offerings together with their packages and products in as few API calls as possible, but the `expand[]` parameter appears to be silently ignored on both endpoints we've tested.---Case 1 — `expand[]=items.package` on GET /offeringsRequest: curl -s "https://api.revenuecat.com/v2/projects/proj_xxxxxxxx/offerings?expand%5B%5D=items.package" \ -H "Authorization: Bearer $REVENUECAT_SECRET_KEY" \ -H "Content-Type: application/json" | jqResponse — packages are absent, expand is silently ignored:{ "items": [ { "created_at": 1776390456551, "display_name": "Offering A", "id": "ofrng_aaaaaaaa", "is_current": false, "lookup_key": "offering_a", "metadata": { "some_key": "some_value" }, "object": "offering", "project_id": "proj_xxxxxxxx", "state": "active" }, { "created_at": 1775603850680, "display_name": "Offering B", "id": "ofrng_bbbbbbbb", "is_current": true, "lookup_key": "default",
Hello RevenueCat Team,I have implemented subscriptions on my website with monthly and yearly plans. Once a user purchases a plan, they can upgrade or downgrade to another plan. This is currently handled using RevenueCat Web Billing. However, Web Billing does not provide a flow like the App Store or Play Store. Instead, upgrades and downgrades must be handled through the customer portal, as described here: RevenueCat Web Billing - Upgrade/Downgrade The documentation also states that users can upgrade or downgrade their plans through the customer portal link sent via email by RevenueCat.In my implementation, I am handling this through APIs using the following flow:Search for the subscription using the Search subscriptions by store subscription identifier API. Retrieve the Subscription ID from the response. Use that ID to get the customer portal URL via the Get an authenticated Web Billing customer portal URL API. Redirect the user to that URL.The issue I am facing is that there is no wa
Hey,I’m trying to model a yearly subscription where users pay upfront for 1 year, but receive credits monthly (e.g. X credits every month instead of all upfront).What’s the recommended way to handle a yearly subscription where users pay upfront for 1 year, but receive credits monthly (e.g. X credits each month instead of all at once)?Is this supported natively with Virtual Currency, or is there a different recommended approach?Would appreciate guidance on best practices here. Specifically: Is there a native way to distribute credits monthly for annual subscribers? How to handle properly: ensuring credits are granted once per month (not duplicated) handling edge cases like renewal / cancellation mid-cycle
Hi everyone,We’re investigating a sudden failure on our AppsFlyer integration and wanted to check whether anyone else has seen the same pattern.Context:AppsFlyer integration was working before failures started after the RevenueCat incident on Apr 18, 2026: https://status.revenuecat.com/incidents/10dkhmtf8155 RevenueCat’s incident update mentioned delayed third-party integration events and replay of queued requestsWhat we’re seeing:after the last successful AppsFlyer delivery, subsequent RevenueCat -> AppsFlyer events started failing failures affect all our app versions 1.3.1 , 1.3.2 and 1.3.3 failures affect multiple event types AppsFlyer responses are now a mix of: 403 Forbidden 400 Unauthorized What we already checked:RevenueCat AppsFlyer config uses the correct iOS App ID we are using an AppsFlyer Dev Key, not an S2S token the dev key has not changed RevenueCat is definitely attempting delivery to AppsFlyer successful and failed events exist for 1.3.1 , 1.3.2 and 1.3.3, so this
EDIT: sorry, i made a mistake. it is showing up
I am experiencing the exact same issue as this user, whose problem was not solved > @hussain - what info do you need from me to investigate?
I made a vibe coded note app and uploaded it to play store.I connected it to my vedatsozen revenue cat account.I created pro and default offerings and environments.I am in closed test users. I downloaded it and i clicked the unlock button for opening pro mode to test buying ..But i get this warning.I opened licence testing for fake credit card buying too from play store.I am waiting to solve this problem.Thanks.I uploaded a new version of my app with connecting codes but i think my be i could not download it.Thanks.
I am implementing a subscription in a Flutter app for the first time, and this app is a little bit special with the user account. Being logged in is a premium feature. Premium gives you the possibility to download other users published content, backup to the cloud, sync of your data between devices. But… 1. You don’t HAVE to login.2. You have to get premium first to be able to login .So I did what I thought was right, I just use the anonymous id until the user logs in, then they are also logged into revenuecat with their firebase uid. The problem is that they could log out, and then log in with another account. The they’re logged in to revenuecat with the new uid. But I noticed some problems. I did this:1. Get premium2. Login3. Log out4. Log in with another accountAfter step 4 the premium went away and I couldn’t restore it. I’m not loggin the user out from Revenuecat at any point, since that also made me lose premium.Now I’m leaning more towards just skipping logging the user into rev
I’m not able to comment on my original posts about custom variables and Paywall variants.But please add this functionality so I don’t have to duplicate my text layers all the time.Also would be nice to be able to swap an image/video from the Rules interface. In both cases I need to duplicate the components, then make sur they are all hidden by default, then active then manually.And If I have a styling change to do, I’ll have to do it manually on all my components. The new variables are great, it will work. But it doesn’t seem like been completely thought through for actual usage, it’s quite cumbersome.
Hi RC Community! 👋Today, I was trying to use the RevenueCat dashboard to manually grant users some entitlements. According to the sacred texts (the internet), RC is supposed to fire off a lovely little webhook to my server when this happens. Simple, right?So, I set up my shiny new server sync, granted the entitlement to test it out, and waited. And waited. Nothing happened. The only thing that happend was RevenueCat updating the account itself inside of the dashboard, and that was pretty confusing because no webhook was being fired.Naturally, I did what any rational developer would do: I panicked, assumed everything was fundamentally broken, and started hacking together a completely custom, overly complex implementation. Spoiler alert: That was a terrible idea. 🤦♂️After losing way too much time and sanity, I finally discovered the catch: These specific manual dashboard events are only dispatched as Production events. I have no idea why it’s set up this way, but it cost me a good chu
Hey RC team,We recently had a problem where an Apple user signed-up to our App for the first time and subscribed to a product with a free trial. Unexpectedly, they were charged the full amount right away. Our App only offers auto-renewable subscriptions to users.I have checked in RC’s Customer History for that user as well as our own logs to see if the user’s trial eligibility was incorrectly determined and they were misguided by our App’s UI that they were eligible for a trial, but doesn’t seems to be the case.RC shows in the Customer History that the user started a trial and also shows 0 revenue reported. We even asked the user to provide us with a screenshot of the subscription details of our App in their Purchase History through their Apple Account. That also shows that the user was subscribed to a free period which will be renewed after X number of days.We would appreciate if you could tell us what could’ve happened here? I will be happy to share the AppUserId if need be.
Hi all,This is an Android issue, I’m currently not targeting iOS. I’m calling GetOfferings and it’s returning the offering, but the offering contains only one product, which is a non-consumable product. I also have two subscriptions which are not returned. I am currently using IapHub to handle my inapp purchases and everything works great there. But I would like to migrate to RevenueCat.The app is running on the closed test track and I am a tester. This is my configuration: Google Play:Non-consumable product. This works Subscriptions. Not working And TLDR:getOfferings only returns the non-consumable product, not the subscriptions Android only, app running in closed test track, I am tester RevenueCat Product ID’s match with Google Play Store (see screenshots) Inapp purchases currently work using IapHub, but I want to migrate to RevenueCatCan anyone spot what is going wrong here?
It seems KMP library isnt compatible with exit offers, is it planned?
Hello, we’re tracking our daily total revenue in the Transactions page in RC mobile app.However, we recently noticed that even when new subscriptions are added, the total revenue in that day decreases. It might have been because of refunds, which can reduce the sum, but after we checked that wasn’t the case.We tried to see if there’s a pattern in the change of sum number, but couldn’t find any. Sometimes the number goes up, and sometimes the number goes down, regardless of how many new subscriptions are added.Are we missing something here, or is this a bug?Thank you.
I’m using RevenueCat to display paywalls and have created multiple offerings for different targeting groups. In my Flutter app, I want to show different paywalls to different users based on the offering.I’m displaying paywalls using PaywallView from the RevenueCat SDK and passing a specific offering to it. However, instead of showing the selected offering’s paywall, it always displays the default offering’s paywall.I fetch offerings at app launch, and based on debugging, the offerings appear to be valid and correctly retrieved.This setup used to work as expected, but recently it stopped working. I’m currently using the latest version of the RevenueCat SDK (9.15.1).Has anyone experienced this issue or knows what might be causing the SDK to ignore the passed offering and fall back to the default one?
Hi everyone,I’m using the Airbridge integration, our dashboard is being "polluted" with sandbox transactions from our IT/QA teams testing in TestFlight. I noticed that some RevenueCat integrations (like Mixpanel, AppsFlyer) allow for a dedicated "Sandbox API Key" , but the Airbridge configuration doesn't seem to have this.My questions for the community/team: Is there a way to globally disable "Sandbox Environment" events specifically for the Airbridge integration? If not, how are others handling this? Does everyone just create a separate RevenueCat Project for staging/testing to keep the API keys isolated? Is there any plan to add an "Ignore Sandbox" toggle to the Airbridge integration settings? Any advice on keeping production MMP data clean without stopping internal testing would be much appreciated!
Hello everyone,I have a monthly subscription for my Flutter app. Just a single subscription plan.I faced an issue with at least two customers have an issue with their premium subscription because I am relying on the webhook for their subscription status.There is a pattern here:1. Subscribe2. Opt-out3. Force resubscribe (?)4. Subscription expiredFrom the images below, You can see that the customers manage to subscribe to the same subscription before it expired. I do Both of the customers are from Italy and using Android if that matter. Hope to hear any explanation on this. Thanks!
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.