Full reference for the Adapty Developer CLI
Using an AI assistant? An Adapty CLI skill is available to help LLMs work with the CLI.
This article lists all Adapty CLI commands with their arguments, flags, and accepted values.
For authentication setup and token management, see Authentication.
Global flags
These flags are available on all commands.
| Flag | Description |
|---|---|
--json | Output as JSON instead of formatted text |
--help | Show command help |
All list commands also accept pagination flags:
| Flag | Default | Description |
|---|---|---|
--page | 1 | Page number |
--page-size | 20 | Items per page (max: 100) |
Apps
Manage the apps in your Adapty account. For Dashboard-based configuration, see App settings.
adapty apps list
List all apps in your Adapty account.
adapty apps list
Accepts pagination flags.
adapty apps get
Get details for a specific app.
adapty apps get <app-id>
| Argument | Description |
|---|---|
app-id | App ID (UUID) |
adapty apps create
Create a new app.
adapty apps create --title "My App" --platform ios --apple-bundle-id com.example.app
| Flag | Required | Description |
|---|---|---|
--title | Yes | App title |
--platform | Yes | Platform: ios or android. Repeat for both: --platform ios --platform android |
--apple-bundle-id | Required with --platform ios | Apple bundle ID |
--google-bundle-id | Required with --platform android | Google bundle ID |
adapty apps update
Update an existing app.
adapty apps update <app-id> --title "New Name"
| Argument | Description |
|---|---|
app-id | App ID (UUID) |
| Flag | Description |
|---|---|
--title | New app title |
--apple-bundle-id | New Apple bundle ID |
--google-bundle-id | New Google bundle ID |
At least one flag is required. --platform cannot be changed after creation.
Access levels
adapty access-levels list
List all access levels for an app.
adapty access-levels list --app <app-id>
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
Accepts pagination flags.
adapty access-levels get
Get details for a specific access level.
adapty access-levels get --app <app-id> <access-level-id>
| Argument | Description |
|---|---|
access-level-id | Access level ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
adapty access-levels create
Create a new access level.
adapty access-levels create --app <app-id> --sdk-id "pro" --title "Pro"
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
--sdk-id | Yes | Identifier used in app code to check access (for example, "pro" or "premium") |
--title | Yes | Display label for the Adapty dashboard |
adapty access-levels update
Update an existing access level.
adapty access-levels update --app <app-id> <access-level-id> --title "Pro Access"
| Argument | Description |
|---|---|
access-level-id | Access level ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
--title | Yes | New display label |
--sdk-id cannot be changed after creation.
Products
adapty products list
List all products for an app.
adapty products list --app <app-id>
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
Accepts pagination flags.
adapty products get
Get details for a specific product.
adapty products get --app <app-id> <product-id>
| Argument | Description |
|---|---|
product-id | Product ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
adapty products create
Create a new product.
The store product IDs (--ios-product-id, --android-product-id, --android-base-plan-id) cannot be changed after creation. To use different store product IDs, create a new product.
adapty products create --app <app-id> --title "Monthly" --access-level-id <access-level-id> --period monthly --ios-product-id com.example.monthly
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
--title | Yes | Product title |
--access-level-id | Yes | Access level ID (UUID) this product unlocks |
--period | Yes | Subscription period: weekly, monthly, 2_months, 3_months, 6_months, yearly, lifetime |
--ios-product-id | At least one platform required | Product ID from App Store Connect |
--android-product-id | At least one platform required | Product ID from Google Play Console |
--android-base-plan-id | Required with --android-product-id unless --period lifetime | Base plan ID from Google Play Console |
adapty products update
Update an existing product.
Store product IDs (--ios-product-id, --android-product-id) cannot be changed after creation and are not available in this command. To use different store product IDs, create a new product.
adapty products update --app <app-id> <product-id> --title "Monthly" --access-level-id <access-level-id>
| Argument | Description |
|---|---|
product-id | Product ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
--title | No | Product title |
--access-level-id | No | Access level ID (UUID) this product unlocks |
Paywalls
adapty paywalls list
List all paywalls for an app.
adapty paywalls list --app <app-id>
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
Accepts pagination flags.
adapty paywalls get
Get details for a specific paywall.
adapty paywalls get --app <app-id> <paywall-id>
| Argument | Description |
|---|---|
paywall-id | Paywall ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
adapty paywalls create
Create a new paywall.
adapty paywalls create --app <app-id> --title "Default Paywall" --product-id <product-id>
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
--title | Yes | Paywall title |
--product-id | Yes | Product ID (UUID). Repeat for multiple products: --product-id <id1> --product-id <id2> |
adapty paywalls update
Replace all fields of an existing paywall.
Once a paywall is linked to a placement, its products cannot be changed. To use different products in a live paywall, create a new paywall and update the placement to point to it.
adapty paywalls update --app <app-id> <paywall-id> --title "Default Paywall" --product-id <product-id>
This command replaces all paywall fields, including the full product list.
| Argument | Description |
|---|---|
paywall-id | Paywall ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
--title | Yes | Paywall title |
--product-id | Yes | Product ID (UUID). Repeat for multiple products: --product-id <id1> --product-id <id2> |
adapty paywalls placements
List all placements that currently use a given paywall.
adapty paywalls placements --app <app-id> <paywall-id>
| Argument | Description |
|---|---|
paywall-id | Paywall ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
Use this command before swapping a paywall to see which placements would be affected.
Placements
adapty placements list
List all placements for an app.
adapty placements list --app <app-id>
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
Accepts pagination flags.
adapty placements get
Get details for a specific placement.
adapty placements get --app <app-id> <placement-id>
| Argument | Description |
|---|---|
placement-id | Placement ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
The response contains an audiences array. Each entry is {segment_ids, paywall_id, priority}. The default audience has segment_ids: [] and the highest priority value (last evaluated). The formatted human output also shows a top-level Paywall ID derived from the default audience for convenience. --json returns the raw API shape unchanged.
adapty placements create
Create a new placement.
adapty placements create --app <app-id> --title "Main" --developer-id "main" --audiences '[{"segment_ids":[],"paywall_id":"<paywall-id>","priority":0}]'
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
--title | Yes | Placement title |
--developer-id | Yes | String identifier used in app code to request this placement |
--audiences | One of the two | JSON array of {segment_ids, paywall_id, priority} entries. See Audiences shape |
--paywall-id | One of the two | Deprecated. Paywall ID (UUID). Wrapped client-side into a single default audience |
Pass exactly one of --audiences or --paywall-id. Passing both or neither errors out.
--paywall-id is deprecated and will be removed. When passed, the CLI prints a stderr warning and converts the value into a default audience. Use --audiences for new automation.
adapty placements update
Replace all fields of an existing placement.
adapty placements update --app <app-id> <placement-id> --title "Main" --developer-id "main" --audiences '[{"segment_ids":[],"paywall_id":"<paywall-id>","priority":0}]'
This command replaces all placement fields, including the full audiences list.
| Argument | Description |
|---|---|
placement-id | Placement ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
--title | Yes | Placement title |
--developer-id | Yes | String identifier used in app code to request this placement |
--audiences | One of the two | JSON array of {segment_ids, paywall_id, priority} entries. See Audiences shape |
--paywall-id | One of the two | Deprecated. Paywall ID (UUID). Replaces all audiences with a single default audience |
Passing --paywall-id rewrites all audiences on the placement. Segment-specific audiences are dropped. To preserve them, use --audiences and include all entries you want to keep.
Audiences shape
The --audiences flag takes a JSON array. Each entry has:
| Field | Type | Description |
|---|---|---|
segment_ids | string[] | Segment IDs targeted by this audience. Length 0 or 1. Empty array marks the default audience — the fallback for users who match no other segment |
paywall_id | string | Paywall ID (UUID) shown to users in this audience |
priority | number | 0-based, unique within the placement. Audiences are evaluated low-to-high; the default audience must have the highest value |
A placement must have exactly one default audience.
Example with one targeted audience and one default:
adapty placements update <placement-id> --app <app-id> --title "Main" --developer-id "main" \
--audiences '[{"segment_ids":["<vip-segment-id>"],"paywall_id":"<vip-paywall-id>","priority":0},{"segment_ids":[],"paywall_id":"<default-paywall-id>","priority":1}]'
To swap a paywall across multiple placements without losing segment-specific routing:
-
Find affected placements:
adapty paywalls placements --app <app-id> <old-paywall-id> -
For each, read the full
audiencesarray:adapty placements get --app <app-id> <placement-id> --json -
Replace the matching
paywall_idvalues client-side. -
Write the modified payload back:
adapty placements update --app <app-id> <placement-id> --title "<title>" --developer-id "<developer-id>" --audiences '<modified-payload>'
Segments
Segments are read-only via the CLI. Create and edit them in the Adapty dashboard. Use these commands to look up segment IDs when composing placement audiences.
adapty segments list
List all segments for an app.
adapty segments list --app <app-id>
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
Accepts pagination flags.
adapty segments get
Get details for a specific segment.
adapty segments get --app <app-id> <segment-id>
| Argument | Description |
|---|---|
segment-id | Segment ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
The response contains id, title, and description. Filter rules are not exposed via this API.
Auth
| Command | Description |
|---|---|
adapty auth login | Authenticate via browser using device flow |
adapty auth logout | Clear stored credentials locally |
adapty auth whoami | Verify token with the server and show user info |
adapty auth status | Show local authentication state without a server call |
adapty auth revoke | Revoke token server-side and clear locally |
See Authentication for full details on each command.