API Reference

Documentation Unreal Engine API Reference

Complete reference for every function, delegate, async action, struct, and enum in RevenueCat Bridge.


Everything lives on URevenueCatSubsystem, a GameInstanceSubsystem with one instance per game session, accessible from anywhere.
In C++:
URevenueCatSubsystem* RC = GetGameInstance()->GetSubsystem<URevenueCatSubsystem>();
In Blueprints: search for "RevenueCat" in the action palette. All functions are in the RevenueCat category.

Project Settings

Location: Project Settings > Plugins > RevenueCat
These are stored in URevenueCatSettings (a DeveloperSettings subclass) and saved to DefaultGame.ini.
SettingTypeDescription
AndroidApiKeyFStringRevenueCat public API key for Android
IosApiKeyFStringRevenueCat public API key for iOS
bAutoFetchOfferingsboolFetch offerings once after configure (default true).
bAutoFetchCustomerInfoboolFetch customer info once after configure (default true) so IsEntitlementActive is truthful on cold launch.
bEnableDebugLogsboolVerbose SDK logging. Turn on during development, turn off before shipping.

Functions

SDK Lifecycle

FunctionReturnsDescription
ConfigureSDK(ApiKey)voidInitialize the SDK with an API key. Called automatically on startup using the key from Project Settings. You only need to call this manually if you want to override the key at runtime.
IsConfigured()boolWhether the SDK has been configured.

Offerings

FunctionReturnsDescription
FetchOfferings()voidFetch available offerings from RevenueCat. Results come back through OnOfferingsFetched.
GetCachedOfferings()TArray<FRevenueCatOffering>Returns offerings from the last FetchOfferings call. Empty if you haven't fetched yet.
GetCurrentOffering(OutOffering)boolGets the offering marked "current" in the dashboard. Returns false if nothing is cached.
FindPackageByID(PackageID, OutPackage)boolFind a package by its RevenueCat PackageID (e.g. "$rc_monthly"). Searches all cached offerings.
FindPackageByProductID(ProductID, OutPackage)boolFind a package by the store product ID (e.g. "com.yourapp.monthly_sub"). Searches all cached offerings.

Purchases

FunctionReturnsDescription
PurchasePackage(Package)voidTrigger the native purchase flow for a package. Results come back through OnPurchaseCompleted.
RestorePurchases()voidRestore previous purchases (e.g. after reinstall). Results through OnPurchasesRestored.
SyncPurchases()voidForce-sync pending receipts with RevenueCat servers. Results through OnCustomerInfoUpdated.

Customer Info

FunctionReturnsDescription
FetchCustomerInfo(FetchPolicy)voidFetch customer info from RevenueCat. Results through OnCustomerInfoUpdated. FetchPolicy defaults to Default (cached); pass FetchCurrent to force a live read, for example on foreground to catch an expiry.
GetCachedCustomerInfo()FRevenueCatCustomerInfoReturns cached customer info from the last fetch.
IsEntitlementActive(EntitlementID)boolCheck if a specific entitlement is active. Uses cached data - call FetchCustomerInfo() first if you need fresh data.

User Identity

FunctionReturnsDescription
LogIn(AppUserID)voidIdentify a user with a custom ID. Links purchases to this ID across devices. Results through OnCustomerInfoUpdated.
LogOut()voidRevert to an anonymous RevenueCat ID. Results through OnCustomerInfoUpdated.
GetAppUserID()FStringGet the current RevenueCat App User ID (anonymous IDs start with $RCAnonymousID:).
IsAnonymous()boolWhether the current user is anonymous.

Subscriber Attributes

FunctionDescription
SetFirebaseAppInstanceId(AppInstanceId)Set Firebase App Instance ID for RevenueCat's Firebase integration. This plugin has no Firebase dependency; get the ID from your own Firebase setup.
SetAttributes(Attributes)Set arbitrary key-value pairs as subscriber attributes. Takes a TMap<FString, FString>.
SetEmail(Email)Set subscriber's email (reserved attribute).
SetDisplayName(DisplayName)Set subscriber's display name (reserved attribute).
SetPhoneNumber(PhoneNumber)Set subscriber's phone number (reserved attribute).

Attribution

