Learn-skills.dev adapty-cli
Use when setting up or managing Adapty in-app subscriptions, paywalls, or placements via CLI.
git clone https://github.com/NeverSight/learn-skills.dev
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/adaptyteam/adapty-cli/adapty-cli" ~/.claude/skills/neversight-learn-skills-dev-adapty-cli && rm -rf "$T"
data/skills-md/adaptyteam/adapty-cli/adapty-cli/SKILL.mdAdapty CLI Skill
Installation
npm install -g adapty
Or run without installing:
npx adapty@latest
Two modes: Setup (new users, quiz-driven) and Manage (existing users, direct commands).
Mode: Setup (New to Adapty)
The setup flow has 3 phases: Quiz → Create → Guide. Collect ALL information first, then create everything, then tell the user what to do next.
Phase 1: Quiz
Before creating anything, detect the platform and then run an interactive quiz to collect all data.
CRITICAL: You MUST use the AskUserQuestion tool for EVERY quiz question. Do NOT print questions as regular text output. Each question must be a separate AskUserQuestion tool call so the user gets an interactive input prompt. After each answer, proceed to the next AskUserQuestion. This is non-negotiable.
Step 1: Detect platform — silently glob the codebase:
| Platform | Glob pattern |
|---|---|
| iOS/Swift | , , |
| Android/Kotlin | , |
| Flutter | (look for key) |
| React Native | , with RN deps |
| Unity | |
| Capacitor | , |
| KMP | with |
Step 2: Ask questions — use AskUserQuestion tool calls. Bundle related sub-questions into a single AskUserQuestion to minimize round-trips (e.g. app name + platforms + bundle ID = one question). Suggest defaults so the user can just confirm or pick a number. Aim for 2-3 total AskUserQuestion calls, not one per field.
Bundle into 2-3 AskUserQuestion calls:
AskUserQuestion 1: App + Products — bundle app info and product selection:
App name: [suggest from package.json, Info.plist, or AndroidManifest] Bundle ID: [suggest from detected config files] Platforms: 1. iOS only / 2. Android only / 3. Both
Products: 1. Monthly (
) / 2. Annual (monthly) / 3. Monthly + Annual / 4. Weekly (annual) / 5. Lifetime (weekly) / 6. CustomlifetimeValid
values:--period,weekly,monthly,two_months,trimonthly,semiannual,annual. Do NOT uselifetime,month,year, or any other aliases — use these exact API values. Product name prefix: [suggest based on app name, e.g. "Premium"]yearly
After this answer, you have enough to generate store product IDs. Pre-fill them using the convention
<bundle_id>.<prefix>.<period> and include in the next question.
AskUserQuestion 2: Store IDs + Placements + Paywall approach — confirm generated IDs and collect remaining info:
Store product IDs — these MUST match the IDs you create (or will create) in App Store Connect / Google Play Console. Confirm or edit the suggested IDs:
- iOS:
/com.example.app.premium.monthlycom.example.app.premium.annual- Android product ID:
/ base plan:premium_monthly(if Android)monthly-baseIf your iOS and Android IDs differ, enter them separately (e.g. "iOS: com.app.monthly, Android: monthly_sub / base plan: monthly-bp"). If you haven't created store products yet, these suggestions work — just use the same IDs when you set them up in App Store Connect / Google Play Console later.
Placements: 1. Onboarding (
) / 2. Settings (onboarding) / 3. Feature gate (settings) / 4. All of the above / 5. Customfeature_gatePaywall UI: 1. Paywall Builder (visual editor, no UI code) / 2. Custom (your own UI)
Phase 2: Create
After collecting all answers, confirm the plan with the user in a summary table, then create everything sequentially. Do NOT ask questions during creation — use collected data.
IMPORTANT: Products and paywalls cannot be fully edited after creation (period, store product IDs, base plan IDs are permanent). This is why Phase 1 confirmation is critical.
Execution order (each step uses output from previous):
(if not already authenticated, check withadapty auth login
)adapty auth whoami
→ save output:adapty apps create --title "..." --platform ... --apple-bundle-id/--google-bundle-id ...
(use asid
),--app
(use in SDK), plus the default access levelsdk_key
andid
printed after creationsdk_id- For each product:
→ save product IDs. Android subscriptions (non-lifetime) requireadapty products create --app <APP_ID> --title "..." --period ... --access-level-id <DEFAULT_AL_ID> --ios-product-id/--android-product-id ... [--android-base-plan-id ...]
.--android-base-plan-id
→ save paywall IDadapty paywalls create --app <APP_ID> --title "..." --product-id <ID1> --product-id <ID2> ...- For each placement:
adapty placements create --app <APP_ID> --title "..." --developer-id ... --paywall-id <PAYWALL_ID>
Print progress as you go (e.g. "Created app ✓", "Created product 'Monthly' ✓"). If a step fails, stop and ask the user how to proceed — don't retry blindly.
Phase 3: Guide (Interactive Loop)
After all entities are created, print a brief summary with key values:
Dashboard: https://app.adapty.io Your SDK key: <sdk_key from apps create> Placement developer IDs: <list of developer_ids> Access level SDK ID: <sdk_id from access level, e.g. "premium">
Then use AskUserQuestion to ask what they want to do next. Repeat this after each sub-guide until the user says they're done. Build the options dynamically based on their setup answers:
What do you want to do next?
- Integrate SDK into the codebase
- Configure app/products on Apple side (only if iOS)
- Configure app/products on Google side (only if Android)
- Design paywall in Paywall Builder (only if they chose Paywall Builder)
- I'm done for now
Option 1: SDK Integration — print the quickstart link for their platform + paywall approach, plus the key values above. Use Context7 MCP for latest SDK code examples:
resolve-library-id: "adaptyteam/adapty-docs" query-docs: topic="<platform> <feature>"
Paywall Builder quickstarts:
- iOS:
https://adapty.io/docs/ios-quickstart-paywalls.md - Android:
https://adapty.io/docs/android-quickstart-paywalls.md - Flutter:
https://adapty.io/docs/flutter-quickstart-paywalls.md - React Native:
https://adapty.io/docs/react-native-quickstart-paywalls.md
Custom paywall quickstarts:
- iOS:
https://adapty.io/docs/ios-quickstart-manual.md - Android:
https://adapty.io/docs/android-quickstart-manual.md - Flutter:
https://adapty.io/docs/flutter-quickstart-manual.md - React Native:
https://adapty.io/docs/react-native-quickstart-manual.md
Option 2: Apple side — print checklist:
- Create subscription products in App Store Connect with IDs:
<list ios_product_ids> - Adapty Dashboard → App Store Connect: upload In-App Purchase Key (.p8), enter Key ID, Issuer ID, Bundle ID, App Apple ID →
https://adapty.io/docs/app-store-connection-configuration.md - App Store Connect → Server Notifications V2: set URL from Adapty Dashboard →
https://adapty.io/docs/enable-app-store-server-notifications.md
Option 3: Google side — print checklist:
- Create subscription products in Google Play Console with IDs:
, base plans:<list android_product_ids><list base_plan_ids> - Adapty Dashboard → Google Play: upload service account JSON key, enter Package Name →
https://adapty.io/docs/google-play-store-connection-configuration.md - Google Play Console → RTDN: configure Pub/Sub topic from Adapty Dashboard →
https://adapty.io/docs/enable-real-time-developer-notifications-rtdn.md
Option 4: Paywall Builder — link to dashboard paywalls section and guide:
https://adapty.io/docs/adapty-paywall-builder.md
After showing any option's guide, loop back — ask "What's next?" again with the same AskUserQuestion (minus completed items if user indicates they're done with a step). Stop only when user picks "I'm done."
Mode: Manage (Existing Adapty Users)
For users who already have an Adapty app and want to manage entities, see
references/cli-commands.md for the full command reference.
Key notes:
- All resource commands (except
) requireapps
(UUID)--app <APP_ID>
andapps get <app_id>
use a positional arg (noapps update <app_id>
flag)--app- All other
/get
commands use a positional arg for the resource ID plusupdate
flag--app - All
commands supportlist
and--page--page-size - All commands support
--json - Use
(not--title
) for all entities--name - Use
/--apple-bundle-id
(not ios/android)--google-bundle-id
Adapty Concepts
- Product — subscription or one-time purchase mapped to store product IDs. Has a period, grants an access level.
- Paywall — screen showing products. Can use Paywall Builder (visual editor) or remote config (custom JSON).
- Placement — location in app where paywall appears. Identified by
. Links to one paywall per audience.developer_id - Access Level — permission gate (e.g. "premium"). Products grant access levels on purchase. Identified by
.sdk_id - Audience — user segment. Different audiences at same placement can see different paywalls.
Documentation
- Full docs index:
https://adapty.io/docs/llms.txt - Individual pages:
https://adapty.io/docs/<slug>.md - SDK code examples: Context7 MCP with
adaptyteam/adapty-docs