revenuecat-customer-center — Claude Code skill: in-app subscription
Adds RevenueCat's ready-made Customer Center screen so subscribers can cancel, request refunds and restore purchases without custom UI.
npx skills add RevenueCat/ai-toolkit --skill revenuecat-customer-center -a claude-codeWhat revenuecat-customer-center does
The skill walks the agent through the job: detect the platform, read the matching platform file, then apply its install command, snippet and callback shape. It covers iOS, Android, Kotlin Multiplatform, Flutter and React Native. The Customer Center lives in react-native-purchases-ui for React Native, purchases_ui_flutter for Flutter, purchases-kmp-ui for KMP, com.revenuecat.purchases:purchases-ui for native Android and RevenueCatUI for iOS.
One thing to settle first: integrate-revenuecat must have run and Purchases.configure(…) must succeed, otherwise the Customer Center has no customer data to load. An anonymous user with no purchases sees an empty restore-only state, so apps with login should call Purchases.logIn(userId) before opening the screen.
The UI itself is configured in the RevenueCat dashboard — actions, copy, promotional offers, cancel survey options and support details all live there. Skip that and you get a minimal default layout that shows users almost nothing. Refund requests are iOS only, since Apple is the one exposing in-app refunds; on Android the manage-subscription option links out to the Google Play subscriptions screen. If the installed SDK predates Customer Center support, the skill falls back to a manual screen: active entitlements from Purchases.customerInfo(), a Purchases.restorePurchases() button and a link to the store's subscription management.
What it helps with
- show subscribers their active subscriptions inside the app
- let users cancel without emailing support
- take a refund request on iOS
- restore purchases after a reinstall
- send Android users to the Google Play subscriptions screen
Example prompts for the agent
- add the Customer Center to our iOS app
- build a self-service subscriptions screen in our Flutter project
- wire the manage subscription button in settings to the RevenueCat Customer Center
How to install revenuecat-customer-center
1Skills CLI (Vercel)
npx skills add RevenueCat/ai-toolkit --skill revenuecat-customer-center -a claude-code2Manually: put the files in place
~/.claude/skills/revenuecat-customer-center/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/revenuecat-customer-center/
1Skills CLI (Vercel)
npx skills add RevenueCat/ai-toolkit --skill revenuecat-customer-center -a codex2Manually: put the files in place
.agents/skills/revenuecat-customer-center/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add RevenueCat/ai-toolkit --skill revenuecat-customer-center -a cursor2Manually: put the files in place
.cursor/skills/revenuecat-customer-center/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install RevenueCat/ai-toolkit revenuecat-customer-center2Manually: put the files in place
.github/skills/revenuecat-customer-center/SKILL.md1Skills CLI (Vercel)
npx skills add RevenueCat/ai-toolkit --skill revenuecat-customer-center -a gemini-cli2Platform CLI
gemini skills install https://github.com/RevenueCat/ai-toolkit --path revenuecat/skills/revenuecat-customer-centerManually: put the files in place
.devin/skills/revenuecat-customer-center/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add RevenueCat/ai-toolkit --skill revenuecat-customer-center -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about revenuecat-customer-center
How do I install revenuecat-customer-center in Claude?
Run npx skills add RevenueCat/ai-toolkit --skill revenuecat-customer-center -a claude-code. The skill file then sits at ~/.claude/skills/revenuecat-customer-center/SKILL.md.
What does revenuecat-customer-center do?
It guides the agent through adding the Customer Center: platform detection, the right package, presenting the screen and checking the lifecycle callbacks.
What has to be in place before the Customer Center works?
The integrate-revenuecat skill must have run and Purchases.configure(…) must succeed. You also need a user with purchases — an anonymous one with none gets an empty screen.
Source text
SKILL.md · MIT
---
name: revenuecat-customer-center
description: "Add the RevenueCat Customer Center (self service subscription management UI) to an app. Use when the user asks to add a customer center, build a self service subscriptions screen, let users manage subscriptions in app, add a subscription management screen, present CustomerCenterView, call presentCustomerCenter, or wire a 'manage subscription' button to the RevenueCat customer center on iOS, Android, Kotlin Multiplatform, Flutter, or React Native."
---
# revenuecat-customer-center: add the RevenueCat Customer Center
Use this skill when the user wants an out of the box UI that lets their customers manage active subscriptions, request refunds, cancel, restore, or contact support, without shipping custom UI. The UI is configured in the RevenueCat dashboard and rendered by the `RevenueCatUI` SDKs.
Prerequisite: `integrate-revenuecat` has already run. `Purchases.configure(…)` must succeed before the Customer Center can load customer data.
## 1. Detect the platform
Inspect the working directory and pick the **first** match, from top to bottom:
1. **React Native**: `package.json` has a `react-native-purchases` entry, or `react-native` as a dependency. The Customer Center ships in `react-native-purchases-ui`. Read `platforms/react-native.md`. If `expo` is also a dependency, note it as an Expo project.
2. **Flutter**: `pubspec.yaml` exists at the project root. The Customer Center ships in `purchases_ui_flutter`. Read `platforms/flutter.md`.
3. **Kotlin Multiplatform**: `build.gradle.kts` has a `kotlin { … }` multiplatform block, or depends on `com.revenuecat.purchases:purchases-kmp*`. The Customer Center composable is in `purchases-kmp-ui`. Read `platforms/kmp.md`.
4. **Android (native)**: `build.gradle(.kts)` applies `com.android.application` (and is not KMP). The Customer Center composable is in `com.revenuecat.purchases:purchases-ui`. Read `platforms/android.md`.
5. **iOS (native)**: `Package.swift`, `*.xcodeproj`, `*.xcworkspace`, or `Podfile` at the project root. `CustomerCenterView` is in `RevenueCatUI`. Read `platforms/ios.md`.
If several match (e.g. an `ios/` folder inside a Flutter project), pick the **outermost** project, the one that owns the build. If still ambiguous, ask the user which platform they want to configure.
## 2. Shared concepts (all platforms)
- **Customer Center is a dashboard configured UI.** Actions, copy, promotional offers, refund flows, cancel survey options, and support contact details are defined in the RevenueCat dashboard under **Customer Center**. Without configuration, the view renders a minimal default layout; users will see almost nothing useful.
- **It needs an identified user with purchases** to surface anything meaningful. If the user is anonymous and has never bought anything, the Customer Center renders an empty / restore only state. If the app supports login, call `Purchases.logIn(userId)` before opening the Customer Center.
- **Customer Center is separate from paywalls.** The standard pattern: expose a "Manage subscription" row in the settings screen that opens the Customer Center. Paywalls are for new purchases; the Customer Center is for existing subscribers.
- **The UI owns the flow.** Restore, cancel, refund, and promotional offer flows run inside the component. Listen for the lifecycle callbacks (`onRestoreCompleted`, `onRefundRequestStarted`, `onManagementOptionSelected`, `onPromotionalOfferSucceeded`, etc.) to react in app code, not to drive the flow.
- **Platform availability varies.** iOS has had Customer Center longest; Android, KMP, Flutter, and React Native follow. Platform files flag any gaps. Refund requests are an iOS only action because only Apple exposes in app refund requests; on Android, the "Manage subscription" option links out to the Google Play subscriptions screen.
- **If the installed SDK version is older than Customer Center support**, the fallback is a manual subscription management screen: show the user's active entitlements from `Purchases.customerInfo()`, expose a `Purchases.restorePurchases()` button, and link to the store's subscription management URL. Point the user to upgrade the SDK if they want the full Customer Center.
## 3. Implementation
Read the platform file that matches detection:
- `platforms/ios.md`
- `platforms/android.md`
- `platforms/kmp.md`
- `platforms/flutter.md`
- `platforms/react-native.md`
Each platform file is self contained: install command, exact snippet to present the Customer Center, and the callback shape.
## 4. Verify
Do not claim the integration is complete until:
1. The project **builds** on the target platform.
2. Sign into the app with a test user that has **at least one active sandbox subscription**. Trigger the code path that opens the Customer Center. The UI loads and the subscription appears in the list.
3. At least one configured action runs end to end. The simplest check: tap **Restore purchases** and confirm the restore completed callback fires with a non-empty `customerInfo.entitlements.active` map. If the dashboard has Cancel / Refund / Support actions configured, verify the corresponding callback (`onManagementOptionSelected`, `onRefundRequestStarted`, etc.) fires when the user taps through.
4. Dismissing the Customer Center fires the `onDismiss` callback.
If the Customer Center opens but is empty, the signed in user has no purchases, or the dashboard Customer Center section is not configured. Fix in the dashboard, reload, and retry.
© RevenueCat · MIT · RevenueCat/ai-toolkit