FunctionDescription
SetMediaSource(MediaSource)Set media source (e.g. "facebook_ads").
SetCampaign(Campaign)Set campaign name.
SetAdGroup(AdGroup)Set ad group.
SetCreative(Creative)Set creative name.
SetKeyword(Keyword)Set keyword.
CollectDeviceIdentifiers()Auto-collect GAID (Android) / IDFA (iOS) and send to RevenueCat. Called automatically on SDK initialization - you only need to call this manually if you want to refresh identifiers later.
All attribution functions are fire-and-forget. No callback. Verify the values in the RevenueCat dashboard under the customer's attributes.

Subscription Management

FunctionDescription
ShowManageSubscriptions()Open the platform's subscription management page (Play Store or App Store). No-op on unsupported platforms.
PresentCodeRedemptionSheet()iOS only. Open the App Store offer-code redemption sheet (iOS 14+). No-op on other platforms.

Paywall

These functions present RevenueCat's native paywall UI, designed and configured in the RevenueCat dashboard. Requires iOS 16+ or Android with Compose.
FunctionReturnsDescription
PresentPaywall(OfferingID)voidPresent the native paywall UI. Pass an empty string to show the current offering. Results through OnPaywallCompleted.
PresentPaywallIfNeeded(EntitlementID)voidPresent the paywall only when the entitlement is inactive. Checks live entitlement state and honors a cached entitlement when offline. Results through OnPaywallCompleted.

Events (Delegates)

Bind these in Blueprints via the Assign node from the subsystem's Events section, or in C++:
RC->OnPurchaseCompleted.AddDynamic(this, &UMyClass::HandlePurchase);
DelegateParametersWhen It Fires
OnConfigured(none)SDK initialization completed.
OnOfferingsFetchedTArray<FRevenueCatOffering> OfferingsOfferings fetched from RevenueCat.
OnPurchaseCompletedERevenueCatPurchaseResult Result, FRevenueCatCustomerInfo CustomerInfoA purchase flow finished (success, cancel, error, or already owned).
OnPurchasesRestoredFRevenueCatCustomerInfo CustomerInfoRestore purchases completed.
OnCustomerInfoUpdatedFRevenueCatCustomerInfo CustomerInfoCustomer info changed: purchase, restore, login, logout, fetch, or a background SDK update. Treat as idempotent; it can fire more than once for one change.
OnPaywallCompletedERevenueCatPaywallResult Result, FRevenueCatCustomerInfo CustomerInfoThe native paywall was dismissed. Check the result for what happened (purchased, cancelled, restored, or error).
OnErrorFRevenueCatError ErrorAny error occurred. Check ErrorCode and ErrorMessage.

Async Blueprint Actions

These latent nodes derive from UBlueprintAsyncActionBase and provide output execution pins (OnSuccess / OnFailure / OnCancelled) directly in the Blueprint graph - no manual delegate binding needed.
Search for the node name in the Blueprint action palette (they are in the RevenueCat category).

Fetch Offerings (Async)

PinTypeDescription
OnSuccessTArray<FRevenueCatOffering>Fired with the fetched offerings
OnFailureFRevenueCatErrorFired on error

Purchase Package (Async)

PinTypeDescription
Package (input)FRevenueCatPackageThe package to purchase
OnSuccessFRevenueCatCustomerInfoFired when purchase succeeds or is already owned
OnCancelled-Fired when the user cancels the purchase flow
OnFailureFRevenueCatErrorFired on error or pending purchase

Restore Purchases (Async)

PinTypeDescription
OnSuccessFRevenueCatCustomerInfoFired with restored customer info
OnFailureFRevenueCatErrorFired on error

Sync Purchases (Async)

PinTypeDescription
OnSuccessFRevenueCatCustomerInfoFired with synced customer info
OnFailureFRevenueCatErrorFired on error

Fetch Customer Info (Async)

PinTypeDescription
FetchPolicy (input)ERevenueCatCacheFetchPolicyCache vs network policy (default Default); pass FetchCurrent to force a live read
OnSuccessFRevenueCatCustomerInfoFired with the latest customer info
OnFailureFRevenueCatErrorFired on error

Log In (Async)

PinTypeDescription
AppUserID (input)FStringThe custom user ID to log in with
OnSuccessFRevenueCatCustomerInfoFired with the identified customer info
OnFailureFRevenueCatErrorFired on error

Log Out (Async)

