Discussion and help from anything related to RevenueCat.
Recently active
Hey! I’m exploring a system in my app where users can either pay a one-time fee to unlock a single specific article in a news app, or subscribe (monthly) to unlock all articles in the app.The subscription is easy. Product => Entitlement, check for the entitlement, badaboom, done.I am however not 100% sure on the best way to “unlock a single article”.I understand how to trigger the purchase, and I understand I need to implement a webhook against NON_RENEWING_PURCHASE to confirm receipt. What I’ve yet to nail down is the method in which my server knows which article to unlock.Is there a way to attach any form of metadata in the purchase? (`article: 123456`). I can’t seem to spot it.Alternatively, is the flow to have the app itself (after the purchase goes through) call an “unlock” API on my server with transactionId and article ID, which then looks for a corresponding webhook?With this flow, how would folks recommend handling the race condition between the webhook (which per docs can
I’m looking at making an implementation for .NET MAUI to support rendering Paywalls at the MAUI layer instead of trying to wrap the native Android/iOS SDKs to do it (the dependency graph is a bit of a nightmare to sort out for it unfortunately - the core SDKs aren’t too bad and I have working nicely).Is there a spec or schema somewhere that I can get the details for the data returned when requesting paywalls?I see the v2 api has an openapi spec which defines some parts, but there’s stuff like additionalProperties which seems like it could be platform specific.Could you post specs for android/iOS at the very least, to understand more what the api might return? Alternatively, if you actually have a true unified version of the object model for web or flutter or some other framework, a comprehensive and complete spec for that would also be helpful.Thanks
I changed some text. And suddenly my paywall stopped rendering. It’s falling back to RevenuCats default paywall. I’ve tried everything I can think of. It’s kind of a critical moment right now. Don’t know what to do. Any ideas?I removed the badge that I had on a button, since someone said that could give problems, but still the same. The Ai can’t find any problems. It’s the same on iOS and Android
Hi,I'm getting NOELIGIBLEOFFER (statusCode 4) for all 4 subscription products on Android. SDK version 10.1.2, Capacitor plugin.Logs show:- RC API returns 200 for offerings ✅- Products requested: elitemonthly, eliteyearly, promonthly, proyearly- All return: Product Type subs, Reason NOELIGIBLEOFFER, statusCode 4- Error: "None of the products registered in the RevenueCat dashboard could be fetched from the Play Store"What I've confirmed is correctly set up:- Products created May 5 (6 days ago, not a propagation issue)- Base plans are Active- Prices set for CA and US- Internal Testing track has a published APK- Test accounts added as Internal Testers AND in License Testing- Device restarted, Play Store cache cleared- No recent changes to base plansPackage name: com.mi4labs.carnivorexAny idea what I'm missing?
I need help with some reports and the AI model here provide different answers everytime I ask some info.I have sent multiple emails and unfortunately - no response yet.Hoping to have someone from RevenueCat to help me, asap.
Hi team — I have a production iOS app launched 5 days ago, zero subscriptionsbecause Purchases.getOfferings() returns null current. Confirmed via REST APIV2 that subscription.duration is null in your database for our products(project proj7ea33d78). Sent a detailed support ticket 12h ago, no responseyet. This is blocking revenue on a launched app. Can someone from engineeringtake a look? Reference our support ticket about project proj7ea33d78.
Hi Together, I really love RevenueCat, but I sometimes run into limitations especially in the RevenueCat Paywall Editor.For example in Google Play Console (Android) I have 2 Subscriptions setup (3 Month and 1 year). For both subscriptions I have setup a Multiphase-Offer like this: 7 days Free-Trial 40% Percent Discount on the first Subscription-Cycle (3 Month, 1 Year) Then after Auto-Renew it is the normal price without discountNow the issue is that, the customer wants to display the Monthly-Price for (3 Month and 1 Year), which is possible with the normal variable without any active offers:Normal:product.price_per_month14.99$ But in the Paywall-Logic section the variable is not working like this:~{{ product.price_per_month }}~ **{{ product.offer_price_per_month }} per Month**which results in this~~14.99$~~ 14.99$ So I read the documentation and found out that you have too use the Secondary Offer for Multiphase-offer setups:https://www.revenuecat.com/docs/tools/paywalls/creating-paywal
I’m trying to set up an integration with the v2 API. I will need to create a RevCat customer if one does not already exist for this person, so I will need to search for a customer by app user id (and create a new customer if one is not found). But I can’t find any API that allows me to find customers by app user id (which is the only thing we have on our backend). How can I do this?
Hello, I’d appreciate some advice about adding another subscription duration to a released app.The app currently has a published paywall that contains only 1 package for an approved monthly subscription. I'd like to submit a weekly subscription to Apple for review and add the weekly option to the paywall alongside the monthly one.I’ve done the following so far:added the weekly subscription in App Store Connect to the subscription group with the same level as the monthly subscription it's now in "Ready to Submit" status imported the new weekly subscription as a product in RevenueCat attached the same entitlement as the monthly subscriptionThe app uses the “current” offering from the SDK to display the paywall, so the released version should be able to show the new subscription with an updated offering/package/paywall.I’m not sure whether I should modify the existing offering and paywall or create new ones.Can I modify the existing offering and paywall in place to add the weekly option w
Hello,I am experiencing an issue where the Introductory Offers displayed in my app (via RevenueCat SDK) do not match the configuration in App Store Connect.Variable: product.offer_period_in_daysCurrent Configuration of Introductory Offers in App Store Connect: Product A: 7-day Free Trial Product B: 3-day Free Trial Observed Behavior in TestFlight: RevenueCat returns a 365-day period and a 7-day period for these products instead of the configured trials. Environment: SDK: React Native Environment: TestFlight
Hi all,I've launched a privacy-first companion app — no sign-up, no login, no email collection. All data stays on-device by clinical design.Verified healthcare professionals apply via my website for free access. I want to grant them a 1-year promotional premium entitlement via the dashboard. The catch: I can't search for their customer record because email isn't indexed (and isn't passed via the SDK).What's the recommended pattern?Custom App User ID via logIn() with an opaque token I email them?Or a different approach for apps without sign-up?Anyone built something similar - all advice is very welcome!Thanks!
Hi RevenueCat team,I’m using RevenueCat Virtual Currency for subscription-based credits where credits expire at the end of the subscription billing period. The normal spending behavior works well for this model: expiring credits are consumed first, and unused subscription credits do not roll over into future periods.I’m running into an issue when consumed credits need to be refunded.Flow:A subscription grants expiring credits for the current billing period. My backend spends credits through the virtual currency transactions API. In some cases, that spend needs to be reversed/refunded. Today, the only option I see is to create a positive virtual currency adjustment through the API.The problem is that this positive adjustment appears to behave like a new non-expiring/admin adjustment, rather than being tied back to the original credit bucket that was consumed. So if the original spend used expiring subscription credits, the refund can effectively turn those credits into non-expiring cred
I'm trying to use RevenueCat Customer Center (purchases_ui_flutter ^9.9.5) with FlutterFlow's built-in RevenueCat integration. Getting 'Action not defined' error and the action doesn't run. Has anyone got this working?
Hi everyone,My yearly subscription is not appearing in the production paywall, while monthly works correctly. Both products work as expected in TestFlight. The app has been live for ~40 hours since approval and the issue persists.Products:Working in production: monthly subscription Missing in production: yearly subscription Both products: Status "Approved" in App Store Connect, "Approved" in RevenueCat, Cleared for Sale, all countries selected, in the same subscription groupRevenueCat config:Both products are attached to the current offering as $rc_monthly and $rc_annual Both share the same entitlement Using the components-based PaywallWhat I've verified:Live API key (not sandbox) is in the production build — confirmed because monthly works Paywall renders both packages correctly in TestFlight using the same build Pricing is set on both products in App Store Connect Console.app on a production device shows the app is hitting Apple's production storefront for the correct bundle IDHas an
I went through the whole Troubleshooting checklist. I haven’t even submitted a new release since December, so nothing has changed. I have only one Offering, one Entitlement, and 3 Products, 2 of which I’m using. It’s a SwiftUI app in XCode. It’s as simple a configuration as possible. And it started randomly giving me Error #23 recently. The only thing I can think of is that my Apple Dev Subscription did renew during that period. But all the numbers stayed the same. I even re-generated the API and In-App keys in the store. I've tried updating all the client libraries and running it from XCode as well. Nothing gets rid of the error. Any ideas?
i have lost my authenticator app, and i want to enable authentication on my official app, how to change it, i need urgent help
Hello, I am currently testing my app on Testflight and cannot get past the subscription/paywall stage as I am getting this error when attempting to Start free trial / subscription after signing in with Apple ID.Store unavailable Could not load subscription options.I am using iOS 26. Code snippet of how I am loading offerings/products: https://github.com/nelsonng2002/dump-repo/blob/main/purchases.service.tsI added some debugging to my screen and here it is:RevenueCat Initialized: yes, Configured: yes, Key present: yes, Key preview: appl_f...Last action: offerings:fetch _error Current offering: none Offering IDs: none Package IDs: none Last error code: 23 Last error: There is an issue with your configuration. Check the underlying error for more details. More information: https://rev.cat/sdk- troubleshooting There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect. For info, I have products set up on App
Hello,I modified my paywall. I changed the link on the button at the bottom of the paywall and published it.However, when I open the app on my smartphone, the link is still the old one. I waited several hours. I tested it again, but still nothing. Your project ID: proj5223b537 The paywall name / offering it's attached to The button you changed (Terms → https://www.apple.com/legal/internet-services/itunes/dev/stdeula/) That the published version shows the correct link in the editor but the app serves the old one
I'm having an issue where my monthly and annual products are displayed with weekly attributes in my paywall.I already have other products with annual and monthly types, so I have to use custom type for these.How do I display the proper periods in the paywall?
Hi, google play - I have a subscription called premium, under that 3 base plans, premium7days, premium30days, premium90days. On the app the 3 products all show up as: Premium Access (myapp) $xx.xx. the only difference being the price. I have figured out the value that is shown comes from google play Subscription, Name field. How is this supposed to work, do I just need to manipulate it in code? Or have I missed something somewhere.
Hello,I have 2 subscription options, a monthly and a yearly.I'm running an iOS app with auto-renewable subscriptions managed through RevenueCat (SDK 5.67.1, StoreKit 2, default config — Purchases.configure(withAPIKey:) with no builder options). I have two products in the same subscription group: wingman_yearly and wingman_monthly, both with a 3-day free trial. Yearly trial conversions are debiting users normally and showing as posted charges in Apple's Purchase History. Monthly trial conversions are not — the in-app purchase modal returns success, RevenueCat marks the entitlement Active and emits a RENEWAL event with is_trial_conversion: true, period_type: NORMAL, expiration_at_ms correctly set to +31 days, AUD 19.99 in price_in_purchased_currency, and no expirationIntent / is_in_billing_retry_period / cancellation_reason flags — but Apple's iOS Purchase History (Settings → Media & Purchases → View Account → Purchase History) shows the same transaction as Pending, and no debit has
I’m running into a RevenueCat/App Store setup issue and wanted to see if anyone has seen this before.Scenario:- iOS app using RevenueCat with App Store subscriptions.- Subscriptions are created in App Store Connect and currently in `Ready to Submit`.- RevenueCat dashboard shows a `default` offering with multiple packages configured.- Each package has the correct App Store product attached.- Products are also attached to entitlements.- App Store Connect API key and In-App Purchase key both validate successfully in RevenueCat.- Bundle ID and RevenueCat public SDK key match the app configuration.However, when the app calls `getOfferings`, RevenueCat returns the current offering with **zero packages**.SDK error is essentially:```textOffering 'default' has no packages configuredYou have configured the SDK with an App Store API key, but there are no App Store products registered in the RevenueCat dashboard for your offerings.```I also tested direct StoreKit 2 product lookup from a TestFlight
I’m at the point where I don’t even know what I’m missing anymore.I’ve been trying to get this working for over three weeks now, and I just keep running into the exact same wall. I’ve rebuilt parts of this multiple times, gone through the docs over and over, and I feel like I’m so close — but something is still off and I can’t see it.What I’m trying to do is allow multiple users in my app (each with their own account) to subscribe, even if they’re using the same Apple ID. Basically like how YouTube lets you have different accounts each with their own subscription, but all under one Apple account.So I set things up the way it’s supposed to work. I created multiple subscription groups in App Store Connect (A through H), each with their own products. Everything is approved, live, and has been for weeks. Then in RevenueCat, I created matching offerings for each group and wired them all up properly with entitlements.On the app side, I’m logging users into RevenueCat using their own user ID
We are using RevenueCat SDK with Capacitor on iOS. Our 4 auto-renewable subscription products are in "Waiting for Review" status in App Store Connect (submitted together with the binary).The SDK returns this error: "None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect"StoreKit returns DownloadFailed error and cannot fetch product metadata. RevenueCat logs show WAITING_FOR_REVIEW state for all 4 products.All configuration is correct:Bundle ID matches ✅ Product IDs match ✅ In-App Purchase Key valid ✅ Shared Secret added ✅ StoreKit Configuration: None ✅ Sandbox account configured ✅Is it possible to test purchases while products are in WAITING_FOR_REVIEW status? Or do we need to wait for Apple to approve them first?
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.