{"id":13795525,"url":"https://github.com/RevenueCat/purchases-capacitor","last_synced_at":"2025-05-12T23:32:24.530Z","repository":{"id":36953403,"uuid":"427781657","full_name":"RevenueCat/purchases-capacitor","owner":"RevenueCat","description":"Capacitor in-app purchases and subscriptions made easy.","archived":false,"fork":false,"pushed_at":"2025-05-07T18:00:44.000Z","size":19904,"stargazers_count":182,"open_issues_count":20,"forks_count":19,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-05-10T15:50:21.423Z","etag":null,"topics":["android","capacitor","capacitor-plugin","ios"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RevenueCat.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.latest.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"riderx"}},"created_at":"2021-11-13T22:01:24.000Z","updated_at":"2025-05-07T04:50:26.000Z","dependencies_parsed_at":"2025-04-30T18:55:51.868Z","dependency_job_id":"1c6944f7-6070-4716-85a4-0e0b6509e374","html_url":"https://github.com/RevenueCat/purchases-capacitor","commit_stats":{"total_commits":336,"total_committers":10,"mean_commits":33.6,"dds":0.5952380952380952,"last_synced_commit":"2119ae14c21db2488217c8119f1a8f294d352d61"},"previous_names":["riderx/capacitor-purchases","revenuecat/purchases-capacitor","cap-go/capacitor-purchases"],"tags_count":160,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RevenueCat%2Fpurchases-capacitor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RevenueCat%2Fpurchases-capacitor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RevenueCat%2Fpurchases-capacitor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RevenueCat%2Fpurchases-capacitor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RevenueCat","download_url":"https://codeload.github.com/RevenueCat/purchases-capacitor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253840965,"owners_count":21972570,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","capacitor","capacitor-plugin","ios"],"created_at":"2024-08-03T23:00:58.280Z","updated_at":"2025-05-12T23:32:24.510Z","avatar_url":"https://github.com/RevenueCat.png","language":"TypeScript","funding_links":["https://github.com/sponsors/riderx"],"categories":["Plugins","TypeScript","Other plugins"],"sub_categories":["Community Plugins","Specialized Hardware"],"readme":"\u003ch3 align=\"center\"\u003e😻 In-App Subscriptions Made Easy 😻\u003c/h3\u003e\n\n[![License](https://img.shields.io/github/license/RevenueCat/purchases-capacitor.svg?style=flat)](https://github.com/RevenueCat/purchases-capacitor/blob/main/LICENSE)\n[![Release](https://img.shields.io/github/release/RevenueCat/purchases-capacitor.svg?style=flat)](https://github.com/RevenueCat/purchases-capacitor/releases)\n\nRevenueCat is a powerful, reliable, and free to use in-app purchase server with cross-platform support. Our open-source framework provides a backend and a wrapper around StoreKit and Google Play Billing to make implementing in-app purchases and subscriptions easy.\n\nWhether you are building a new app or already have millions of customers, you can use RevenueCat to:\n\n* Fetch products, make purchases, and check subscription status with our [native SDKs](https://docs.revenuecat.com/docs/installation).\n* Host and [configure products](https://docs.revenuecat.com/docs/entitlements) remotely from our dashboard.\n* Analyze the most important metrics for your app business [in one place](https://docs.revenuecat.com/docs/charts).\n* See customer transaction histories, chart lifetime value, and [grant promotional subscriptions](https://docs.revenuecat.com/docs/customers).\n* Get notified of real-time events through [webhooks](https://docs.revenuecat.com/docs/webhooks).\n* Send enriched purchase events to analytics and attribution tools with our easy integrations.\n\nSign up to [get started for free](https://app.revenuecat.com/signup).\n\n## @revenuecat/purchases-capacitor\n\n*@revenuecat/purchases-capacitor* is the client for the [RevenueCat](https://www.revenuecat.com/) subscription and purchase tracking system. It is an open source framework that provides a wrapper around StoreKit, Google Play Billing and the RevenueCat backend to make implementing in-app purchases in Capacitor easy.\n\n## RevenueCat SDK Features\n|    | RevenueCat                                                                                                                                                   |\n|----|--------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ✅  | Server-side receipt validation                                                                                                                               |\n| ➡️ | [Webhooks](https://docs.revenuecat.com/docs/webhooks) - enhanced server-to-server communication with events for purchases, renewals, cancellations, and more |\n| 🎯 | Subscription status tracking - know whether a user is subscribed whether they're on iOS, Android or web                                                      |\n| 📊 | Analytics - automatic calculation of metrics like conversion, mrr, and churn                                                                                 |\n| 📝 | [Online documentation](https://docs.revenuecat.com/docs) up to date                                                                                          |\n| 🔀 | [Integrations](https://www.revenuecat.com/integrations) - over a dozen integrations to easily send purchase data where you need it                           | \n| 💯 | Well maintained - [frequent releases](https://github.com/RevenueCat/purchases-capacitor/releases)                                                            |\n| 📮 | Great support - [Help Center](https://revenuecat.zendesk.com)                                                                                                |\n\n## Getting Started\nFor more detailed information, you can view our complete documentation at [docs.revenuecat.com](https://docs.revenuecat.com/docs).\n\nPlease follow the [Quickstart Guide](https://docs.revenuecat.com/docs/) for more information on how to install the SDK.\n\n```bash\nnpm install @revenuecat/purchases-capacitor\nnpx cap sync\n```\n\n## Contributing\nContributions are always welcome! To learn how you can contribute, please see the [Contributing Guide](./CONTRIBUTING.md).\n\n## Acknowledgment\n\nThis plugin is based on [CapGo's Capacitor plugin](https://www.npmjs.com/package/@capgo/capacitor-purchases). The plugin was transferred to RevenueCat to become an officially supported plugin.\n\n## API\n\n\u003cdocgen-index\u003e\n\n* [`configure(...)`](#configure)\n* [`parseAsWebPurchaseRedemption(...)`](#parseaswebpurchaseredemption)\n* [`redeemWebPurchase(...)`](#redeemwebpurchase)\n* [`setMockWebResults(...)`](#setmockwebresults)\n* [`setSimulatesAskToBuyInSandbox(...)`](#setsimulatesasktobuyinsandbox)\n* [`addCustomerInfoUpdateListener(...)`](#addcustomerinfoupdatelistener)\n* [`removeCustomerInfoUpdateListener(...)`](#removecustomerinfoupdatelistener)\n* [`getOfferings()`](#getofferings)\n* [`getCurrentOfferingForPlacement(...)`](#getcurrentofferingforplacement)\n* [`syncAttributesAndOfferingsIfNeeded()`](#syncattributesandofferingsifneeded)\n* [`getProducts(...)`](#getproducts)\n* [`purchaseStoreProduct(...)`](#purchasestoreproduct)\n* [`purchaseDiscountedProduct(...)`](#purchasediscountedproduct)\n* [`purchasePackage(...)`](#purchasepackage)\n* [`purchaseSubscriptionOption(...)`](#purchasesubscriptionoption)\n* [`purchaseDiscountedPackage(...)`](#purchasediscountedpackage)\n* [`restorePurchases()`](#restorepurchases)\n* [`recordPurchase(...)`](#recordpurchase)\n* [`getAppUserID()`](#getappuserid)\n* [`logIn(...)`](#login)\n* [`logOut()`](#logout)\n* [`setLogLevel(...)`](#setloglevel)\n* [`setLogHandler(...)`](#setloghandler)\n* [`getCustomerInfo()`](#getcustomerinfo)\n* [`syncPurchases()`](#syncpurchases)\n* [`syncObserverModeAmazonPurchase(...)`](#syncobservermodeamazonpurchase)\n* [`syncAmazonPurchase(...)`](#syncamazonpurchase)\n* [`enableAdServicesAttributionTokenCollection()`](#enableadservicesattributiontokencollection)\n* [`isAnonymous()`](#isanonymous)\n* [`checkTrialOrIntroductoryPriceEligibility(...)`](#checktrialorintroductorypriceeligibility)\n* [`getPromotionalOffer(...)`](#getpromotionaloffer)\n* [`getEligibleWinBackOffersForProduct(...)`](#geteligiblewinbackoffersforproduct)\n* [`getEligibleWinBackOffersForPackage(...)`](#geteligiblewinbackoffersforpackage)\n* [`purchaseProductWithWinBackOffer(...)`](#purchaseproductwithwinbackoffer)\n* [`purchasePackageWithWinBackOffer(...)`](#purchasepackagewithwinbackoffer)\n* [`invalidateCustomerInfoCache()`](#invalidatecustomerinfocache)\n* [`presentCodeRedemptionSheet()`](#presentcoderedemptionsheet)\n* [`setAttributes(...)`](#setattributes)\n* [`setEmail(...)`](#setemail)\n* [`setPhoneNumber(...)`](#setphonenumber)\n* [`setDisplayName(...)`](#setdisplayname)\n* [`setPushToken(...)`](#setpushtoken)\n* [`setProxyURL(...)`](#setproxyurl)\n* [`collectDeviceIdentifiers()`](#collectdeviceidentifiers)\n* [`setAdjustID(...)`](#setadjustid)\n* [`setAppsflyerID(...)`](#setappsflyerid)\n* [`setFBAnonymousID(...)`](#setfbanonymousid)\n* [`setMparticleID(...)`](#setmparticleid)\n* [`setCleverTapID(...)`](#setclevertapid)\n* [`setMixpanelDistinctID(...)`](#setmixpaneldistinctid)\n* [`setFirebaseAppInstanceID(...)`](#setfirebaseappinstanceid)\n* [`setOnesignalID(...)`](#setonesignalid)\n* [`setOnesignalUserID(...)`](#setonesignaluserid)\n* [`setAirshipChannelID(...)`](#setairshipchannelid)\n* [`setMediaSource(...)`](#setmediasource)\n* [`setCampaign(...)`](#setcampaign)\n* [`setAdGroup(...)`](#setadgroup)\n* [`setAd(...)`](#setad)\n* [`setKeyword(...)`](#setkeyword)\n* [`setCreative(...)`](#setcreative)\n* [`canMakePayments(...)`](#canmakepayments)\n* [`beginRefundRequestForActiveEntitlement()`](#beginrefundrequestforactiveentitlement)\n* [`beginRefundRequestForEntitlement(...)`](#beginrefundrequestforentitlement)\n* [`beginRefundRequestForProduct(...)`](#beginrefundrequestforproduct)\n* [`showInAppMessages(...)`](#showinappmessages)\n* [`isConfigured()`](#isconfigured)\n* [Interfaces](#interfaces)\n* [Type Aliases](#type-aliases)\n* [Enums](#enums)\n\n\u003c/docgen-index\u003e\n\n\u003cdocgen-api\u003e\n\u003c!--Update the source file JSDoc comments and rerun docgen to update the docs below--\u003e\n\n### configure(...)\n\n```typescript\nconfigure(configuration: PurchasesConfiguration) =\u003e Promise\u003cvoid\u003e\n```\n\nSets up Purchases with your API key and an app user id.\n\n| Param               | Type                                                                      | Description                                                                                                                                                   |\n| ------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`configuration`** | \u003ccode\u003e\u003ca href=\"#purchasesconfiguration\"\u003ePurchasesConfiguration\u003c/a\u003e\u003c/code\u003e | RevenueCat configuration object including the API key and other optional parameters. See {@link \u003ca href=\"#purchasesconfiguration\"\u003ePurchasesConfiguration\u003c/a\u003e} |\n\n--------------------\n\n\n### parseAsWebPurchaseRedemption(...)\n\n```typescript\nparseAsWebPurchaseRedemption(options: { urlString: string; }) =\u003e Promise\u003c{ webPurchaseRedemption: WebPurchaseRedemption | null; }\u003e\n```\n\nParses the given URL string into a [WebPurchaseRedemption] object that can be used to redeem web purchases.\n\n| Param         | Type                                | Description                             |\n| ------------- | ----------------------------------- | --------------------------------------- |\n| **`options`** | \u003ccode\u003e{ urlString: string; }\u003c/code\u003e | Set the urlString used to open the App. |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ webPurchaseRedemption: \u003ca href=\"#webpurchaseredemption\"\u003eWebPurchaseRedemption\u003c/a\u003e | null; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### redeemWebPurchase(...)\n\n```typescript\nredeemWebPurchase(options: { webPurchaseRedemption: WebPurchaseRedemption; }) =\u003e Promise\u003cWebPurchaseRedemptionResult\u003e\n```\n\nRedeems the web purchase associated with the Redemption Link obtained with [parseAsWebPurchaseRedemption].\n\n| Param         | Type                                                                                                | Description                                                                                                               |\n| ------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ webPurchaseRedemption: \u003ca href=\"#webpurchaseredemption\"\u003eWebPurchaseRedemption\u003c/a\u003e; }\u003c/code\u003e | The \u003ca href=\"#webpurchaseredemption\"\u003eWebPurchaseRedemption\u003c/a\u003e object obtained from {@link parseAsWebPurchaseRedemption}. |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#webpurchaseredemptionresult\"\u003eWebPurchaseRedemptionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### setMockWebResults(...)\n\n```typescript\nsetMockWebResults(options: { shouldMockWebResults: boolean; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSets whether the SDK should return mocked results in the web version.\nThis won't affect the iOS and Android versions of the implementation.\nDefault is false\n\n| Param         | Type                                            | Description                                                                             |\n| ------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ shouldMockWebResults: boolean; }\u003c/code\u003e | Set shouldMockWebResults to true if you want the plugin methods to return mocked values |\n\n--------------------\n\n\n### setSimulatesAskToBuyInSandbox(...)\n\n```typescript\nsetSimulatesAskToBuyInSandbox(options: { simulatesAskToBuyInSandbox: boolean; }) =\u003e Promise\u003cvoid\u003e\n```\n\niOS only.\n\n| Param         | Type                                                  | Description                                                                                                                           |\n| ------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ simulatesAskToBuyInSandbox: boolean; }\u003c/code\u003e | Set this property to true *only* when testing the ask-to-buy / SCA purchases flow. More information: http://errors.rev.cat/ask-to-buy |\n\n--------------------\n\n\n### addCustomerInfoUpdateListener(...)\n\n```typescript\naddCustomerInfoUpdateListener(customerInfoUpdateListener: CustomerInfoUpdateListener) =\u003e Promise\u003cPurchasesCallbackId\u003e\n```\n\nSets a function to be called on updated customer info\n\n| Param                            | Type                                                                              | Description                                              |\n| -------------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------- |\n| **`customerInfoUpdateListener`** | \u003ccode\u003e\u003ca href=\"#customerinfoupdatelistener\"\u003eCustomerInfoUpdateListener\u003c/a\u003e\u003c/code\u003e | \u003ca href=\"#customerinfo\"\u003eCustomerInfo\u003c/a\u003e update listener |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;string\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### removeCustomerInfoUpdateListener(...)\n\n```typescript\nremoveCustomerInfoUpdateListener(options: { listenerToRemove: PurchasesCallbackId; }) =\u003e Promise\u003c{ wasRemoved: boolean; }\u003e\n```\n\nRemoves a given \u003ca href=\"#customerinfoupdatelistener\"\u003eCustomerInfoUpdateListener\u003c/a\u003e\n\n| Param         | Type                                       | Description                                                                                         |\n| ------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ listenerToRemove: string; }\u003c/code\u003e | Include listenerToRemove, which is a CustomerInfoUpdateListener reference of the listener to remove |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ wasRemoved: boolean; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### getOfferings()\n\n```typescript\ngetOfferings() =\u003e Promise\u003cPurchasesOfferings\u003e\n```\n\nGets the map of entitlements -\u0026gt; offerings -\u0026gt; products\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#purchasesofferings\"\u003ePurchasesOfferings\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### getCurrentOfferingForPlacement(...)\n\n```typescript\ngetCurrentOfferingForPlacement(options: { placementIdentifier: string; }) =\u003e Promise\u003cPurchasesOffering | null\u003e\n```\n\nRetrieves a current offering for a placement identifier, use this to access offerings defined by targeting\nplacements configured in the RevenueCat dashboard.\n\n| Param         | Type                                          |\n| ------------- | --------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ placementIdentifier: string; }\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#purchasesoffering\"\u003ePurchasesOffering\u003c/a\u003e | null\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### syncAttributesAndOfferingsIfNeeded()\n\n```typescript\nsyncAttributesAndOfferingsIfNeeded() =\u003e Promise\u003cPurchasesOfferings\u003e\n```\n\nSyncs subscriber attributes and then fetches the configured offerings for this user. This method is intended to\nbe called when using Targeting Rules with Custom Attributes. Any subscriber attributes should be set before\ncalling this method to ensure the returned offerings are applied with the latest subscriber attributes.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#purchasesofferings\"\u003ePurchasesOfferings\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### getProducts(...)\n\n```typescript\ngetProducts(options: GetProductOptions) =\u003e Promise\u003c{ products: PurchasesStoreProduct[]; }\u003e\n```\n\nFetch the product info\n\n| Param         | Type                                                            |\n| ------------- | --------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#getproductoptions\"\u003eGetProductOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ products: PurchasesStoreProduct[]; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### purchaseStoreProduct(...)\n\n```typescript\npurchaseStoreProduct(options: PurchaseStoreProductOptions) =\u003e Promise\u003cMakePurchaseResult\u003e\n```\n\nMake a purchase\n\n| Param         | Type                                                                                |\n| ------------- | ----------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#purchasestoreproductoptions\"\u003ePurchaseStoreProductOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#makepurchaseresult\"\u003eMakePurchaseResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### purchaseDiscountedProduct(...)\n\n```typescript\npurchaseDiscountedProduct(options: PurchaseDiscountedProductOptions) =\u003e Promise\u003cMakePurchaseResult\u003e\n```\n\niOS only. Purchase a product applying a given discount.\n\n| Param         | Type                                                                                          |\n| ------------- | --------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#purchasediscountedproductoptions\"\u003ePurchaseDiscountedProductOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#makepurchaseresult\"\u003eMakePurchaseResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### purchasePackage(...)\n\n```typescript\npurchasePackage(options: PurchasePackageOptions) =\u003e Promise\u003cMakePurchaseResult\u003e\n```\n\nMake a purchase\n\n| Param         | Type                                                                      |\n| ------------- | ------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#purchasepackageoptions\"\u003ePurchasePackageOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#makepurchaseresult\"\u003eMakePurchaseResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### purchaseSubscriptionOption(...)\n\n```typescript\npurchaseSubscriptionOption(options: PurchaseSubscriptionOptionOptions) =\u003e Promise\u003cMakePurchaseResult\u003e\n```\n\nGoogle only. Make a purchase of a subscriptionOption\n\n| Param         | Type                                                                                            |\n| ------------- | ----------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#purchasesubscriptionoptionoptions\"\u003ePurchaseSubscriptionOptionOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#makepurchaseresult\"\u003eMakePurchaseResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### purchaseDiscountedPackage(...)\n\n```typescript\npurchaseDiscountedPackage(options: PurchaseDiscountedPackageOptions) =\u003e Promise\u003cMakePurchaseResult\u003e\n```\n\niOS only. Purchase a package applying a given discount.\n\n| Param         | Type                                                                                          |\n| ------------- | --------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#purchasediscountedpackageoptions\"\u003ePurchaseDiscountedPackageOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#makepurchaseresult\"\u003eMakePurchaseResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### restorePurchases()\n\n```typescript\nrestorePurchases() =\u003e Promise\u003c{ customerInfo: CustomerInfo; }\u003e\n```\n\nRestores a user's previous purchases and links their appUserIDs to any user's also using those purchases.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ customerInfo: \u003ca href=\"#customerinfo\"\u003eCustomerInfo\u003c/a\u003e; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### recordPurchase(...)\n\n```typescript\nrecordPurchase(options: { productID: string; }) =\u003e Promise\u003c{ transaction: PurchasesStoreTransaction; }\u003e\n```\n\nUse this method only if you already have your own IAP implementation using StoreKit 2 and want to use\nRevenueCat's backend. If you are using StoreKit 1 for your implementation, you do not need this method.\n\nYou only need to use this method with *new* purchases. Subscription updates are observed automatically.\n\n| Param         | Type                                | Description                                                                         |\n| ------------- | ----------------------------------- | ----------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ productID: string; }\u003c/code\u003e | The productID that was purchased that needs to be synced with RevenueCat's backend. |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ transaction: \u003ca href=\"#purchasesstoretransaction\"\u003ePurchasesStoreTransaction\u003c/a\u003e; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### getAppUserID()\n\n```typescript\ngetAppUserID() =\u003e Promise\u003c{ appUserID: string; }\u003e\n```\n\nGet the appUserID\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ appUserID: string; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### logIn(...)\n\n```typescript\nlogIn(options: { appUserID: string; }) =\u003e Promise\u003cLogInResult\u003e\n```\n\nThis function will log in the current user with an appUserID. Typically, this would be used after a log in\nto identify a user without calling configure.\n\n| Param         | Type                                | Description                                             |\n| ------------- | ----------------------------------- | ------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ appUserID: string; }\u003c/code\u003e | The appUserID that should be linked to the current user |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#loginresult\"\u003eLogInResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### logOut()\n\n```typescript\nlogOut() =\u003e Promise\u003c{ customerInfo: CustomerInfo; }\u003e\n```\n\nLogs out the Purchases client clearing the saved appUserID. This will generate a random user id and save it in the cache.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ customerInfo: \u003ca href=\"#customerinfo\"\u003eCustomerInfo\u003c/a\u003e; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### setLogLevel(...)\n\n```typescript\nsetLogLevel(options: { level: LOG_LEVEL; }) =\u003e Promise\u003cvoid\u003e\n```\n\nUsed to set the log level. Useful for debugging issues with the lovely team @RevenueCat.\nThe default is {\u003ca href=\"#log_level\"\u003eLOG_LEVEL.INFO\u003c/a\u003e} in release builds and {\u003ca href=\"#log_level\"\u003eLOG_LEVEL.DEBUG\u003c/a\u003e} in debug builds.\n\n| Param         | Type                                                        | Description                       |\n| ------------- | ----------------------------------------------------------- | --------------------------------- |\n| **`options`** | \u003ccode\u003e{ level: \u003ca href=\"#log_level\"\u003eLOG_LEVEL\u003c/a\u003e; }\u003c/code\u003e | Log level to use to display logs. |\n\n--------------------\n\n\n### setLogHandler(...)\n\n```typescript\nsetLogHandler(logHandler: LogHandler) =\u003e Promise\u003cvoid\u003e\n```\n\nSet a custom log handler for redirecting logs to your own logging system.\nBy default, this sends info, warning, and error messages.\nIf you wish to receive Debug level messages, see [setLogLevel].\n\n| Param            | Type                                              | Description                                                                                             |\n| ---------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |\n| **`logHandler`** | \u003ccode\u003e\u003ca href=\"#loghandler\"\u003eLogHandler\u003c/a\u003e\u003c/code\u003e | It will get called for each log event. Use this function to redirect the log to your own logging system |\n\n--------------------\n\n\n### getCustomerInfo()\n\n```typescript\ngetCustomerInfo() =\u003e Promise\u003c{ customerInfo: CustomerInfo; }\u003e\n```\n\nGets current customer info\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ customerInfo: \u003ca href=\"#customerinfo\"\u003eCustomerInfo\u003c/a\u003e; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### syncPurchases()\n\n```typescript\nsyncPurchases() =\u003e Promise\u003cvoid\u003e\n```\n\nThis method will send all the purchases to the RevenueCat backend. Call this when using your own implementation\nfor subscriptions anytime a sync is needed, like after a successful purchase.\n\n--------------------\n\n\n### syncObserverModeAmazonPurchase(...)\n\n```typescript\nsyncObserverModeAmazonPurchase(options: SyncObserverModeAmazonPurchaseOptions) =\u003e Promise\u003cvoid\u003e\n```\n\n| Param         | Type                                                                            |\n| ------------- | ------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#syncamazonpurchaseoptions\"\u003eSyncAmazonPurchaseOptions\u003c/a\u003e\u003c/code\u003e |\n\n--------------------\n\n\n### syncAmazonPurchase(...)\n\n```typescript\nsyncAmazonPurchase(options: SyncAmazonPurchaseOptions) =\u003e Promise\u003cvoid\u003e\n```\n\nThis method will send a purchase to the RevenueCat backend. This function should only be called if you are\nin Amazon observer mode or performing a client side migration of your current users to RevenueCat.\n\nThe receipt IDs are cached if successfully posted, so they are not posted more than once.\n\n| Param         | Type                                                                            |\n| ------------- | ------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#syncamazonpurchaseoptions\"\u003eSyncAmazonPurchaseOptions\u003c/a\u003e\u003c/code\u003e |\n\n--------------------\n\n\n### enableAdServicesAttributionTokenCollection()\n\n```typescript\nenableAdServicesAttributionTokenCollection() =\u003e Promise\u003cvoid\u003e\n```\n\nEnable automatic collection of Apple Search Ad attribution on iOS. Disabled by default. Supported in iOS 14.3+ only\n\n--------------------\n\n\n### isAnonymous()\n\n```typescript\nisAnonymous() =\u003e Promise\u003c{ isAnonymous: boolean; }\u003e\n```\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ isAnonymous: boolean; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkTrialOrIntroductoryPriceEligibility(...)\n\n```typescript\ncheckTrialOrIntroductoryPriceEligibility(options: { productIdentifiers: string[]; }) =\u003e Promise\u003c{ [productId: string]: IntroEligibility; }\u003e\n```\n\niOS only. Computes whether a user is eligible for the introductory pricing period of a given product.\nYou should use this method to determine whether you show the user the normal product price or the\nintroductory price. This also applies to trials (trials are considered a type of introductory pricing).\n\n| Param         | Type                                           | Description                                                            |\n| ------------- | ---------------------------------------------- | ---------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ productIdentifiers: string[]; }\u003c/code\u003e | Array of product identifiers for which you want to compute eligibility |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ [productId: string]: \u003ca href=\"#introeligibility\"\u003eIntroEligibility\u003c/a\u003e; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### getPromotionalOffer(...)\n\n```typescript\ngetPromotionalOffer(options: GetPromotionalOfferOptions) =\u003e Promise\u003cPurchasesPromotionalOffer | undefined\u003e\n```\n\niOS only. Use this function to retrieve the \u003ca href=\"#purchasespromotionaloffer\"\u003e`PurchasesPromotionalOffer`\u003c/a\u003e for a given \u003ca href=\"#purchasespackage\"\u003e`PurchasesPackage`\u003c/a\u003e.\n\n| Param         | Type                                                                              |\n| ------------- | --------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#getpromotionalofferoptions\"\u003eGetPromotionalOfferOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#purchasespromotionaloffer\"\u003ePurchasesPromotionalOffer\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### getEligibleWinBackOffersForProduct(...)\n\n```typescript\ngetEligibleWinBackOffersForProduct(options: GetEligibleWinBackOffersForProductOptions) =\u003e Promise\u003c{ eligibleWinBackOffers: PurchasesWinBackOffer[]; }\u003e\n```\n\niOS only, requires iOS 18.0 or greater with StoreKit 2. Use this function to retrieve\nthe eligible `PurchasesWinBackOffer`s that a subscriber is eligible for for a\ngiven \u003ca href=\"#purchasesstoreproduct\"\u003e`PurchasesStoreProduct`\u003c/a\u003e.\n\n| Param         | Type                                                                                                            |\n| ------------- | --------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#geteligiblewinbackoffersforproductoptions\"\u003eGetEligibleWinBackOffersForProductOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ eligibleWinBackOffers: PurchasesWinBackOffer[]; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### getEligibleWinBackOffersForPackage(...)\n\n```typescript\ngetEligibleWinBackOffersForPackage(options: GetEligibleWinBackOffersForPackageOptions) =\u003e Promise\u003c{ eligibleWinBackOffers: PurchasesWinBackOffer[]; }\u003e\n```\n\niOS only, requires iOS 18.0 or greater with StoreKit 2. Use this function to retrieve\nthe eligible `PurchasesWinBackOffer`s that a subscriber is eligible for for a\ngiven `PurchasesStorePackage`.\n\n| Param         | Type                                                                                                            |\n| ------------- | --------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#geteligiblewinbackoffersforpackageoptions\"\u003eGetEligibleWinBackOffersForPackageOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ eligibleWinBackOffers: PurchasesWinBackOffer[]; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### purchaseProductWithWinBackOffer(...)\n\n```typescript\npurchaseProductWithWinBackOffer(options: PurchaseProductWithWinBackOfferOptions) =\u003e Promise\u003cMakePurchaseResult | undefined\u003e\n```\n\niOS only, requires iOS 18.0 or greater with StoreKit 2. Purchase a product applying a given win-back offer.\n\n| Param         | Type                                                                                                      |\n| ------------- | --------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#purchaseproductwithwinbackofferoptions\"\u003ePurchaseProductWithWinBackOfferOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#makepurchaseresult\"\u003eMakePurchaseResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### purchasePackageWithWinBackOffer(...)\n\n```typescript\npurchasePackageWithWinBackOffer(options: PurchasePackageWithWinBackOfferOptions) =\u003e Promise\u003cMakePurchaseResult | undefined\u003e\n```\n\niOS only, requires iOS 18.0 or greater with StoreKit 2. Purchase a package applying a given win-back offer.\n\n| Param         | Type                                                                                                      |\n| ------------- | --------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#purchasepackagewithwinbackofferoptions\"\u003ePurchasePackageWithWinBackOfferOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#makepurchaseresult\"\u003eMakePurchaseResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### invalidateCustomerInfoCache()\n\n```typescript\ninvalidateCustomerInfoCache() =\u003e Promise\u003cvoid\u003e\n```\n\nInvalidates the cache for customer information.\n\nMost apps will not need to use this method; invalidating the cache can leave your app in an invalid state.\nRefer to https://docs.revenuecat.com/docs/customer-info#section-get-user-information for more information on\nusing the cache properly.\n\nThis is useful for cases where customer information might have been updated outside the app, like if a\npromotional subscription is granted through the RevenueCat dashboard.\n\n--------------------\n\n\n### presentCodeRedemptionSheet()\n\n```typescript\npresentCodeRedemptionSheet() =\u003e Promise\u003cvoid\u003e\n```\n\niOS 14.0+ only. Presents a code redemption sheet, useful for redeeming offer codes\nRefer to https://docs.revenuecat.com/docs/ios-subscription-offers#offer-codes for more information on how\nto configure and use offer codes\n\n--------------------\n\n\n### setAttributes(...)\n\n```typescript\nsetAttributes(attributes: { [key: string]: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attributes are useful for storing additional, structured information on a user.\nSince attributes are writable using a public key they should not be used for\nmanaging secure or sensitive information such as subscription status, coins, etc.\n\nKey names starting with \"$\" are reserved names used by RevenueCat. For a full list of key\nrestrictions refer to our guide: https://docs.revenuecat.com/docs/subscriber-attributes\n\n| Param            | Type                                            | Description                                                                        |\n| ---------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------- |\n| **`attributes`** | \u003ccode\u003e{ [key: string]: string \\| null; }\u003c/code\u003e | Map of attributes by key. Set the value as an empty string to delete an attribute. |\n\n--------------------\n\n\n### setEmail(...)\n\n```typescript\nsetEmail(options: { email: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the email address for the user\n\n| Param         | Type                                    | Description                                                |\n| ------------- | --------------------------------------- | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ email: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setPhoneNumber(...)\n\n```typescript\nsetPhoneNumber(options: { phoneNumber: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the phone number for the user\n\n| Param         | Type                                          | Description                                                |\n| ------------- | --------------------------------------------- | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ phoneNumber: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setDisplayName(...)\n\n```typescript\nsetDisplayName(options: { displayName: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the display name for the user\n\n| Param         | Type                                          | Description                                                |\n| ------------- | --------------------------------------------- | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ displayName: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setPushToken(...)\n\n```typescript\nsetPushToken(options: { pushToken: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the push token for the user\n\n| Param         | Type                                        | Description                                |\n| ------------- | ------------------------------------------- | ------------------------------------------ |\n| **`options`** | \u003ccode\u003e{ pushToken: string \\| null; }\u003c/code\u003e | null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setProxyURL(...)\n\n```typescript\nsetProxyURL(options: { url: string; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSet this property to your proxy URL before configuring Purchases *only* if you've received a proxy key value\nfrom your RevenueCat contact.\n\n| Param         | Type                          |\n| ------------- | ----------------------------- |\n| **`options`** | \u003ccode\u003e{ url: string; }\u003c/code\u003e |\n\n--------------------\n\n\n### collectDeviceIdentifiers()\n\n```typescript\ncollectDeviceIdentifiers() =\u003e Promise\u003cvoid\u003e\n```\n\nAutomatically collect subscriber attributes associated with the device identifiers.\n$idfa, $idfv, $ip on iOS\n$gpsAdId, $androidId, $ip on Android\n\n--------------------\n\n\n### setAdjustID(...)\n\n```typescript\nsetAdjustID(options: { adjustID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the Adjust ID for the user\nRequired for the RevenueCat Adjust integration\n\n| Param         | Type                                       | Description                                                                                        |\n| ------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ adjustID: string \\| null; }\u003c/code\u003e | Adjust ID to use in Adjust integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setAppsflyerID(...)\n\n```typescript\nsetAppsflyerID(options: { appsflyerID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the AppsFlyer ID for the user\nRequired for the RevenueCat AppsFlyer integration\n\n| Param         | Type                                          | Description                                                                                              |\n| ------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ appsflyerID: string \\| null; }\u003c/code\u003e | Appsflyer ID to use in Appsflyer integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setFBAnonymousID(...)\n\n```typescript\nsetFBAnonymousID(options: { fbAnonymousID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the Facebook SDK Anonymous ID for the user\nRecommended for the RevenueCat Facebook integration\n\n| Param         | Type                                            | Description                                                                                                       |\n| ------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ fbAnonymousID: string \\| null; }\u003c/code\u003e | Facebook Anonymous ID to use in Mparticle integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setMparticleID(...)\n\n```typescript\nsetMparticleID(options: { mparticleID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the mParticle ID for the user\nRecommended for the RevenueCat mParticle integration\n\n| Param         | Type                                          | Description                                                                                              |\n| ------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ mparticleID: string \\| null; }\u003c/code\u003e | Mparticle ID to use in Mparticle integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setCleverTapID(...)\n\n```typescript\nsetCleverTapID(options: { cleverTapID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the CleverTap ID for the user\nRequired for the RevenueCat CleverTap integration\n\n| Param         | Type                                          | Description                                                                                                   |\n| ------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ cleverTapID: string \\| null; }\u003c/code\u003e | CleverTap user ID to use in CleverTap integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setMixpanelDistinctID(...)\n\n```typescript\nsetMixpanelDistinctID(options: { mixpanelDistinctID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the Mixpanel Distinct ID for the user\nRequired for the RevenueCat Mixpanel integration\n\n| Param         | Type                                                 | Description                                                                                                     |\n| ------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ mixpanelDistinctID: string \\| null; }\u003c/code\u003e | Mixpanel Distinct ID to use in Mixpanel integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setFirebaseAppInstanceID(...)\n\n```typescript\nsetFirebaseAppInstanceID(options: { firebaseAppInstanceID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the Firebase App Instance ID for the user\nRequired for the RevenueCat Firebase integration\n\n| Param         | Type                                                    | Description                                                                                                         |\n| ------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ firebaseAppInstanceID: string \\| null; }\u003c/code\u003e | Firebase App Instance ID to use in Firebase integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setOnesignalID(...)\n\n```typescript\nsetOnesignalID(options: { onesignalID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the OneSignal Player ID for the user\nRequired for the RevenueCat OneSignal integration. Deprecated for OneSignal versions above v9.0.\n\n| Param         | Type                                          | Description                                                                                                     |\n| ------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ onesignalID: string \\| null; }\u003c/code\u003e | OneSignal Player ID to use in OneSignal integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setOnesignalUserID(...)\n\n```typescript\nsetOnesignalUserID(options: { onesignalUserID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the OneSignal User ID for the user\nRequired for the RevenueCat OneSignal integration with versions v11.0 and above.\n\n| Param         | Type                                              | Description                                                                                                  |\n| ------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |\n| **`options`** | \u003ccode\u003e{ onesignalUserID: string \\| null; }\u003c/code\u003e | OneSignal UserId to use in OneSignal integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setAirshipChannelID(...)\n\n```typescript\nsetAirshipChannelID(options: { airshipChannelID: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the Airship Channel ID for the user\nRequired for the RevenueCat Airship integration\n\n| Param         | Type                                               | Description                                                                                                  |\n| ------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |\n| **`options`** | \u003ccode\u003e{ airshipChannelID: string \\| null; }\u003c/code\u003e | Airship Channel ID to use in Airship integration. Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setMediaSource(...)\n\n```typescript\nsetMediaSource(options: { mediaSource: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the install media source for the user\n\n| Param         | Type                                          | Description                                                |\n| ------------- | --------------------------------------------- | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ mediaSource: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setCampaign(...)\n\n```typescript\nsetCampaign(options: { campaign: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the install campaign for the user\n\n| Param         | Type                                       | Description                                                |\n| ------------- | ------------------------------------------ | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ campaign: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setAdGroup(...)\n\n```typescript\nsetAdGroup(options: { adGroup: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the install ad group for the user\n\n| Param         | Type                                      | Description                                                |\n| ------------- | ----------------------------------------- | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ adGroup: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setAd(...)\n\n```typescript\nsetAd(options: { ad: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the install ad for the user\n\n| Param         | Type                                 | Description                                                |\n| ------------- | ------------------------------------ | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ ad: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setKeyword(...)\n\n```typescript\nsetKeyword(options: { keyword: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the install keyword for the user\n\n| Param         | Type                                      | Description                                                |\n| ------------- | ----------------------------------------- | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ keyword: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### setCreative(...)\n\n```typescript\nsetCreative(options: { creative: string | null; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSubscriber attribute associated with the install ad creative for the user\n\n| Param         | Type                                       | Description                                                |\n| ------------- | ------------------------------------------ | ---------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ creative: string \\| null; }\u003c/code\u003e | Empty String or null will delete the subscriber attribute. |\n\n--------------------\n\n\n### canMakePayments(...)\n\n```typescript\ncanMakePayments(options?: { features?: BILLING_FEATURE[] | undefined; } | undefined) =\u003e Promise\u003c{ canMakePayments: boolean; }\u003e\n```\n\nCheck if billing is supported for the current user (meaning IN-APP purchases are supported)\nand optionally, whether a list of specified feature types are supported.\n\nNote: Billing features are only relevant to Google Play Android users.\nFor other stores and platforms, billing features won't be checked.\n\n| Param         | Type                                           | Description                                                                                                                                                                   |\n| ------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ features?: BILLING_FEATURE[]; }\u003c/code\u003e | An array of feature types to check for support. Feature types must be one of [BILLING_FEATURE]. By default, is an empty list and no specific feature support will be checked. |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ canMakePayments: boolean; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### beginRefundRequestForActiveEntitlement()\n\n```typescript\nbeginRefundRequestForActiveEntitlement() =\u003e Promise\u003c{ refundRequestStatus: REFUND_REQUEST_STATUS; }\u003e\n```\n\niOS 15+ only. Presents a refund request sheet in the current window scene for\nthe latest transaction associated with the active entitlement.\n\nIf the request was unsuccessful, no active entitlements could be found for\nthe user, or multiple active entitlements were found for the user,\nthe promise will return an error.\nIf called in an unsupported platform (Android or iOS \u0026lt; 15), an `UnsupportedPlatformException` will be thrown.\n\nImportant: This method should only be used if your user can only have a single active entitlement at a given time.\nIf a user could have more than one entitlement at a time, use `beginRefundRequestForEntitlement` instead.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ refundRequestStatus: \u003ca href=\"#refund_request_status\"\u003eREFUND_REQUEST_STATUS\u003c/a\u003e; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### beginRefundRequestForEntitlement(...)\n\n```typescript\nbeginRefundRequestForEntitlement(options: { entitlementInfo: PurchasesEntitlementInfo; }) =\u003e Promise\u003c{ refundRequestStatus: REFUND_REQUEST_STATUS; }\u003e\n```\n\niOS 15+ only. Presents a refund request sheet in the current window scene for\nthe latest transaction associated with the `entitlement`.\n\nIf the request was unsuccessful, the promise will return an error.\nIf called in an unsupported platform (Android or iOS \u0026lt; 15), an `UnsupportedPlatformException` will be thrown.\n\n| Param         | Type                                                                                                | Description                                    |\n| ------------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ entitlementInfo: \u003ca href=\"#purchasesentitlementinfo\"\u003ePurchasesEntitlementInfo\u003c/a\u003e; }\u003c/code\u003e | The entitlement to begin a refund request for. |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ refundRequestStatus: \u003ca href=\"#refund_request_status\"\u003eREFUND_REQUEST_STATUS\u003c/a\u003e; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### beginRefundRequestForProduct(...)\n\n```typescript\nbeginRefundRequestForProduct(options: { storeProduct: PurchasesStoreProduct; }) =\u003e Promise\u003c{ refundRequestStatus: REFUND_REQUEST_STATUS; }\u003e\n```\n\niOS 15+ only. Presents a refund request sheet in the current window scene for\nthe latest transaction associated with the `product`.\n\nIf the request was unsuccessful, the promise will return an error.\nIf called in an unsupported platform (Android or iOS \u0026lt; 15), an `UnsupportedPlatformException` will be thrown.\n\n| Param         | Type                                                                                       | Description                                     |\n| ------------- | ------------------------------------------------------------------------------------------ | ----------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ storeProduct: \u003ca href=\"#purchasesstoreproduct\"\u003ePurchasesStoreProduct\u003c/a\u003e; }\u003c/code\u003e | The StoreProduct to begin a refund request for. |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ refundRequestStatus: \u003ca href=\"#refund_request_status\"\u003eREFUND_REQUEST_STATUS\u003c/a\u003e; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### showInAppMessages(...)\n\n```typescript\nshowInAppMessages(options?: { messageTypes?: IN_APP_MESSAGE_TYPE[] | undefined; } | undefined) =\u003e Promise\u003cvoid\u003e\n```\n\nShows in-app messages available from the App \u003ca href=\"#store\"\u003eStore\u003c/a\u003e or Google Play. You need to disable messages from showing\nautomatically using [PurchasesConfiguration.shouldShowInAppMessagesAutomatically].\n\nNote: In iOS, this requires version 16+. In older versions the promise will be resolved successfully\nimmediately.\n\n| Param         | Type                                                   | Description                                                                                                                                                                       |\n| ------------- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ messageTypes?: IN_APP_MESSAGE_TYPE[]; }\u003c/code\u003e | An array of message types that the stores can display inside your app. Values must be one of [IN_APP_MESSAGE_TYPE]. By default, is undefined and all message types will be shown. |\n\n--------------------\n\n\n### isConfigured()\n\n```typescript\nisConfigured() =\u003e Promise\u003c{ isConfigured: boolean; }\u003e\n```\n\nCheck if configure has finished and Purchases has been configured.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ isConfigured: boolean; }\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### Interfaces\n\n\n#### PurchasesConfiguration\n\nHolds parameters to initialize the SDK.\n\n| Prop                                            | Type                                                                                    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |\n| ----------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`apiKey`**                                    | \u003ccode\u003estring\u003c/code\u003e                                                                     | RevenueCat API Key. Needs to be a string                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| **`appUserID`**                                 | \u003ccode\u003estring \\| null\u003c/code\u003e                                                             | A unique id for identifying the user                                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| **`purchasesAreCompletedBy`**                   | \u003ccode\u003e\u003ca href=\"#purchasesarecompletedby\"\u003ePurchasesAreCompletedBy\u003c/a\u003e\u003c/code\u003e             | Set this to MY_APP and provide a \u003ca href=\"#storekit_version\"\u003eSTOREKIT_VERSION\u003c/a\u003e if you have your own IAP implementation and want to only use RevenueCat's backend. Defaults to \u003ca href=\"#purchases_are_completed_by_type\"\u003ePURCHASES_ARE_COMPLETED_BY_TYPE.REVENUECAT\u003c/a\u003e. If you are on Android and setting this to MY_APP, will have to acknowledge the purchases yourself. If your app is only on Android, you may specify any StoreKit version, as it is ignored by the Android SDK. |\n| **`userDefaultsSuiteName`**                     | \u003ccode\u003estring\u003c/code\u003e                                                                     | An optional string. iOS-only, will be ignored for Android. Set this if you would like the RevenueCat SDK to store its preferences in a different NSUserDefaults suite, otherwise it will use standardUserDefaults. Default is null, which will make the SDK use standardUserDefaults.                                                                                                                                                                                                     |\n| **`storeKitVersion`**                           | \u003ccode\u003e\u003ca href=\"#storekit_version\"\u003eSTOREKIT_VERSION\u003c/a\u003e\u003c/code\u003e                           | iOS-only, will be ignored for Android. By selecting the DEFAULT value, RevenueCat will automatically select the most appropriate StoreKit version for the app's runtime environment. - Warning: Make sure you have an In-App Purchase Key configured in your app. Please see https://rev.cat/in-app-purchase-key-configuration for more info. - Note: StoreKit 2 is only available on iOS 16+. StoreKit 1 will be used for previous iOS versions regardless of this setting.              |\n| **`useAmazon`**                                 | \u003ccode\u003eboolean\u003c/code\u003e                                                                    | An optional boolean. Android only. Required to configure the plugin to be used in the Amazon Appstore.                                                                                                                                                                                                                                                                                                                                                                                    |\n| **`shouldShowInAppMessagesAutomatically`**      | \u003ccode\u003eboolean\u003c/code\u003e                                                                    | Whether we should show store in-app messages automatically. Both Google Play and the App \u003ca href=\"#store\"\u003eStore\u003c/a\u003e provide in-app messages for some situations like billing issues. By default, those messages will be shown automatically. This allows to disable that behavior, so you can display those messages at your convenience. For more information, check: https://rev.cat/storekit-message and https://rev.cat/googleplayinappmessaging                                      |\n| **`entitlementVerificationMode`**               | \u003ccode\u003e\u003ca href=\"#entitlement_verification_mode\"\u003eENTITLEMENT_VERIFICATION_MODE\u003c/a\u003e\u003c/code\u003e | Verification strictness levels for [EntitlementInfo]. See https://rev.cat/trusted-entitlements for more info.                                                                                                                                                                                                                                                                                                                                                                             |\n| **`pendingTransactionsForPrepaidPlansEnabled`** | \u003ccode\u003eboolean\u003c/code\u003e                                                                    | Enable this setting if you want to allow pending purchases for prepaid subscriptions (only supported in Google Play). Note that entitlements are not granted until payment is done. Disabled by default.                                                                                                                                                                                                                                                                                  |\n| **`diagnosticsEnabled`**                        | \u003ccode\u003eboolean\u003c/code\u003e                                                                    | Enabling diagnostics will send some performance and debugging information from the SDK to RevenueCat's servers. Examples of this information include response times, cache hits or error codes. No personal identifiable information will be collected. The default value is false.                                                                                                                                                                                                       |\n\n\n#### CustomerInfo\n\nType containing all information regarding the customer\n\n| Prop                                   | Type                                                                                                | Description                                                                                                                                                                                                                                                                                                                                                                                |\n| -------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| **`entitlements`**                     | \u003ccode\u003e\u003ca href=\"#purchasesentitlementinfos\"\u003ePurchasesEntitlementInfos\u003c/a\u003e\u003c/code\u003e                     | Entitlements attached to this customer info                                                                                                                                                                                                                                                                                                                                                |\n| **`activeSubscriptions`**              | \u003ccode\u003estring[]\u003c/code\u003e                                                                               | Set of active subscription skus                                                                                                                                                                                                                                                                                                                                                            |\n| **`allPurchasedProductIdentifiers`**   | \u003ccode\u003estring[]\u003c/code\u003e                                                                               | Set of purchased skus, active and inactive                                                                                                                                                                                                                                                                                                                                                 |\n| **`latestExpirationDate`**             | \u003ccode\u003estring \\| null\u003c/code\u003e                                                                         | The latest expiration date of all purchased skus                                                                                                                                                                                                                                                                                                                                           |\n| **`firstSeen`**                        | \u003ccode\u003estring\u003c/code\u003e                                                                                 | The date this user was first seen in RevenueCat.                                                                                                                                                                                                                                                                                                                                           |\n| **`originalAppUserId`**                | \u003ccode\u003estring\u003c/code\u003e                                                                                 | The original App User Id recorded for this user.                                                                                                                                                                                                                                                                                                                                           |\n| **`requestDate`**                      | \u003ccode\u003estring\u003c/code\u003e                                                                                 | Date when this info was requested                                                                                                                                                                                                                                                                                                                                                          |\n| **`allExpirationDates`**               | \u003ccode\u003e{ [key: string]: string \\| null; }\u003c/code\u003e                                                     | Map of skus to expiration dates                                                                                                                                                                                                                                                                                                                                                            |\n| **`allPurchaseDates`**                 | \u003ccode\u003e{ [key: string]: string \\| null; }\u003c/code\u003e                                                     | Map of skus to purchase dates                                                                                                                                                                                                                                                                                                                                                              |\n| **`originalApplicationVersion`**       | \u003ccode\u003estring \\| null\u003c/code\u003e                                                                         | Returns the version number for the version of the application when the user bought the app. Use this for grandfathering users when migrating to subscriptions. This corresponds to the value of CFBundleVersion (in iOS) in the Info.plist file when the purchase was originally made. This is always null in Android                                                                      |\n| **`originalPurchaseDate`**             | \u003ccode\u003estring \\| null\u003c/code\u003e                                                                         | Returns the purchase date for the version of the application when the user bought the app. Use this for grandfathering users when migrating to subscriptions.                                                                                                                                                                                                                              |\n| **`managementURL`**                    | \u003ccode\u003estring \\| null\u003c/code\u003e                                                                         | URL to manage the active subscription of the user. If this user has an active iOS subscription, this will point to the App \u003ca href=\"#store\"\u003eStore\u003c/a\u003e, if the user has an active Play \u003ca href=\"#store\"\u003eStore\u003c/a\u003e subscription it will point there. If there are no active subscriptions it will be null. If there are multiple for different platforms, it will point to the device store. |\n| **`nonSubscriptionTransactions`**      | \u003ccode\u003ePurchasesStoreTransaction[]\u003c/code\u003e                                                            | List of all non subscription transactions. Use this to fetch the history of non-subscription purchases                                                                                                                                                                                                                                                                                     |\n| **`subscriptionsByProductIdentifier`** | \u003ccode\u003e{ [key: string]: \u003ca href=\"#purchasessubscriptioninfo\"\u003ePurchasesSubscriptionInfo\u003c/a\u003e; }\u003c/code\u003e | Information about the customer's subscriptions for each product identifier.                                                                                                                                                                                                                                                                                                                |\n\n\n#### PurchasesEntitlementInfos\n\nContains all the entitlements associated to the user.\n\n| Prop               | Type                                                                                              | Description                                                                                                                                                    |\n| ------------------ | ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`all`**          | \u003ccode\u003e{ [key: string]: \u003ca href=\"#purchasesentitlementinfo\"\u003ePurchasesEntitlementInfo\u003c/a\u003e; }\u003c/code\u003e | Map of all EntitlementInfo (\u003ca href=\"#purchasesentitlementinfo\"\u003e`PurchasesEntitlementInfo`\u003c/a\u003e) objects (active and inactive) keyed by entitlement identifier. |\n| **`active`**       | \u003ccode\u003e{ [key: string]: \u003ca href=\"#purchasesentitlementinfo\"\u003ePurchasesEntitlementInfo\u003c/a\u003e; }\u003c/code\u003e | Map of active EntitlementInfo (\u003ca href=\"#purchasesentitlementinfo\"\u003e`PurchasesEntitlementInfo`\u003c/a\u003e) objects keyed by entitlement identifier.                    |\n| **`verification`** | \u003ccode\u003e\u003ca href=\"#verification_result\"\u003eVERIFICATION_RESULT\u003c/a\u003e\u003c/code\u003e                               | If entitlement verification was enabled, the result of that verification. If not, VerificationResult.NOT_REQUESTED                                             |\n\n\n#### PurchasesEntitlementInfo\n\nThe EntitlementInfo object gives you access to all of the information about the status of a user entitlement.\n\n| Prop                               | Type                                                                | Description                                                                                                                                                                                                                                         |\n| ---------------------------------- | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`identifier`**                   | \u003ccode\u003estring\u003c/code\u003e                                                 | The entitlement identifier configured in the RevenueCat dashboard                                                                                                                                                                                   |\n| **`isActive`**                     | \u003ccode\u003eboolean\u003c/code\u003e                                                | True if the user has access to this entitlement                                                                                                                                                                                                     |\n| **`willRenew`**                    | \u003ccode\u003eboolean\u003c/code\u003e                                                | True if the underlying subscription is set to renew at the end of the billing period (expirationDate).                                                                                                                                              |\n| **`periodType`**                   | \u003ccode\u003estring\u003c/code\u003e                                                 | The last period type this entitlement was in. Either: NORMAL, INTRO, TRIAL, PREPAID.                                                                                                                                                                |\n| **`latestPurchaseDate`**           | \u003ccode\u003estring\u003c/code\u003e                                                 | The latest purchase or renewal date for the entitlement in ISO8601 format.                                                                                                                                                                          |\n| **`latestPurchaseDateMillis`**     | \u003ccode\u003enumber\u003c/code\u003e                                                 | The latest purchase or renewal date for the entitlement in milliseconds.                                                                                                                                                                            |\n| **`originalPurchaseDate`**         | \u003ccode\u003estring\u003c/code\u003e                                                 | The first date this entitlement was purchased in ISO8601 format.                                                                                                                                                                                    |\n| **`originalPurchaseDateMillis`**   | \u003ccode\u003enumber\u003c/code\u003e                                                 | The first date this entitlement was purchased in milliseconds.                                                                                                                                                                                      |\n| **`expirationDate`**               | \u003ccode\u003estring \\| null\u003c/code\u003e                                         | The expiration date for the entitlement in ISO8601, can be `null` for lifetime access. If the `periodType` is `trial`, this is the trial expiration date.                                                                                           |\n| **`expirationDateMillis`**         | \u003ccode\u003enumber \\| null\u003c/code\u003e                                         | The expiration date for the entitlement in milliseconds, can be `null` for lifetime access. If the `periodType` is `trial`, this is the trial expiration date.                                                                                      |\n| **`store`**                        | \u003ccode\u003e\u003ca href=\"#store\"\u003eStore\u003c/a\u003e\u003c/code\u003e                             | The store where this entitlement was unlocked from.                                                                                                                                                                                                 |\n| **`productIdentifier`**            | \u003ccode\u003estring\u003c/code\u003e                                                 | The product identifier that unlocked this entitlement                                                                                                                                                                                               |\n| **`productPlanIdentifier`**        | \u003ccode\u003estring \\| null\u003c/code\u003e                                         | The product plan identifier that unlocked this entitlement. Android subscriptions only, null on consumables and iOS.                                                                                                                                |\n| **`isSandbox`**                    | \u003ccode\u003eboolean\u003c/code\u003e                                                | False if this entitlement is unlocked via a production purchase                                                                                                                                                                                     |\n| **`unsubscribeDetectedAt`**        | \u003ccode\u003estring \\| null\u003c/code\u003e                                         | The date an unsubscribe was detected in ISO8601 format. Can be `null`. Entitlement may still be active even if user has unsubscribed. Check the `isActive` property.                                                                                |\n| **`unsubscribeDetectedAtMillis`**  | \u003ccode\u003enumber \\| null\u003c/code\u003e                                         | The date an unsubscribe was detected in milliseconds. Can be `null`. Entitlement may still be active even if user has unsubscribed. Check the `isActive` property.                                                                                  |\n| **`billingIssueDetectedAt`**       | \u003ccode\u003estring \\| null\u003c/code\u003e                                         | The date a billing issue was detected in ISO8601 format. Can be `null` if there is no billing issue or an issue has been resolved Entitlement may still be active even if there is a billing issue. Check the `isActive` property.                  |\n| **`billingIssueDetectedAtMillis`** | \u003ccode\u003enumber \\| null\u003c/code\u003e                                         | The date a billing issue was detected in milliseconds. Can be `null` if there is no billing issue or an issue has been resolved Entitlement may still be active even if there is a billing issue. Check the `isActive` property.                    |\n| **`ownershipType`**                | \u003ccode\u003e\u003ca href=\"#ownershiptype\"\u003eOwnershipType\u003c/a\u003e\u003c/code\u003e             | Supported ownership types for an entitlement. PURCHASED if the purchase was made directly by this user. FAMILY_SHARED if the purchase has been shared to this user by a family member. UNKNOWN if the purchase has no or an unknown ownership type. |\n| **`verification`**                 | \u003ccode\u003e\u003ca href=\"#verification_result\"\u003eVERIFICATION_RESULT\u003c/a\u003e\u003c/code\u003e | If entitlement verification was enabled, the result of that verification. If not, VerificationResult.NOT_REQUESTED                                                                                                                                  |\n\n\n#### PurchasesStoreTransaction\n\nRepresents a non-subscription transaction in the \u003ca href=\"#store\"\u003eStore\u003c/a\u003e.\n\n| Prop                        | Type                | Description                                          |\n| --------------------------- | ------------------- | ---------------------------------------------------- |\n| **`transactionIdentifier`** | \u003ccode\u003estring\u003c/code\u003e | Id of the transaction.                               |\n| **`productIdentifier`**     | \u003ccode\u003estring\u003c/code\u003e | Product Id associated with the transaction.          |\n| **`purchaseDate`**          | \u003ccode\u003estring\u003c/code\u003e | Purchase date of the transaction in ISO 8601 format. |\n\n\n#### PurchasesSubscriptionInfo\n\nSubscription purchases of the Customer.\n\n| Prop                          | Type                                                    | Description                                                                                                                                                                                                                                                                                                       |\n| ----------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`productIdentifier`**       | \u003ccode\u003estring\u003c/code\u003e                                     | The product identifier.                                                                                                                                                                                                                                                                                           |\n| **`purchaseDate`**            | \u003ccode\u003estring\u003c/code\u003e                                     | Date when the last subscription period started.                                                                                                                                                                                                                                                                   |\n| **`originalPurchaseDate`**    | \u003ccode\u003estring \\| null\u003c/code\u003e                             | Date when this subscription first started. This property does not update with renewals. This property also does not update for product changes within a subscription group or re-subscriptions by lapsed subscribers.                                                                                             |\n| **`expiresDate`**             | \u003ccode\u003estring \\| null\u003c/code\u003e                             | Date when the subscription expires/expired                                                                                                                                                                                                                                                                        |\n| **`store`**                   | \u003ccode\u003e\u003ca href=\"#store\"\u003eStore\u003c/a\u003e\u003c/code\u003e                 | \u003ca href=\"#store\"\u003eStore\u003c/a\u003e where the subscription was purchased.                                                                                                                                                                                                                                                  |\n| **`unsubscribeDetectedAt`**   | \u003ccode\u003estring \\| null\u003c/code\u003e                             | Date when RevenueCat detected that auto-renewal was turned off for this subscription. Note the subscription may still be active, check the `expiresDate` attribute.                                                                                                                                               |\n| **`isSandbox`**               | \u003ccode\u003eboolean\u003c/code\u003e                                    | Whether or not the purchase was made in sandbox mode.                                                                                                                                                                                                                                                             |\n| **`billingIssuesDetectedAt`** | \u003ccode\u003estring \\| null\u003c/code\u003e                             | Date when RevenueCat detected any billing issues with this subscription. If and when the billing issue gets resolved, this field is set to nil.                                                                                                                                                                   |\n| **`gracePeriodExpiresDate`**  | \u003ccode\u003estring \\| null\u003c/code\u003e                             | Date when any grace period for this subscription expires/expired. nil if the customer has never been in a grace period.                                                                                                                                                                                           |\n| **`ownershipType`**           | \u003ccode\u003e\u003ca href=\"#ownershiptype\"\u003eOwnershipType\u003c/a\u003e\u003c/code\u003e | How the Customer received access to this subscription: - [OwnershipType.PURCHASED]: The customer bought the subscription. - [OwnershipType.FAMILY_SHARED]: The Customer has access to the product via their family.                                                                                               |\n| **`periodType`**              | \u003ccode\u003e\u003ca href=\"#periodtype\"\u003ePeriodType\u003c/a\u003e\u003c/code\u003e       | Type of the current subscription period: - [PeriodType.NORMAL]: The product is in a normal period (default) - [PeriodType.TRIAL]: The product is in a free trial period - [PeriodType.INTRO]: The product is in an introductory pricing period - [PeriodType.PREPAID]: The product is in a prepaid pricing period |\n| **`refundedAt`**              | \u003ccode\u003estring \\| null\u003c/code\u003e                             | Date when RevenueCat detected a refund of this subscription.                                                                                                                                                                                                                                                      |\n| **`storeTransactionId`**      | \u003ccode\u003estring \\| null\u003c/code\u003e                             | The transaction id in the store of the subscription.                                                                                                                                                                                                                                                              |\n| **`isActive`**                | \u003ccode\u003eboolean\u003c/code\u003e                                    | Whether the subscription is currently active.                                                                                                                                                                                                                                                                     |\n| **`willRenew`**               | \u003ccode\u003eboolean\u003c/code\u003e                                    | Whether the subscription will renew at the next billing period.                                                                                                                                                                                                                                                   |\n\n\n#### PurchasesError\n\nType encapsulating an error in an SDK operation.\n\n| Prop                         | Type                                                                  |\n| ---------------------------- | --------------------------------------------------------------------- |\n| **`code`**                   | \u003ccode\u003e\u003ca href=\"#purchases_error_code\"\u003ePURCHASES_ERROR_CODE\u003c/a\u003e\u003c/code\u003e |\n| **`message`**                | \u003ccode\u003estring\u003c/code\u003e                                                   |\n| **`readableErrorCode`**      | \u003ccode\u003estring\u003c/code\u003e                                                   |\n| **`userInfo`**               | \u003ccode\u003e\u003ca href=\"#errorinfo\"\u003eErrorInfo\u003c/a\u003e\u003c/code\u003e                       |\n| **`underlyingErrorMessage`** | \u003ccode\u003estring\u003c/code\u003e                                                   |\n| **`userCancelled`**          | \u003ccode\u003eboolean \\| null\u003c/code\u003e                                          |\n\n\n#### ErrorInfo\n\nType encapsulating extra info on an error in an SDK operation.\n\n| Prop                    | Type                |\n| ----------------------- | ------------------- |\n| **`readableErrorCode`** | \u003ccode\u003estring\u003c/code\u003e |\n\n\n#### PurchasesOfferings\n\nContains all the offerings configured in RevenueCat dashboard.\nFor more info see https://docs.revenuecat.com/docs/entitlements\n\n| Prop          | Type                                                                                | Description                                                                 |\n| ------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |\n| **`all`**     | \u003ccode\u003e{ [key: string]: \u003ca href=\"#purchasesoffering\"\u003ePurchasesOffering\u003c/a\u003e; }\u003c/code\u003e | Map of all Offerings [PurchasesOffering] objects keyed by their identifier. |\n| **`current`** | \u003ccode\u003e\u003ca href=\"#purchasesoffering\"\u003ePurchasesOffering\u003c/a\u003e \\| null\u003c/code\u003e             | Current offering configured in the RevenueCat dashboard.                    |\n\n\n#### PurchasesOffering\n\nAn offering is a collection of Packages (\u003ca href=\"#purchasespackage\"\u003e`PurchasesPackage`\u003c/a\u003e) available for the user to purchase.\nFor more info see https://docs.revenuecat.com/docs/entitlements\n\n| Prop                    | Type                                                                  | Description                                                                                                                                                                                                                                                                                                |\n| ----------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`identifier`**        | \u003ccode\u003estring\u003c/code\u003e                                                   | Unique identifier defined in RevenueCat dashboard.                                                                                                                                                                                                                                                         |\n| **`serverDescription`** | \u003ccode\u003estring\u003c/code\u003e                                                   | Offering description defined in RevenueCat dashboard.                                                                                                                                                                                                                                                      |\n| **`metadata`**          | \u003ccode\u003e{ [key: string]: unknown; }\u003c/code\u003e                              | Offering metadata defined in RevenueCat dashboard. To access values, you need to check the type beforehand. For example: const my_unknown_value: unknown = offering.metadata['my_key']; const my_string_value: string \\| undefined = typeof(my_unknown_value) === 'string' ? my_unknown_value : undefined; |\n| **`availablePackages`** | \u003ccode\u003ePurchasesPackage[]\u003c/code\u003e                                       | Array of `Package` objects available for purchase.                                                                                                                                                                                                                                                         |\n| **`lifetime`**          | \u003ccode\u003e\u003ca href=\"#purchasespackage\"\u003ePurchasesPackage\u003c/a\u003e \\| null\u003c/code\u003e | Lifetime package type configured in the RevenueCat dashboard, if available.                                                                                                                                                                                                                                |\n| **`annual`**            | \u003ccode\u003e\u003ca href=\"#purchasespackage\"\u003ePurchasesPackage\u003c/a\u003e \\| null\u003c/code\u003e | Annual package type configured in the RevenueCat dashboard, if available.                                                                                                                                                                                                                                  |\n| **`sixMonth`**          | \u003ccode\u003e\u003ca href=\"#purchasespackage\"\u003ePurchasesPackage\u003c/a\u003e \\| null\u003c/code\u003e | Six month package type configured in the RevenueCat dashboard, if available.                                                                                                                                                                                                                               |\n| **`threeMonth`**        | \u003ccode\u003e\u003ca href=\"#purchasespackage\"\u003ePurchasesPackage\u003c/a\u003e \\| null\u003c/code\u003e | Three month package type configured in the RevenueCat dashboard, if available.                                                                                                                                                                                                                             |\n| **`twoMonth`**          | \u003ccode\u003e\u003ca href=\"#purchasespackage\"\u003ePurchasesPackage\u003c/a\u003e \\| null\u003c/code\u003e | Two month package type configured in the RevenueCat dashboard, if available.                                                                                                                                                                                                                               |\n| **`monthly`**           | \u003ccode\u003e\u003ca href=\"#purchasespackage\"\u003ePurchasesPackage\u003c/a\u003e \\| null\u003c/code\u003e | Monthly package type configured in the RevenueCat dashboard, if available.                                                                                                                                                                                                                                 |\n| **`weekly`**            | \u003ccode\u003e\u003ca href=\"#purchasespackage\"\u003ePurchasesPackage\u003c/a\u003e \\| null\u003c/code\u003e | Weekly package type configured in the RevenueCat dashboard, if available.                                                                                                                                                                                                                                  |\n\n\n#### PurchasesPackage\n\nContains information about the product available for the user to purchase.\nFor more info see https://docs.revenuecat.com/docs/entitlements\n\n| Prop                           | Type                                                                          | Description                                                                                                              |\n| ------------------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n| **`identifier`**               | \u003ccode\u003estring\u003c/code\u003e                                                           | Unique identifier for this package. Can be one a predefined package type or a custom one.                                |\n| **`packageType`**              | \u003ccode\u003e\u003ca href=\"#package_type\"\u003ePACKAGE_TYPE\u003c/a\u003e\u003c/code\u003e                         | Package type for the product. Will be one of [PACKAGE_TYPE].                                                             |\n| **`product`**                  | \u003ccode\u003e\u003ca href=\"#purchasesstoreproduct\"\u003ePurchasesStoreProduct\u003c/a\u003e\u003c/code\u003e       | Product assigned to this package.                                                                                        |\n| **`offeringIdentifier`**       | \u003ccode\u003estring\u003c/code\u003e                                                           | Offering this package belongs to.                                                                                        |\n| **`presentedOfferingContext`** | \u003ccode\u003e\u003ca href=\"#presentedofferingcontext\"\u003ePresentedOfferingContext\u003c/a\u003e\u003c/code\u003e | Offering context this package belongs to. Null if not using offerings or if fetched directly from store via getProducts. |\n\n\n#### PurchasesStoreProduct\n\nType representing a product from the \u003ca href=\"#store\"\u003eStore\u003c/a\u003e.\n\n| Prop                              | Type                                                                                  | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| --------------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`identifier`**                  | \u003ccode\u003estring\u003c/code\u003e                                                                   | Product Id.                                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| **`description`**                 | \u003ccode\u003estring\u003c/code\u003e                                                                   | Description of the product.                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| **`title`**                       | \u003ccode\u003estring\u003c/code\u003e                                                                   | Title of the product.                                                                                                                                                                                                                                                                                                                                                                                                                                            |\n| **`price`**                       | \u003ccode\u003enumber\u003c/code\u003e                                                                   | \u003ca href=\"#price\"\u003ePrice\u003c/a\u003e of the product in the local currency. Contains the price value of defaultOption for Google Play.                                                                                                                                                                                                                                                                                                                                      |\n| **`priceString`**                 | \u003ccode\u003estring\u003c/code\u003e                                                                   | Formatted price of the item, including its currency sign. Contains the formatted price value of defaultOption for Google Play.                                                                                                                                                                                                                      ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRevenueCat%2Fpurchases-capacitor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRevenueCat%2Fpurchases-capacitor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRevenueCat%2Fpurchases-capacitor/lists"}