PinTypeDescription
OnSuccessFRevenueCatCustomerInfoFired with the anonymous customer info
OnFailureFRevenueCatErrorFired on error
Note: These async actions bind to the subsystem's delegates internally. The customer-info actions (Fetch Customer Info, Log In, Log Out, Sync Purchases) complete only on their own operation's result, not on a background SDK update. Avoid running two instances of the same action type at once, since they share a completion signal.

Present Paywall (Async)

Presents RevenueCat's native paywall UI. The paywall layout is configured in the RevenueCat dashboard.
PinTypeDescription
OfferingID (input)FStringOffering to display. Leave empty for the current offering.
OnPurchasedFRevenueCatCustomerInfoFired when the player completes a purchase through the paywall
OnCancelled-Fired when the player dismisses the paywall without purchasing
OnRestoredFRevenueCatCustomerInfoFired when the player restores purchases through the paywall
OnFailureFRevenueCatErrorFired on error

Data Types

Enums

ERevenueCatPurchaseResult

ValueMeaning
SuccessPurchase completed.
UserCancelledUser dismissed the purchase dialog.
ErrorPurchase failed. Check OnError for details.
AlreadyOwnedUser already owns this product.
PendingPurchasePurchase is pending (e.g. parental approval, slow payment method).

ERevenueCatPaywallResult

ValueMeaning
PurchasedPlayer completed a purchase through the paywall.
CancelledPlayer dismissed the paywall without purchasing.
RestoreCompletedPlayer restored purchases through the paywall.
ErrorSomething went wrong. Check OnError for details.

ERevenueCatProductType

ValueMeaning
SubscriptionAuto-renewing subscription.
NonConsumableOne-time purchase, permanent.
ConsumableConsumable (can be bought again).
UnknownType not determined.

ERevenueCatPeriodType

ValueMeaning
NormalStandard billing period.
IntroIntroductory offer period.
TrialFree trial period.

ERevenueCatStore

ValueMeaning
AppStoreApple App Store
PlayStoreGoogle Play Store
AmazonAmazon Appstore
StripeStripe (web)
PromotionalGranted via RevenueCat dashboard
UnknownUnknown store

ERevenueCatCacheFetchPolicy

ValueMeaning
DefaultServe cached info if present, else fetch. Fast and offline-friendly (the SDK default).
NotStaleCachedOrFetchedServe cached info while it is fresh, else fetch from the network.
FetchCurrentAlways fetch from the network, bypassing the cache. Use to catch a mid-session expiry.
FromCacheOnlyServe cached info only; never hit the network.

Structs

FRevenueCatProduct

Represents a single store product (a subscription, one-time purchase, etc.).
FieldTypeDescription
ProductIDFStringStore product identifier (e.g. "com.yourapp.monthly")
TitleFStringLocalized product title
DescriptionFStringLocalized product description
PriceStringFStringFormatted price with currency symbol (e.g. "$4.99")
PriceMicrosint64Price in micros (4990000 = $4.99)
CurrencyCodeFStringISO 4217 currency code (e.g. "USD")
ProductTypeERevenueCatProductTypeSubscription, NonConsumable, Consumable, or Unknown
SubscriptionPeriodFStringISO 8601 duration (e.g. "P1M" for monthly, "P1Y" for annual). Empty for non-subscriptions.
IntroPriceStringFStringFormatted intro price (e.g. "$0.99")
IntroPriceMicrosint64Intro price in micros
IntroPricePeriodFStringISO 8601 intro period (e.g. "P1W")
IntroPriceCyclesint32Number of intro billing cycles
FreeTrialPeriodFStringISO 8601 trial period (e.g. "P7D" for 7 days). Empty if no trial.

FRevenueCatPackage

A package is a product wrapped in an offering context. This is what you pass to PurchasePackage.
FieldTypeDescription
PackageIDFStringRevenueCat package identifier (e.g. "$rc_monthly")
PackageTypeFStringMONTHLY, ANNUAL, LIFETIME, WEEKLY, CUSTOM, etc.
ProductFRevenueCatProductThe store product in this package

FRevenueCatOffering

A group of packages. You configure these in the RevenueCat dashboard.
FieldTypeDescription
OfferingIDFStringRevenueCat offering identifier
DisplayNameFStringDescription you set in the dashboard
bIsCurrentboolWhether this is the "current" offering
PackagesTArray<FRevenueCatPackage>Available packages in this offering

FRevenueCatEntitlement

Represents access to a feature or content. This is what you check to gate premium content.
FieldTypeDescription
EntitlementIDFStringThe entitlement identifier (e.g. "pro")
bIsActiveboolWhether this entitlement is currently active
ProductIDFStringProduct that unlocked this entitlement
ExpirationDateFStringISO 8601 expiration date. Empty if it's a lifetime purchase.
bWillRenewboolWhether the subscription will auto-renew
PeriodTypeERevenueCatPeriodTypeNormal, Intro, or Trial
StoreERevenueCatStoreWhich store the purchase came from
bIsSandboxboolWhether this was purchased in sandbox/test mode
PurchaseDateFStringISO 8601 original purchase date
LatestPurchaseDateFStringISO 8601 latest purchase/renewal date
UnsubscribeDetectedAtFStringISO 8601 date unsubscribe was detected. Empty if still subscribed.
BillingIssueDetectedAtFStringISO 8601 date a billing issue was detected. Empty if no issues.

FRevenueCatCustomerInfo

The full picture of a customer's purchases and subscriptions.
FieldTypeDescription
OriginalAppUserIDFStringThe original RevenueCat App User ID
ActiveEntitlementsTArray<FRevenueCatEntitlement>Currently active entitlements (active only, mirroring RevenueCat's entitlements.active)
AllPurchasedProductIDsTArray<FString>Every product ID ever purchased
FirstSeenFStringISO 8601 date the user was first seen
ManagementURLFStringURL to manage subscriptions. Can be empty.
ActiveSubscriptionsTArray<FString>Product IDs with active subscriptions

FRevenueCatError

FieldTypeDescription
ErrorCodeint32RevenueCat error code
ErrorMessageFStringHuman-readable error message

Upgrading to 1.5.0

1.5.0 updates the bundled RevenueCat SDKs to Android 10.8.0 and iOS 5.78.0 (from 9.25.0 and 5.63.0). No nodes, pins, or C++ signatures changed, so your Blueprints and code keep working after a rebuild. Two things to handle on Android:
  • Set the project's Android Minimum SDK Version to 23 or higher. RevenueCat 10 runs on Google Play Billing 8, which requires API 23 (Android 6.0). You set this under Project Settings > Platforms > Android. Below 23, the Android build fails at manifest merge.
  • Check your consumable product types. RevenueCat 10 stops restoring consumed one-time products. If you sell consumables, confirm each one is set to the right type (consumable vs non-consumable) in the RevenueCat dashboard.
iOS needs nothing beyond a rebuild; the plugin ships the 5.78.0 frameworks, and the Android Compose runtime (now 1.7.0 / Material3 1.3.0) resolves through Gradle.

Upgrading to 1.4.0

The 1.4.0 update is drop-in: no nodes or pins were removed or renamed, so existing Blueprints keep working after you refresh nodes. A few behaviors changed:
  • Fetch Customer Info gained a Fetch Policy input pin (and the function gained an optional parameter). It defaults to Default, which matches the old behavior. Pass FetchCurrent to force a live read.
  • Bind OnError for purchase failures. A failed purchase no longer reports through OnPurchaseCompleted with an Error result; it comes through OnError only. The Purchase Package async node already routes failures to OnFailure, so node users need no change.
  • Keep your OnCustomerInfoUpdated handler idempotent. It now also fires after purchases and restores, and can fire more than once for a single change. Set state from IsEntitlementActive rather than granting additively.
  • ActiveEntitlements now lists active entitlements only. If you looped over it expecting expired entries, they are gone. IsEntitlementActive is unchanged.
  • A cancelled or failed purchase no longer clears cached entitlements. If you re-fetched after a cancel to work around that, you can remove it.

Editor Stubs (Win64)

On non-mobile platforms (Win64 editor), every function in the subsystem compiles and runs. Instead of calling the native SDK (which doesn't exist on desktop), it logs a message and completes deterministically.
You can:
  • Build and iterate on your Blueprint purchase flow in the editor
  • Compile and test C++ code without a device
  • Run PIE without crashes
The editor configures a stub on startup, so IsConfigured() returns true and OnConfigured fires. Every async operation completes its node instead of hanging: fetches return an empty result, and Purchase and Paywall report cancelled. There is no store, so no real entitlement is granted.