一键导入
adapty-cli
// Use when setting up or managing Adapty in-app subscriptions, paywalls, or placements via CLI.
// Use when setting up or managing Adapty in-app subscriptions, paywalls, or placements via CLI.
| name | adapty-cli |
| description | Use when setting up or managing Adapty in-app subscriptions, paywalls, or placements via CLI. |
npm install -g adapty
Or run without installing:
npx adapty@latest
Two modes: Setup (new users, quiz-driven) and Manage (existing users, direct commands).
The setup flow has 3 phases: Quiz → Create → Guide. Collect ALL information first, then create everything, then tell the user what to do next.
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 | **/*.swift, **/Package.swift, *.xcodeproj |
| Android/Kotlin | **/*.kt, **/build.gradle.kts |
| Flutter | **/pubspec.yaml (look for flutter: key) |
| React Native | **/react-native.config.js, **/app.json with RN deps |
| Unity | **/ProjectSettings/ProjectSettings.asset |
| Capacitor | **/capacitor.config.ts, **/capacitor.config.json |
| KMP | **/build.gradle.kts with kotlin("multiplatform") |
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 (
monthly) / 2. Annual (annual) / 3. Monthly + Annual / 4. Weekly (weekly) / 5. Lifetime (lifetime) / 6. CustomValid
--periodvalues:weekly,monthly,two_months,trimonthly,semiannual,annual,lifetime. Do NOT usemonth,year,yearly, or any other aliases — use these exact API values. Product name prefix: [suggest based on app name, e.g. "Premium"]
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.monthly/com.example.app.premium.annual- Android product ID:
premium_monthly/ base plan:monthly-base(if Android)If 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 (
onboarding) / 2. Settings (settings) / 3. Feature gate (feature_gate) / 4. All of the above / 5. CustomPaywall UI: 1. Paywall Builder (visual editor, no UI code) / 2. Custom (your own UI)
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):
adapty auth login (if not already authenticated, check with adapty auth whoami)adapty apps create --title "..." --platform ... --apple-bundle-id/--google-bundle-id ... → save output: id (use as --app), sdk_key (use in SDK), plus the default access level id and sdk_id printed after creationadapty products create --app <APP_ID> --title "..." --period ... --access-level-id <DEFAULT_AL_ID> --ios-product-id/--android-product-id ... [--android-base-plan-id ...] → save product IDs. Android subscriptions (non-lifetime) require --android-base-plan-id.adapty paywalls create --app <APP_ID> --title "..." --product-id <ID1> --product-id <ID2> ... → save paywall IDadapty placements create --app <APP_ID> --title "..." --developer-id ... --audiences '[{"segment_ids":[],"paywall_id":"<PAYWALL_ID>","priority":0}]'
--paywall-id <PAYWALL_ID> is still accepted as legacy shorthand but emits a stderr deprecation warning. Prefer --audiences for the canonical default-audience shape.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.
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:
https://adapty.io/docs/ios-quickstart-paywalls.mdhttps://adapty.io/docs/android-quickstart-paywalls.mdhttps://adapty.io/docs/flutter-quickstart-paywalls.mdhttps://adapty.io/docs/react-native-quickstart-paywalls.mdCustom paywall quickstarts:
https://adapty.io/docs/ios-quickstart-manual.mdhttps://adapty.io/docs/android-quickstart-manual.mdhttps://adapty.io/docs/flutter-quickstart-manual.mdhttps://adapty.io/docs/react-native-quickstart-manual.mdOption 2: Apple side — print checklist:
<list ios_product_ids>https://adapty.io/docs/app-store-connection-configuration.mdhttps://adapty.io/docs/enable-app-store-server-notifications.mdOption 3: Google side — print checklist:
<list android_product_ids>, base plans: <list base_plan_ids>https://adapty.io/docs/google-play-store-connection-configuration.mdhttps://adapty.io/docs/enable-real-time-developer-notifications-rtdn.mdOption 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."
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:
apps) require --app <APP_ID> (UUID)apps get <app_id> and apps update <app_id> use a positional arg (no --app flag)get/update commands use a positional arg for the resource ID plus --app flaglist commands support --page and --page-size--json--title (not --name) for all entities--apple-bundle-id / --google-bundle-id (not ios/android)developer_id. Holds one or more audiences; each audience routes a segment to a paywall by priority. Default audience (segment_ids: []) is the fallback and must have max priority.sdk_id.adapty segments list --app <APP_ID>. Compose into placement audiences to give different segments different paywalls at the same placement.(segments, paywall, priority) tuple inside a placement. Auto-materialized from segment composition. CLI exposes audiences as the --audiences JSON shape on placements create/update.https://adapty.io/docs/llms.txthttps://adapty.io/docs/<slug>.mdadaptyteam/adapty-docs