Rc Revenuecat Api Quick Reference

RevenueCat/ai-toolkit/revenuecat-play-billing/skills/rc-revenuecat-api-quick-reference

by RevenueCatccfc038185ec457b2ac9077f3bbf1ba947a44dbbApache-2.0; see LICENSEListed Oct 9, 2026Updated Oct 9, 2026

Use this skill as a quick reference for the RevenueCat Android SDK 10.x and REST API. Covers SDK init, common Purchases calls, CustomerInfo / Offerings access patterns, and the most used REST endpoints.

Instructions onlySoftware Development
AI-generated overview

Quick-reference tables for the RevenueCat Android SDK 10.x and REST API surface, covering initialization, purchases, entitlements and errors.

What it does
Provides lookup tables and short snippets for the RevenueCat Android SDK 10.x, including Purchases.configure options, coroutine calls such as awaitPurchase, awaitOfferings and awaitCustomerInfo, and the structure of Offerings, Packages, StoreProducts and EntitlementInfo. It also lists purchase error codes, listener registration and typical entitlement-gating snippets. It routes readers between client-side SDK and server-side REST usage and points to related skills for deeper guidance.
When to use it
Use it when you need a fast lookup of a RevenueCat API signature, field or error code while writing Android app code or server logic. It is meant as an index rather than a tutorial, so step-by-step purchase flow, SDK configuration, error handling or subscription-state guidance should come from the feature-specific skills it references.
Requirements
No scripts or runtime dependencies; it is an instructions-only reference document. It assumes familiarity with Kotlin and the RevenueCat Android SDK, and links to external RevenueCat documentation for REST endpoint details.

RevenueCat API Quick Reference

Phase 0: Intent

Use this skill when you need a fast lookup of a RevenueCat API surface while writing Android code or server logic. Typical questions you answer from here:

  • Which builder option controls a given Purchases.configure behavior?
  • What is the return type and signature of awaitPurchase, awaitOfferings, awaitCustomerInfo, awaitRestore, awaitLogIn, awaitLogOut?
  • How do I read offering, package, product, entitlement fields?
  • Which PurchasesErrorCode should I branch on?
  • Which listener callback do I register for customer info updates?

Do not use this skill as a deep tutorial. Reach for the feature-specific skills (purchase flow, configuring the SDK, error handling, subscription states) when you need step-by-step guidance or design rationale.

Phase 1: Locate

Decide SDK surface vs REST surface before you search the tables.

Route to the SDK (client side, Android app code):

  • Code runs inside the Android app, in an Activity, ViewModel, or background worker bundled with your app.
  • You need to launch a purchase, restore purchases, read cached CustomerInfo, fetch Offerings, identify or log out a user, or listen for updates.
  • You want entitlement gating in the UI.

Route to the REST API (server side):

  • Code runs on your backend, in a webhook handler, in an admin tool, or in a scheduled job.
  • You need to grant or revoke a promotional entitlement, override a subscription, look up a subscriber from another service, refund, or deliver events to another system.
  • You are integrating with a system that cannot embed the SDK.

The tables in this skill cover the Android SDK 10.x surface from appendix A verbatim. For REST endpoint paths, authentication, and payloads, see the full appendix on revenuecat.com together with the backend and webhooks skills, and treat this file as the SDK index.

Phase 2: Reference Tables

SDK Initialization

kotlin
// Minimum setupPurchases.configure(    PurchasesConfiguration.Builder(context, "api_key").build())
// Full optionsPurchases.configure(    PurchasesConfiguration.Builder(context, "api_key")        .appUserID("user_id")                    // null for anonymous        .showInAppMessagesAutomatically(true)    // default: true        .purchasesAreCompletedBy(PurchasesAreCompletedBy.REVENUECAT) // default        .entitlementVerificationMode(EntitlementVerificationMode.INFORMATIONAL)        .diagnosticsEnabled(false)               // default: false        .pendingTransactionsForPrepaidPlansEnabled(false) // default: false        .build())
Purchases.logLevel = LogLevel.DEBUG // before configure()

Core Operations (Coroutine)

kotlin
// Fetch offeringsval offerings: Offerings = Purchases.sharedInstance.awaitOfferings()
// Fetch specific productsval products: List<StoreProduct> = Purchases.sharedInstance.awaitGetProducts(    listOf("product_id"),    type = ProductType.INAPP // or SUBS, or null for all)
kotlin
// Purchaseval result: PurchaseResult = Purchases.sharedInstance.awaitPurchase(    PurchaseParams.Builder(activity, packageOrStoreProductOrSubscriptionOption).build())
// Purchase upgrade/downgradeval result = Purchases.sharedInstance.awaitPurchase(    PurchaseParams.Builder(activity, newPackage)        .oldProductId("old_product_id")        .googleReplacementMode(GoogleReplacementMode.WITH_TIME_PRORATION)        .build())
kotlin
// Get customer infoval customerInfo: CustomerInfo = Purchases.sharedInstance.awaitCustomerInfo()val fresh: CustomerInfo = Purchases.sharedInstance.awaitCustomerInfo(    fetchPolicy = CacheFetchPolicy.FETCH_CURRENT)
// Restoreval customerInfo: CustomerInfo = Purchases.sharedInstance.awaitRestore()
// Log in / log outval loginResult: LogInResult = Purchases.sharedInstance.awaitLogIn("user_id")// loginResult.customerInfo, loginResult.created (Boolean)val customerInfo: CustomerInfo = Purchases.sharedInstance.awaitLogOut()

