Get help with webhooks, third-party integrations, and attribution providers.
Recently active
Hello,When I purchase an android subscription (renewing 1mo) it seems that in the response webhook I am getting the product_id: product_identifier:base_plan_id. Before I was just getting the product_id which corresponded to whatever product_identifier I set on the google play store. How can I fix this so that the product_id coming from the webhooks does not append the base_plan_id? Thanks,Carl
TL;DR: For 3rd party integrations, please update proceeds to take into account VAT so that it matches Apple’s proceeds and what the developer actually gets. --We've been using our RevenueCat integration with AppsFlyer and Amplitude to calculate LTV and track marketing campaign profitability, however I just realized that proceeds reported by RevenueCat does not match Apple’s. If you choose 'report proceeds' in RevenueCat, it doesn't take into account VAT when sending the revenue which results in RevenueCat over reporting proceeds by up to 20% , which throws off marketing campaigns and LTV calculations. 😔 Here's an example of a sale in the UK: I've converted everything to US dollars for convenience. Price of product: $4.11Proceeds reported by RevenueCat to Amplitude: $2.88ACTUAL proceeds reported by Apple: $2.36Difference = ~20% FORMULAS: It looks like RevenueCat is using this formula: proceeds = price * 0.7 Please update this to what Apple is using: proceeds = price * (1-{VAT Rat
I’ve been hitting my head against this all day yesterday and this evening and I’m not sure what I’m doing wrong. In brief, my use case is purchasing a subscription via Stripe, and then posting the receipt to RevenueCat to record the entitlement against the correct user.My code to do so is pretty simple. Here is an isolated test case written in TypeScript:import { config as dotEnv } from 'dotenv';dotEnv();import fetch from 'node-fetch';export const sendReceiptToRevenueCat = async (data: { app_user_id: string; fetch_token: string;}): Promise<any> => { const url = 'https://api.revenuecat.com/v1/receipts'; const headers = { Accept: 'application/json', 'Content-Type': 'application/json', 'X-Platform': 'stripe', Authorization: 'Bearer ' + process.env.REVENUECAT_PUBLIC_API_KEY, }; const options = { method: 'POST', headers, body: JSON.stringify(data), }; return fetch(url, options) .then((res) => res.j
Hello RevenueCat community,I'm facing an issue with my app "Flight Canvas" being rejected by App Review. The reviewer attempted to make in-app purchases but encountered errors.App Review Feedback:"When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple's test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code 'Sandbox receipt used in production,' you should validate against the test environment instead."Current Situation:The app works perfectly in TestFlight with sandbox purchases RevenueCat logs show successful offering fetching and subscription recognition Customer info shows proper entitlement activation in testing Using RevenueCat for all IAP handling (no custom receipt validation)Question:Is there a setting in RevenueCat I need to change to handle this specific App Review scenari
We tried to get the font family working for a paywall, however we are using expo react native and it was not working no matter what i did. I tried to follow expo tutorial on how to use custom fonts and did it the react native way and nothing worked for iOS.Is there a way we can do it using expo: https://docs.expo.dev/develop/user-interface/fonts/
Hello!I’m implementing RevenueCat in my application in order to handle user’s subscriptions. I have my own database and I want to set both “premiumLevel” and “expirationDate” (so I can use the benefits of Firestore sockets). I have a few questions:When a INITIAL_PURCHASE event is triggered, I am fetching the newest data in the subscribers endpoint and then getting the user’s id of my own database via aliases. Is that approach correct? When a EXPIRATION event is triggered, I am just updating my own database and setting premiumLevel to false and expirationDate to null (no request to subscribers), is that okay? Do I need to look up for other event types or the INITIAL_PURCHASE and EXPIRATION are enough to keep my database updated?
Hi, Post reuest to API https://api.revenuecat.com/v1/receipts{"code": 7116,"message": "Invalid Stripe. Make sure your Stripe account is properly connected."}Stripe is showing as connected in RC.Is there some doc or a way to fix this issue?
When integrating Singular using official docs we have faced a few issues: API KeyFrom the official docs it is not clear which API key we suppose to use. Singular has many types of API keys: SDK, Reporting API key, S2S API key, etc.We were under impression that we should use Reporting API key located here: https://app.singular.net/#/react/api. On our integration page on Revenue Cat all events were green and in event logs it was indicated that Singular successfully accepts the events.The problem was that we couldn’t find any rc_events on Singular Events page. We had raised a problem with Singular support and they confirmed that Reporting API key should be used as API key. After a few days they again replied to us saying that this is wrong and SDK API key should be used instead.Would be nice to have more clear explanation on docs page regarding this issue. IDFA for iOSWe don’t ask our users to provide access to IDFA, so we only collect IDFV. In your official integration with Singular if c
I’ve been trying all day to install the RevenueCat extension, but no luck. This is the error I’m getting:; RESOURCE_ERROR at /deployments/firebase-ext-firestore-revenuecat-purchases/resources/handler: {"ResourceType":"gcp-types/cloudfunctions-v1:projects.locations.functions","ResourceErrorCode":"400","ResourceErrorMessage":"Gen1 operation for function projects/f1-live-pulse-27147/locations/us-central1/functions/ext-firestore-revenuecat-purchases-handler failed: Build failed: npm error code EUSAGE\nnpm error\nnpm error `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.\nnpm error\nnpm error Invalid: lock file's long@5.2.3 does not satisfy long@5.2.4\nnpm error Invalid: lock file's long@5.2.3 does not satisfy long@5.2.4\nnpm error Invalid: lock file's long@5.2.3 does not satisfy long@5.2.4\nnpm error\nnpm error Clean install a project\nnpm error\nnpm error U
I am struggling to get RevenueCat to automatically sync/recognise one-time purchases from Stripe Checkout.I have a Flutter app for both iOS and web (Firebase backend), and after significant work (writing custom conditional code for the Web logic...) have subscriptions working for both iOS and Web, integrated with RevenueCat. Customers can subscribe either as an IAP on iOS or using Stripe if on the Web app, and the subscription entitlement is managed by RevenueCat.But… user’s also need the ability to make one-time purchase of consumable credits. On iOS this is handled as an IAP that RevenueCat syncs, pushing the successful transaction event to my Firestore Function so I can track the credit balance.For one-time purchases via the Web app, Stripe Checkout successfully completes yet ReveneCat appears unaware of the transaction! Unlike for Stripe-managed subscription transactions there does not seem to be any automatic syncing or notification to RC of the one-time purchase.So far I have tri
I am trying to prepare an import script for adding our one-time (i.e. Lifetime) historically purchases from Stripe into RC. I am able to successfully use the API to create annual subscription but have not figured out how to get passed the "{"code":7103,"message":"The receipt is not valid."}" error I keep getting for my one-time purchase query. I am using the Stripe checkout key at the fetch_token and Postman to get test the syntax structure first. Here's my code:header 'Accept: application/json'header 'Authorization: Bearer [stripe_secret_key]'header 'Content-Type: application/json'header 'X-Platform: stripe'{"product_id": "prod_HMezcIkru867vf","price": 99.99,"currency": "USD","is_restore": "false","app_user_id": "ZOVwTCYttQagvnO0ALT7vhmoYWf2","fetch_token": "ch_3K8UhVEwxMCNONa5180XDbh7","introductory_price": 49.99}
I followed this guide to send events directly from Stripe to RevenueCat. I also saw this link for sending our tokens to RevenueCat which must be done before the above events (I think). I send the token during “checkout.session.completed” but it doesn’t look like that event is happening. Should we be posting receipts from “invoice.payment_succeeded” ? Might be good to put something about this in your docs.
We run into a use-case that seems like an edge case but ends up being more common that you’d expect.User subscribes via App Store, let’s say an annual plan that ends on 2023-01-01. In the middle of the subscription, user now wants to be billed through Stripe (receiving a promo code or something like that). It is too late for a refund. User cancels their App Store subscription, though it is still active until 2023-01-01. User wants to purchase their new Stripe subscription but only get billed once their App Store one ends in the future.There are a few ways to do this:Just not support this at all, and force users to wait until their App Store subscription expires before they purchase their Stripe subscription (less than ideal). Let the user purchase their new Stripe subscription, but with a really long trial duration so that during the overlap period, they have the canceled (but non-expired App Store), then on 2023-01-01 when the first one expires, their Stripe trial ends and they get bi
Problem: About 50% of the in-app events are missing in SKAN reports on Appsflyer We’re using the Appsflyer Integration to measure conversion events. I’ve noticed that for in-app events from Facebook Ads for iOS about half of the events are missing. The privacy thresholds from SKAN are not the issue. Installs are tracked correctly but conversion events aren’t. We are relatively sure about that a large share of events are missing because otherwise the data for organic installs is implausible.I checked a bunch of event logs on RevenueCat and they seem to be all send correctly to Appsflyer with the correct meta data attached.My hunch is that it has to do with wrongly identified re-installs. The numbers seem to match the 50% missing events. Question:I wonder if anyone else had a similar problem or if the RevenueCat team has heard about similar cases? I haven’t received a helpful answer from Appsflyer yet, so i’m trying my luck here.
I want to integrate with Adjust, and I want to do so the easy way (I would prefer not to be made to jump through whatever obstacle course that the RevenueCat integration entails):Is there an easy way for me to fetch the receipt from the client (right after a subscription has been made and approved), as well as also doing the same kind of thing on Android?If there isn’t, I would have to assume that this is purposefully avoided so as to make migration harder, and that in the process of making migration harder you are also making other things harder.
We have an AppsFlyer Integration that occasionally uses the customer_user_id as the appsflyer_id. Does anyone know why this would happen?Here’s an (anonymized) example.{ "af_events_api": "true", “appsflyer_id": "aaaaBBBBCCC", "bundleIdentifier": "com.bundle.app, “customer_user_id": "aaaBBBBCCC", "eventCurrency": "USD", "eventName": "renewal_event", "eventTime": "2021-10-08 21:27:43.000", "eventValue": "{\"af_revenue\": \"5.99\", \"renewal\": \"true\", \"af_content_id\": \"monthly_plan\", \"af_currency\": \"USD\"}"}A correct appsflyer_id looks like a Unix Epoch timestamp with a random number appended like this. "appsflyer_id": "1617274484000-5786735",Does anyone know why it occasionally doesn’t have the correct Appsflyer ID?
After integrating RevenueCat, the in_app_purchase event stopped in Firebase. Is this normal? Meanwhile, the purchase event is still coming from RevenueCat's Firebase integration.Flutter, Android
I have implemented webhook for revenuecat in .net core C#. But for some reason I am getting 400 badrequest with empty response. I am mostly sure that I am not getting the json response in webook through revenuecat for any of the event occurring.I have also added endpoint on revenue cat webhook with authentication. I have tried several time and as I have not way to test this on local machine. I need help from revenue cat team to provide some reference doc with sample implementation just to get proper json response. Below is the code snippet that I am using to get json response from the webhook endpoint added in revenuecat. var webHookSecret = _configuration[Constants.RevenueCatWebHookSecret]; var headerAuthorization = HttpContext.Request.Headers["Authorization"].ToString(); #region Check authorization if (webHookSecret == headerAuthorization) { json = await new StreamReader(HttpContext.Request.Body).ReadToE
Hello RevenueCat community,I am a new user of RevenueCat and am having issues with processing subscription purchases. Here is the relevant information.- App designed no-code in FlutterFlow- App connected and products connected in RevenueCat- App uses Firebase for Users and Authentication information- Google Analytics functions properly and shows user events- Licensing is set up for purchases in Google Developer Console with the test account I am using- RevenueCat extension is set up in Firebase- Firebase integration is set up in RevenueCat- RevenueCat service account is active. I have for now given Admin permissions for everything, so there should be no restrictions because I was encountering some access errors earlier that seem to have been fixed. - The service account JSON was generated and uploaded in RevenueCat and RevenueCat shows connected to Google. - Firebase, RevenueCat, and Google analytics are enabled and seem to be functioning with FlutterFlow- Sandbox Data is checked on th
Hi,I am following the official document https://docs.revenuecat.com/docs/creating-play-service-credentials to set up Service Credentials with Play Store.At step 2b we need to access ‘Google Cloud Platform’ which when I do I get the following error message…“You are missing the following required permissions: Project resourcemanager.projects.get”One workaround I have attempted was to select the app name I want the Credentials for in the top left ‘Select a project’ dropdown and then select ‘Service Accounts’ from the left hand menu. I am then able to..Create the credentials (2c) Assign Pub/Sub Admin Role & Monitoring Viewer (2d) Create public key (2e)The issue I have is that when I now go back into Play Console as instructed my Service Credentials do not appear and therefore I also do not have a ‘Grant Access’ button. It simply states‘There are no service accounts associated in this project’I’ve no idea what to do from this point as I cannot continue with the configuration without the
Hi, I’m a little confused about the Apple Search Ads attribution page in the docs:https://docs.revenuecat.com/docs/apple-search-ads It says that:On iOS 14.5+, you must be running the latest RevenueCat SDK and request authorization via the App Tracking Transparency framework before Apple Search Ads data can be collected by RevenueCat. However, my understanding is that for basic tracking (anonymised) using the new AdServices framework, this isn’t necessary. What’s the latest on this?
Hi everyone,I have integrated Adjust in our application and i see the integration of Adjust with RevenueCat. However the docs point me to Native iOS/Android implementation where the Adjust config isn’t available. Can anyone help around this - how do i set adjust delegate in Appdelegate if the initialisation is being done through React native.https://docs.revenuecat.com/docs/adjust
Hi, Please let me know how I can create two webhooks in the same project. One for Development server.Second for Production Server. Waiting for reply asap. Thanks
Hi there, I’ve set up Meta Ads integration and it has been working for some time. In Meta Ads, I’m now looking to create a new campaign with a performance goal rather than an install goal. When trying to select the event to set as the goal, both the standard events ‘Start trial’ and ‘Subscribe’ are disabled with an error Your app can't use Aggregated Event Measurement because conversion data is missing or partial. Usually, the easiest solution is to set up the Facebook SDK for iOS.Do you think I’m missing any steps in the Meta Ads integration set up? I’ve added details about my setup and review I’ve just completed. Appreciate your help with this. Here is my Meta Ads set up In app `collectDeviceIdentifiers()` call `setFBAnonymousId()` call Both of these set up after Purchases SDK is configured When ATT prompt is authorized, set `isAdvertiserIDCollectionEnabled` and call `collectDeviceIdentifiers`.Next, I have integrated with Conversions API. Is the Datasource ID (mentioned in Conversi
I have integrated CleverTap and set the Account ID And Passcode correctly but when I checked so all subscription events are in retrying status or fail. I have sent the events by https://api.clevertap.com/1/upload and all sent success. How can I resolve this case?
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.