Offerings Structure

kotlin
val offerings: Offeringsofferings.current          // current Offeringofferings.all              // Map<String, Offering>offerings["my_offering"]   // by identifierofferings.getCurrentOfferingForPlacement("placement_id") // targeting
kotlin
val offering: Offeringoffering.identifieroffering.monthly           // Package? (shortcut)offering.annual            // Package?offering.weekly            // Package?offering.availablePackages // List<Package>offering.metadata          // Map<String, Any>
kotlin
val pkg: Packagepkg.identifier             // "$rc_monthly", "$rc_annual", custompkg.packageType            // PackageType enumpkg.product                // StoreProductpkg.webCheckoutURL         // URL? (RevenueCat web billing)
kotlin
val product: StoreProductproduct.productIdproduct.titleproduct.descriptionproduct.price.formatted    // "$4.99"product.price.amountMicrosproduct.price.currencyCodeproduct.period             // Period? (null for INAPP); use period.iso8601 for "P1M", "P1Y", etc.product.subscriptionOptions // List<SubscriptionOption>? (null for INAPP)product.defaultOption       // SubscriptionOption? best available offer

Entitlements

kotlin
val customerInfo: CustomerInfocustomerInfo.entitlements.active         // Map<String, EntitlementInfo> (active only)customerInfo.entitlements.all            // Map<String, EntitlementInfo> (all)customerInfo.entitlements["pro_access"]  // EntitlementInfo?customerInfo.activeSubscriptions         // Set<String> of "productId:basePlanId"customerInfo.nonSubscriptionTransactions // List<Transaction>customerInfo.managementURL               // Uri? to Play Store management
kotlin
val entitlement: EntitlementInfoentitlement.isActive                     // Boolean, the main access gateentitlement.willRenew                    // false if canceledentitlement.expirationDate               // Date? (null for lifetime)entitlement.periodType                   // NORMAL, TRIAL, INTRO, PREPAIDentitlement.billingIssueDetectedAt       // Date? (non-null = grace/hold)entitlement.unsubscribeDetectedAt        // Date? (non-null = canceled)entitlement.store                        // PLAY_STORE, APP_STORE, etc.entitlement.productIdentifier            // subscription product IDentitlement.productPlanIdentifier        // base plan ID (Google only)entitlement.verification                 // VerificationResult

Error Handling

kotlin
// Purchase errorstry {    Purchases.sharedInstance.awaitPurchase(params)} catch (e: PurchasesTransactionException) {    e.userCancelled     // Boolean    e.error.code        // PurchasesErrorCode    e.error.message     // description string}
// Other errorstry {    Purchases.sharedInstance.awaitOfferings()} catch (e: PurchasesException) {    e.error.code        // PurchasesErrorCode}
kotlin
// Key error codesPurchasesErrorCode.PurchaseCancelledErrorPurchasesErrorCode.ProductAlreadyPurchasedErrorPurchasesErrorCode.PaymentPendingErrorPurchasesErrorCode.NetworkErrorPurchasesErrorCode.StoreProblemErrorPurchasesErrorCode.IneligibleErrorPurchasesErrorCode.ConfigurationError

Listeners

kotlin
// CustomerInfo updatesPurchases.sharedInstance.updatedCustomerInfoListener =    UpdatedCustomerInfoListener { customerInfo -> }
// Show in-app messages manuallyPurchases.sharedInstance.showInAppMessagesIfNeeded(activity)

Phase 3: Typical Snippets

Gate a feature on an entitlement.

kotlin
val info = Purchases.sharedInstance.awaitCustomerInfo()val hasPro = info.entitlements["pro_access"]?.isActive == trueif (hasPro) unlockFeature() else showPaywall()

Buy the monthly package from the current offering.

kotlin
val current = Purchases.sharedInstance.awaitOfferings().current ?: returnval monthly = current.monthly ?: returnval result = Purchases.sharedInstance.awaitPurchase(    PurchaseParams.Builder(activity, monthly).build())

Handle cancel vs real failure.

kotlin
try {    Purchases.sharedInstance.awaitPurchase(params)} catch (e: PurchasesTransactionException) {    if (e.userCancelled) return    when (e.error.code) {        PurchasesErrorCode.PaymentPendingError -> showPendingUi()        PurchasesErrorCode.NetworkError -> showRetry()        else -> showGenericError(e.error.message)    }}

Force a fresh CustomerInfo fetch after a server side grant.

kotlin
val fresh = Purchases.sharedInstance.awaitCustomerInfo(    fetchPolicy = CacheFetchPolicy.FETCH_CURRENT)

Log in an identified user and detect first login.

kotlin
val login = Purchases.sharedInstance.awaitLogIn("user_123")val isNewAlias = login.createdval info = login.customerInfo

React to background entitlement changes.

kotlin
Purchases.sharedInstance.updatedCustomerInfoListener =    UpdatedCustomerInfoListener { info ->        val active = info.entitlements["pro_access"]?.isActive == true        uiState.update { it.copy(hasPro = active) }    }

References

  • Full chapter

  • Related skills in this repo: rc-configuring-the-sdk, rc-purchase-flow, rc-error-handling, rc-subscription-states, rc-backend, rc-webhooks.

Source and attribution

Source:RevenueCat/ai-toolkitinrevenuecat-play-billing/skills/rc-revenuecat-api-quick-referenceat commitccfc038

License: Apache-2.0; see LICENSE

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal