Tài liệu tham khảo lệnh cho Adapty Developer CLI

Bài viết này liệt kê các lệnh Adapty CLI dùng để cấu hình tài khoản của bạn — ứng dụng, mức độ truy cập, sản phẩm, paywall, flow, placement và phân khúc — cùng các lệnh migrate dự án RevenueCat và cài đặt Adapty skill, kèm theo các đối số, cờ và giá trị được chấp nhận. Để đọc analytics của ứng dụng, xem Lệnh Analytics. Với các chiến dịch Apple Ads, xem Lệnh Ads Manager.

Cờ toàn cục

Các cờ này có thể dùng với tất cả các lệnh.

CờMô tả
--jsonXuất dưới dạng JSON thay vì văn bản định dạng
--helpHiển thị trợ giúp lệnh

Tất cả lệnh list cũng chấp nhận cờ phân trang:

CờMặc địnhMô tả
--page1Số trang
--page-size20Số mục mỗi trang (tối đa: 100)

Apps

Quản lý các ứng dụng trong tài khoản Adapty của bạn. Để cấu hình qua Dashboard, xem App settings.

adapty apps list

Liệt kê tất cả ứng dụng trong tài khoản Adapty của bạn.

adapty apps list

Chấp nhận cờ phân trang.

adapty apps get

Lấy thông tin chi tiết của một ứng dụng cụ thể.

adapty apps get <app-id>
Đối sốMô tả
app-idApp ID (UUID)

adapty apps create

Tạo ứng dụng mới.

adapty apps create --title "My App" --platform ios --apple-bundle-id com.example.app
CờBắt buộcMô tả
--titleCóTên ứng dụng
--platformCóNền tảng: ios hoặc android. Lặp lại để dùng cả hai: --platform ios --platform android
--apple-bundle-idBắt buộc khi dùng --platform iosApple bundle ID
--google-bundle-idBắt buộc khi dùng --platform androidGoogle bundle ID

adapty apps update

Cập nhật ứng dụng hiện có.

adapty apps update <app-id> --title "New Name"
Đối sốMô tả
app-idApp ID (UUID)
CờMô tả
--titleTên ứng dụng mới
--apple-bundle-idApple bundle ID mới
--google-bundle-idGoogle bundle ID mới

Cần có ít nhất một cờ. --platform không thể thay đổi sau khi tạo.

Mức độ truy cập

adapty access-levels list

Liệt kê tất cả mức độ truy cập của một ứng dụng.

adapty access-levels list --app <app-id>
CờBắt buộcMô tả
--appCóApp ID (UUID)

Chấp nhận cờ phân trang.

adapty access-levels get

Lấy thông tin chi tiết của một mức độ truy cập cụ thể.

adapty access-levels get --app <app-id> <access-level-id>
Đối sốMô tả
access-level-idAccess level ID (UUID)
CờBắt buộcMô tả
--appCóApp ID (UUID)

adapty access-levels create

Tạo mức độ truy cập mới.

adapty access-levels create --app <app-id> --sdk-id "pro" --title "Pro"
CờBắt buộcMô tả
--appCóApp ID (UUID)
--sdk-idCóĐịnh danh dùng trong code ứng dụng để kiểm tra quyền truy cập (ví dụ: "pro" hoặc "premium")
--titleCóNhãn hiển thị trên Adapty dashboard

adapty access-levels update

Cập nhật mức độ truy cập hiện có.

adapty access-levels update --app <app-id> <access-level-id> --title "Pro Access"
Đối sốMô tả
access-level-idAccess level ID (UUID)
CờBắt buộcMô tả
--appCóApp ID (UUID)
--titleCóNhãn hiển thị mới

--sdk-id không thể thay đổi sau khi tạo.

Sản phẩm

adapty products list

Liệt kê tất cả sản phẩm của một ứng dụng.

adapty products list --app <app-id>
CờBắt buộcMô tả
--appCóApp ID (UUID)

Chấp nhận cờ phân trang.

adapty products get

Lấy thông tin chi tiết của một sản phẩm cụ thể.

adapty products get --app <app-id> <product-id>
Đối sốMô tả
product-idProduct ID (UUID)
CờBắt buộcMô tả
--appCóApp ID (UUID)

adapty products create

Tạo một sản phẩm mới.

Important

ID sản phẩm và ID giá trong cửa hàng không thể thay đổi sau khi tạo. Để sử dụng các ID cửa hàng khác, hãy tạo sản phẩm mới.

adapty products create --app <app-id> --title "Monthly" --access-level-id <access-level-id> --period monthly --ios-product-id com.example.monthly
FlagRequiredDescription
--appCóApp ID (UUID)
--titleCóTiêu đề sản phẩm
--access-level-idCóID (UUID) của mức độ truy cập mà sản phẩm này mở khóa
--periodCóChu kỳ gói đăng ký: weekly, monthly, two_months, trimonthly, semiannual, annual, lifetime
--ios-product-idBắt buộc có ít nhất một cửa hàngID sản phẩm từ App Store Connect
--android-product-idBắt buộc có ít nhất một cửa hàngID sản phẩm từ Google Play Console
--android-base-plan-idBắt buộc khi dùng --android-product-id trừ khi --period lifetimeID base plan từ Google Play Console
--stripe-product-idBắt buộc có ít nhất một cửa hàngID sản phẩm từ Stripe
--stripe-price-idBắt buộc khi dùng --stripe-product-idID giá từ Stripe
--paddle-product-idBắt buộc có ít nhất một cửa hàngID sản phẩm từ Paddle
--paddle-price-idBắt buộc khi dùng --paddle-product-idID giá từ Paddle

Mỗi sản phẩm cần có ít nhất một cửa hàng: --ios-product-id, --android-product-id, --stripe-product-id, hoặc --paddle-product-id. Một sản phẩm có thể mang ID của nhiều cửa hàng cùng lúc.

Để bán sản phẩm trên web qua Stripe hoặc Paddle, hãy kết nối nhà cung cấp thanh toán với Adapty trước: xem Stripe và Paddle. Với mỗi cửa hàng này, bạn cần truyền cả product ID lẫn price ID cùng nhau. Lệnh sẽ thất bại nếu bạn chỉ truyền một trong hai.

adapty products create --app <app-id> --title "Monthly" --access-level-id <access-level-id> --period monthly --stripe-product-id prod_xxx --stripe-price-id price_xxx

Sản phẩm chỉ dành cho web là hợp lệ: bạn có thể tạo sản phẩm với ID Stripe hoặc Paddle mà không cần ID App Store hay Google Play.

adapty products update

Cập nhật một sản phẩm hiện có.

ID sản phẩm và ID giá trong cửa hàng không thể thay đổi sau khi tạo và không có sẵn trong lệnh này. Để sử dụng các ID cửa hàng khác, hãy tạo sản phẩm mới.

adapty products update --app <app-id> <product-id> --title "Monthly" --access-level-id <access-level-id>
ArgumentDescription
product-idProduct ID (UUID)
CờBắt buộcMô tả
--appCóApp ID (UUID)
--titleKhôngTên sản phẩm
--access-level-idKhôngID mức độ truy cập (UUID) mà sản phẩm này mở khóa

Paywall

adapty paywalls list

Liệt kê tất cả paywall của một ứng dụng.

adapty paywalls list --app <app-id>
CờBắt buộcMô tả
--appCóApp ID (UUID)

Chấp nhận cờ phân trang.

adapty paywalls get

Lấy thông tin chi tiết của một paywall cụ thể.

adapty paywalls get --app <app-id> <paywall-id>
Đối sốMô tả
paywall-idPaywall ID (UUID)
CờBắt buộcMô tả
--appCóApp ID (UUID)

adapty paywalls create

Tạo paywall mới.

adapty paywalls create --app <app-id> --title "Default Paywall" --product-id <product-id>
CờBắt buộcMô tả
--appCóApp ID (UUID)
--titleCóTên paywall
--product-idCóID sản phẩm (UUID). Lặp lại cho nhiều sản phẩm: --product-id <id1> --product-id <id2>

adapty paywalls update

Thay thế toàn bộ các trường của một paywall hiện có.

Important

Khi paywall đã được liên kết với một placement, không thể thay đổi sản phẩm của nó. Để dùng sản phẩm khác trong paywall đang hoạt động, hãy tạo paywall mới và cập nhật placement để trỏ đến paywall đó.

adapty paywalls update --app <app-id> <paywall-id> --title "Default Paywall" --product-id <product-id>

Lệnh này thay thế toàn bộ các trường của paywall, bao gồm cả danh sách sản phẩm đầy đủ.

Đối sốMô tả
paywall-idPaywall ID (UUID)
CờBắt buộcMô tả
--appCóApp ID (UUID)
--titleCóTên paywall
--product-idCóID sản phẩm (UUID). Lặp lại cho nhiều sản phẩm: --product-id <id1> --product-id <id2>

adapty paywalls placements

Liệt kê tất cả các placement hiện đang sử dụng một paywall nhất định.

adapty paywalls placements --app <app-id> <paywall-id>
Tham sốMô tả
paywall-idID paywall (UUID)
FlagBắt buộcMô tả
--appCóID ứng dụng (UUID)

Sử dụng lệnh này trước khi thay đổi paywall để xem những placement nào sẽ bị ảnh hưởng.

Các mục trong danh sách này không có trường is_active. Để đọc trạng thái kích hoạt của một placement, hãy dùng placements list hoặc placements get.

Flows

Flow là các paywall và onboarding bạn xây dựng trong Flow & Paywall Builder. CLI quản lý bản ghi flow, cấu hình builder và việc xuất bản. Cấu hình builder là một tài liệu JSON lớn mà Flow & Paywall Builder thường tạo ra, và CLI không tự tạo cấu hình đó. Để tạo hoặc chỉnh sửa cấu hình từ terminal, hãy sử dụng flow-generator skill, công cụ này sẽ điều phối các lệnh cho bạn. Trước khi xuất bản, flow-audit skill sẽ kiểm tra xem flow có sẵn sàng cho môi trường production chưa. Các lệnh được liệt kê ở đây để tham khảo.

adapty flows list

Liệt kê tất cả các flow của một ứng dụng.

adapty flows list --app <app-id>
FlagRequiredDescription
--appYesApp ID (UUID)

Chấp nhận các flag phân trang.

adapty flows get

Lấy thông tin chi tiết của một flow cụ thể.

adapty flows get --app <app-id> <flow-id>
ArgumentDescription
flow-idFlow ID (UUID)
FlagRequiredDescription
--appYesApp ID (UUID)

Kết quả trả về bao gồm id, name, status, và updated_at. Giá trị của status là một trong các giá trị sau:

Trạng tháiÝ nghĩa
draftFlow chưa bao giờ được xuất bản
publishedPhiên bản hiện tại đang hoạt động
dirtyFlow đã được xuất bản trước đó, và phiên bản hiện tại có các thay đổi chưa được xuất bản. Người dùng vẫn đang xem phiên bản được xuất bản lần cuối
publishingĐang trong quá trình xuất bản
publication_failedLần xuất bản cuối đã thất bại. Hãy sửa cấu hình và xuất bản lại
archivedFlow đã được lưu trữ

adapty flows create

Tạo một flow. Flow mới có tên và chưa có cấu hình. Để thêm cấu hình, dùng flows config update.

adapty flows create --app <app-id> --name "Onboarding"
FlagBắt buộcMô tả
--appCóApp ID (UUID)
--nameCóTên flow

adapty flows update

Đổi tên một flow.

adapty flows update --app <app-id> <flow-id> --name "Onboarding v2"
ArgumentDescription
flow-idFlow ID (UUID)
FlagRequiredDescription
--appYesApp ID (UUID)
--nameYesTên flow mới

adapty flows publish

Xuất bản phiên bản hiện tại của một flow đến người dùng.

adapty flows publish --app <app-id> <flow-id>
Đối sốMô tả
flow-idID của flow (UUID)
CờBắt buộcMô tả
--appCóID của app (UUID)
--yes, -yKhôngXuất bản mà không cần xác nhận. Bắt buộc khi đầu ra được dẫn qua pipe hoặc dùng --json

Vì việc xuất bản ảnh hưởng trực tiếp đến những gì người dùng nhìn thấy, lệnh sẽ in tên flow và yêu cầu xác nhận. Bất kỳ câu trả lời nào khác y đều hủy lệnh với mã thoát 1. Khi dùng --json hoặc trong pipe, lệnh sẽ từ chối với mã thoát 2 thay vì chờ câu trả lời, vì vậy hãy truyền --yes trong các script và phiên agent.

Quá trình xuất bản là bất đồng bộ: phản hồi trả về status: publishing và flow chưa hoạt động ngay. Hãy poll flows get cho đến khi trạng thái chuyển thành published hoặc publication_failed. Khi gặp publication_failed, flows config get sẽ cho biết nguyên nhân.

Việc xuất bản sẽ thất bại với HTTP 400 khi flow chưa có config, khi config không thể xuất bản được, hoặc khi phiên bản hiện tại đã được phát hành. Để kiểm tra config trước khi xuất bản, hãy dùng flows config validate.

adapty flows config get

Đọc cấu hình builder của một flow.

adapty flows config get --app <app-id> <flow-id>
ArgumentDescription
flow-idFlow ID (UUID)
FlagRequiredDescription
--appYesApp ID (UUID)

Phản hồi chứa các trường config, remote_configs, status và updated_at. updated_at là timestamp tính bằng mili giây của lần thay đổi config cuối cùng. Truyền giá trị này vào flows config update qua tham số --expected-updated-at để tránh ghi đè các chỉnh sửa đồng thời. Một flow chưa từng được ghi config sẽ trả về 404.

Sau một lần thử publication, phản hồi cũng chứa thêm ba trường mô tả kết quả. Hãy đọc chúng khi flows get báo publication_failed:

TrườngMô tả
publication_statusMức độ hoàn thành của quá trình xuất bản phiên bản flow này: transforming, transformed, uploading, uploaded, published, hoặc failed
transform_errorLỗi transform thô — có thể là một JSON payload liệt kê các vấn đề hoặc một chuỗi tóm tắt
publication_errorThông báo dễ đọc cho một lần xuất bản thất bại

adapty flows config update

Ghi cấu hình builder của một flow.

adapty flows config update --app <app-id> <flow-id> --config-file config.json
ArgumentDescription
flow-idID của flow (UUID)
FlagBắt buộcMô tả
--appCóApp ID (UUID)
--configMột trong haiBuilder config dưới dạng chuỗi JSON
--config-fileMột trong haiĐường dẫn đến file JSON chứa builder config, hoặc - để đọc từ stdin
--remote-configsKhôngMảng JSON gồm các mục {locale, data}, trong đó data là Remote Config dưới dạng chuỗi
--expected-updated-atKhôngGiá trị updated_at lấy từ lệnh flows config get trước đó. Nếu config đã thay đổi sau lần đọc đó, lệnh sẽ thất bại thay vì ghi đè. Bỏ qua để ghi đè vô điều kiện

Việc ghi config sẽ lưu bản nháp và không xuất bản nó. Trên một flow đã xuất bản, lệnh ghi sẽ tạo một phiên bản mới: trạng thái của flow trở thành dirty, và người dùng vẫn thấy phiên bản đã xuất bản cho đến khi bạn chạy flows publish.

adapty flows config validate

Kiểm tra xem một cấu hình builder có thể được xuất bản hay không, mà không cần lưu lại.

adapty flows config validate --app <app-id> <flow-id> --config-file config.json
ArgumentDescription
flow-idFlow ID (UUID)
FlagRequiredDescription
--appYesApp ID (UUID)
--configOne of the twoCấu hình builder dưới dạng chuỗi JSON
--config-fileOne of the twoĐường dẫn đến file JSON chứa cấu hình builder, hoặc - để đọc từ stdin

Phản hồi chứa valid và danh sách issues. Khi config không thể publish được, lệnh sẽ thoát với mã 1, do đó các script có thể dùng nó để kiểm soát luồng thực thi.

adapty flows config preview

Render một file config cục bộ trên trình duyệt. Lệnh này không gọi API và không nhận cờ --app.

adapty flows config preview ./config.json --screen <screen-id> --device iphone-14 --orientation portrait
Đối sốMô tả
config-fileĐường dẫn đến file JSON config của builder cục bộ
CờMặc địnhMô tả
--screenMàn hình đầu tiên của flowID màn hình cần render
--deviceiphone-14Khung thiết bị để render
--orientationportraitportrait hoặc landscape

Trong terminal, lệnh sẽ mở bản xem trước trong trình duyệt của bạn. Khi được pipe hoặc dùng với --json, nó sẽ in ra URL thay thế. URL chứa toàn bộ cấu hình nên khá dài: hãy pipe nó vào công cụ chụp ảnh màn hình thay vì in ra. Các cấu hình vượt quá khoảng 32 KB sẽ render chậm.

adapty flows media upload

Tải lên hình ảnh để sử dụng trong cấu hình flow.

adapty flows media upload --app <app-id> ./hero.png
ArgumentDescription
fileĐường dẫn đến tệp hình ảnh
FlagRequiredDescription
--appYesApp ID (UUID)

Định dạng được chấp nhận: GIF, HEIC, JPEG, PNG, SVG và WebP. Phản hồi chứa id, name và url CDN của hình ảnh để tham chiếu từ cấu hình.

Placements

Placements là nơi các flow, paywall và onboarding của bạn tiếp cận người dùng. Loại nội dung của một placement được cố định ngay khi tạo, vì vậy việc chuyển ứng dụng từ paywall sang flow đồng nghĩa với việc phải tạo các placement mới thay vì cập nhật những cái hiện có — skill migrate-placements hỗ trợ các lệnh này để thực hiện hàng loạt.

adapty placements list

Liệt kê tất cả placement của một ứng dụng.

adapty placements list --app <app-id>
FlagRequiredDescription
--appYesApp ID (UUID)

Chấp nhận pagination flags.

Mỗi mục chứa id, developer_id, title, và is_active. is_active là true với placement đang hoạt động và false với placement không hoạt động.

adapty placements get

Lấy thông tin chi tiết của một placement cụ thể.

adapty placements get --app <app-id> <placement-id>
Đối sốMô tả
placement-idPlacement ID (UUID)
CờBắt buộcMô tả
--appCóApp ID (UUID)

Phản hồi chứa id, developer_id, title, is_active, và một mảng audiences. is_active là true cho placement đang hoạt động và false cho placement không hoạt động. Mỗi mục trong audiences chứa content_type, segment_ids, priority, và ID của nội dung tương ứng: paywall_id cho paywall, flow_id cho flow, hoặc ab_test_id và ab_test_title cho đối tượng chạy A/B test. Đối tượng mặc định có segment_ids: [] và giá trị priority cao nhất (được đánh giá sau cùng). Xem Cấu trúc Audiences.

adapty placements create

Tạo placement mới.

adapty placements create --app <app-id> --title "Main" --developer-id "main" --audiences '[{"content_type":"paywall","segment_ids":[],"paywall_id":"<paywall-id>","priority":0}]'
FlagRequiredDescription
--appYesApp ID (UUID)
--titleYesTiêu đề placement
--developer-idYesChuỗi định danh dùng trong code ứng dụng để yêu cầu placement này
--audiencesMột trong haiMảng JSON gồm các mục đối tượng, mỗi mục có content_type rõ ràng. Xem Cấu trúc Audiences
--paywall-idMột trong haiDeprecated. ID Paywall (UUID). Được bọc phía client thành một đối tượng mặc định duy nhất

Truyền đúng một trong hai --audiences hoặc --paywall-id. Truyền cả hai hoặc không truyền cái nào đều gây lỗi.

Warning

--paywall-id không còn được khuyến nghị và sẽ bị xóa. Khi truyền vào, CLI sẽ in cảnh báo ra stderr và chuyển đổi giá trị thành một đối tượng mặc định. Hãy dùng --audiences cho các tự động hóa mới.

adapty placements update

Thay thế toàn bộ các trường của một placement hiện có.

adapty placements update --app <app-id> <placement-id> --title "Main" --developer-id "main" --audiences '[{"content_type":"paywall","segment_ids":[],"paywall_id":"<paywall-id>","priority":0}]'

Lệnh này thay thế toàn bộ các trường của placement, bao gồm cả danh sách audiences đầy đủ.

Đối sốMô tả
placement-idPlacement ID (UUID)
FlagBắt buộcMô tả
--appCóApp ID (UUID)
--titleCóTiêu đề placement
--developer-idCóChuỗi định danh dùng trong code ứng dụng để yêu cầu placement này
--audiencesMột trong haiMảng JSON gồm các mục đối tượng, mỗi mục có content_type rõ ràng. Xem Cấu trúc Audiences
--paywall-idMột trong haiKhông còn được hỗ trợ. ID Paywall (UUID). Thay thế tất cả đối tượng bằng một đối tượng mặc định duy nhất
Warning

Truyền --paywall-id sẽ ghi đè toàn bộ audiences của placement. Các audiences theo phân khúc sẽ bị xóa. Để giữ lại chúng, hãy dùng --audiences và thêm đầy đủ các phần tử bạn muốn giữ.

Cấu trúc Audiences

Cờ --audiences nhận một mảng JSON. Mỗi phần tử có các trường sau:

TrườngKiểuMô tả
content_typestringBắt buộc ở mỗi entry. "paywall", "flow", "ab_test" (A/B test paywall), "flow_ab_test" (A/B test flow), "cross_ab_test" hoặc "flow_cross_ab_test" (A/B test đa placement). Dùng paywall, ab_test và cross_ab_test trong placement paywall, và flow, flow_ab_test cùng flow_cross_ab_test trong placement flow
segment_idsstring[]ID các phân khúc mà đối tượng này nhắm đến. Độ dài 0 hoặc 1. Mảng rỗng đánh dấu đối tượng mặc định — dự phòng cho những người dùng không khớp với phân khúc nào khác
paywall_idstringID (UUID) của paywall hiển thị cho người dùng trong đối tượng này. Bắt buộc khi content_type là "paywall"
flow_idstringID (UUID) của flow hiển thị cho người dùng trong đối tượng này. Bắt buộc khi content_type là "flow"
ab_test_idstringID của A/B test chạy cho người dùng trong đối tượng này. Bắt buộc với bốn loại content_type A/B test
ab_test_titlestringTiêu đề A/B test. Chỉ đọc: API bỏ qua giá trị này khi ghi
prioritynumberBắt đầu từ 0, duy nhất trong placement. Các đối tượng được đánh giá theo thứ tự từ thấp đến cao; đối tượng mặc định phải có giá trị cao nhất

Một placement phải có đúng một đối tượng mặc định.

Warning

placements update thay thế toàn bộ danh sách đối tượng, kể cả những đối tượng đang chạy A/B test. Để giữ nguyên một A/B test đang chạy, hãy sao chép mục đó từ placements get vào --audiences mà không thay đổi gì, giữ nguyên ab_test_id và segment_ids. Nếu bạn xóa hoặc thay thế mục đó, A/B test sẽ dừng lại mà không có người thắng. Nếu bạn chuyển mục đó sang các phân khúc khác, A/B test sẽ bắt đầu lại, và ab_test_id trên một đối tượng khác sẽ khởi chạy A/B test tại đó. Nếu bạn chỉ thay đổi thứ tự ưu tiên, A/B test sẽ tiếp tục chạy bình thường. CLI sẽ không cảnh báo bạn về những trường hợp này.

Các mục A/B test xuyên placement (cross_ab_test, flow_cross_ab_test) là chỉ đọc. API bỏ qua chúng khi ghi và giữ nguyên các giá trị đã lưu.

Loại nội dung của một placement được cố định khi bạn tạo nó, vì vậy placements update không thể chuyển một paywall placement sang flow hoặc ngược lại. Hãy phục vụ flow từ một placement riêng — xem Tạo placement mới cho flow của bạn.

CLI kiểm tra từng mục trước khi gửi yêu cầu. Một mục thiếu hoặc có content_type không xác định, hoặc không có ID mà content_type yêu cầu, sẽ thoát với mã 2 và không có gì được gửi đi. Với content_type mà CLI không nhận ra, CLI sẽ in this CLI does not know this audience kind; update the CLI. Nếu mục đó đến từ placements get, hãy cập nhật CLI thay vì xóa mục đó: mục đó có thể là một A/B test đang chạy.

Flow chỉ có thể được đính kèm sau khi đã được xuất bản. Flow ở trạng thái draft, hoặc flow có lần xuất bản đầu tiên vẫn đang diễn ra, sẽ bị server từ chối; CLI nhận ra sự từ chối đó và thoát với mã 2, in ra lệnh flows publish cho flow đó. Để xuất bản một flow, hãy dùng flows publish hoặc Flow & Paywall Builder, sau đó chờ trạng thái của nó chuyển thành published.

Ví dụ với một đối tượng mục tiêu và một đối tượng mặc định:

adapty placements update <placement-id> --app <app-id> --title "Main" --developer-id "main" \
  --audiences '[{"content_type":"paywall","segment_ids":["<vip-segment-id>"],"paywall_id":"<vip-paywall-id>","priority":0},{"content_type":"paywall","segment_ids":[],"paywall_id":"<default-paywall-id>","priority":1}]'

Ví dụ về một placement phục vụ một flow đã được xuất bản cho tất cả người dùng:

adapty placements create --app <app-id> --title "Onboarding" --developer-id "onboarding" \
  --audiences '[{"content_type":"flow","segment_ids":[],"flow_id":"<flow-id>","priority":0}]'

Để thay thế một paywall trên nhiều placement mà không mất cấu hình routing theo phân khúc:

  1. Tìm các placement bị ảnh hưởng:

    adapty paywalls placements --app <app-id> <old-paywall-id>
  2. Với mỗi placement, đọc toàn bộ mảng audiences:

    adapty placements get --app <app-id> <placement-id> --json
  3. Thay thế các giá trị paywall_id tương ứng ở phía client. Giữ nguyên tất cả các mục khác, kể cả các mục A/B test.

  4. Ghi payload đã chỉnh sửa trở lại:

    adapty placements update --app <app-id> <placement-id> --title "<title>" --developer-id "<developer-id>" --audiences '<modified-payload>'

Phân khúc

Phân khúc nhóm người dùng theo các thuộc tính hồ sơ người dùng của họ. Sử dụng các lệnh sau để tạo phân khúc và tra cứu ID phân khúc khi soạn đối tượng placement. Để xây dựng phân khúc từ các chiến dịch Apple Ads, nhóm quảng cáo hoặc từ khóa, hãy dùng adapty asa segments create thay thế: lệnh này sẽ tra cứu Apple ID cho bạn và đặt tên phân khúc theo cách Ads Manager sử dụng.

adapty segments list

Liệt kê tất cả phân khúc của một ứng dụng.

adapty segments list --app <app-id>
CờBắt buộcMô tả
--appCóApp ID (UUID)

Chấp nhận cờ phân trang.

adapty segments get

Lấy thông tin chi tiết cho một phân khúc cụ thể.

adapty segments get --app <app-id> <segment-id>
Đối sốMô tả
segment-idID phân khúc (UUID)
CờBắt buộcMô tả
--appCóID ứng dụng (UUID)

Kết quả trả về bao gồm id, title, description, filters, profile_count, refresh_in_progress, created_at và updated_at. Lệnh list chỉ trả về id, title và description.

adapty segments create

Tạo một phân khúc từ một hoặc nhiều bộ lọc.

adapty segments create --app <app-id> --title "US installs" --filter ip_country:IN:US --filter install_date:>=:2026-01-01
FlagRequiredDescription
--appYesApp ID (UUID)
--titleYesSegment title
--filterYesFilter rule. Repeatable. See Filter syntax
--descriptionNoSegment description

Người dùng chỉ khớp với phân khúc khi họ khớp với mọi bộ lọc. Phản hồi có các trường giống như segments get. profile_count bắt đầu từ 0, và Adapty sẽ tính lại sau khi phân khúc được tạo.

adapty segments update

Thay thế tiêu đề, mô tả và bộ lọc của một phân khúc hiện có.

adapty segments update --app <app-id> <segment-id> --title "US installs" --filter ip_country:IN:US,CA
Đối sốMô tả
segment-idID phân khúc (UUID)
CờBắt buộcMô tả
--appCóID ứng dụng (UUID)
--titleCóTiêu đề phân khúc
--filterCóQuy tắc lọc. Có thể lặp lại. Xem Cú pháp bộ lọc
--descriptionKhôngMô tả phân khúc
Warning

segments update thay thế toàn bộ phân khúc. Hãy truyền vào mọi bộ lọc bạn muốn giữ lại, không chỉ bộ lọc bạn đang thay đổi. Để đọc các bộ lọc hiện tại, chạy adapty segments get --app <app-id> <segment-id> --json.

Cú pháp bộ lọc

Viết mỗi --filter theo dạng field:OPERATOR:value. Để khớp với bất kỳ giá trị nào trong số nhiều giá trị, hãy phân tách chúng bằng dấu phẩy: ip_country:IN:US,CA.

Toán tửGiá trịVí dụ
IN, NOT INMột hoặc nhiềuip_country:NOT IN:US,CA
>, >=, <, <=Mộtage:>:18
BETWEENHaitotal_revenue_usd:BETWEEN:10,100
IS NULL, IS NOT NULLKhông cóage:IS NULL

Truyền số dưới dạng giá trị thuần túy, ví dụ age:>:18. Adapty tự động chuyển đổi chúng cho các trường kiểu số như age, total_revenue_usd, và các thuộc tính tùy chỉnh kiểu float.

Với giá trị mà dạng rút gọn này không thể biểu diễn được, hãy truyền bộ lọc dưới dạng đối tượng JSON:

adapty segments create --app <app-id> --title "Adults" --filter '{"field_name":"age","operator":">","value_list":[18]}'

Adapty xác thực tên trường, toán tử và kiểu giá trị, đồng thời báo cáo một lỗi cho mỗi bộ lọc không hợp lệ. Để xem tên trường và định dạng giá trị của các bộ lọc hiện có, hãy chạy adapty segments get --app <app-id> <segment-id> --json trên một phân khúc đã tạo trong dashboard.

Migration

Di chuyển một dự án RevenueCat vào Adapty: catalog sản phẩm, sau đó tùy chọn các sự kiện từ cửa hàng và lịch sử giao dịch. Adapty thực hiện mỗi migration theo từng bước và cho bạn biết những hành động nào có thể thực hiện tiếp theo, vì vậy hãy đọc status trước mỗi hành động. Để xem toàn bộ quy trình, xem Migration từ RevenueCat.

Tất cả các lệnh ngoại trừ list, create, use, current, và unuse đều chấp nhận cờ migration:

CờBắt buộcMô tả
-m, --migrationKhôngID migration. Nếu không có, CLI sẽ sử dụng biến môi trường ADAPTY_MIGRATION, sau đó là migration đã được lưu bởi create hoặc use.

adapty migrations list

Liệt kê các migration của bạn và các migration flow bạn có thể khởi động, được nhóm theo ứng dụng.

adapty migrations list

adapty migrations create

Bắt đầu một migration và lưu nó làm migration hiện tại.

adapty migrations create --name <app-name>
adapty migrations create --flow <flow> --app <app-id>
FlagRequiredDescription
--nameMột trong --name hoặc --flowTên của Adapty app mới. Bắt đầu quá trình migration catalog. Không thể kết hợp với --flow hoặc --app.
--flowMột trong --name hoặc --flowFlow cần khởi động trong một app hiện có, như hiển thị trong adapty migrations list. Yêu cầu --app.
--appVới --flowApp ID (UUID)
--no-selectKhôngTạo migration mà không lưu nó làm migration hiện tại

Các flow có sẵn cho một app hiện có sau khi migration catalog của nó:

FlowMô tả
transactionsImport lịch sử giao dịch từ RevenueCat Cloud Export hằng ngày
transactions_supportImport lịch sử giao dịch qua bộ phận hỗ trợ của RevenueCat và Adapty, dành cho các gói RevenueCat không có Cloud Export
apple_eventsChuyển tiếp thông báo App Store tới Adapty trong khi RevenueCat vẫn tiếp tục nhận chúng
google_eventsĐăng ký Adapty vào Pub/Sub topic mà RevenueCat sử dụng cho thông báo Google Play
codeĐể coding agent thay thế RevenueCat SDK trong một codebase của ứng dụng
integrationsĐể coding agent tìm các công cụ analytics, attribution và messaging trong code ứng dụng để thiết lập trong Adapty
paywall_designĐể coding agent xây dựng lại thiết kế paywall RevenueCat trong các flow mà quá trình migration catalog đã tạo

adapty migrations use

Lưu một migration làm migration hiện tại, để các lệnh khác không cần dùng -m.

adapty migrations use <migration-id>
ArgumentDescription
migration-idMigration ID từ adapty migrations list

CLI kiểm tra xem bạn có quyền truy cập migration đó không trước khi lưu ID. Migration đã lưu thuộc về token hiện tại và có hiệu lực trong mọi terminal.

adapty migrations current

Hiển thị migration hiện tại và nguồn gốc của nó: biến môi trường ADAPTY_MIGRATION hoặc lựa chọn đã lưu.

adapty migrations current

adapty migrations unuse

Xóa migration đã lưu. Giá trị ADAPTY_MIGRATION được đặt trong shell của bạn sẽ có hiệu lực cho đến khi bạn hủy đặt nó.

adapty migrations unuse

adapty migrations status

Hiển thị trạng thái của một migration, các vấn đề liên quan và các hành động bạn có thể thực hiện tiếp theo.

adapty migrations status
FlagBắt buộcMô tả
--waitKhôngKiểm tra định kỳ cho đến khi migration thay đổi, sau đó trả về trạng thái mới nhất
--timeoutKhôngThời gian kiểm tra cho --wait: 1–600 giây, mặc định là 120. Chấp nhận 300, 300s, hoặc 5m. Yêu cầu --wait.

Với --json, next_actions và available_actions liệt kê ID của từng hành động, các tài nguyên mà hành động đó đọc, input_schema và nội dung confirm.

Mã thoát 0 có nghĩa là yêu cầu đã thành công, không phải là quá trình migration đã hoàn tất. Hãy kiểm tra migration.state trong phản hồi.

Các bước migration của adapty

Hiển thị danh sách kiểm tra migration và trạng thái của từng bước.

adapty migrations steps

adapty migrations show

Liệt kê các tài nguyên bạn có thể đọc hiện tại, hoặc đọc một tài nguyên cụ thể.

adapty migrations show [resource]
ArgumentDescription
resourceTên tài nguyên, ví dụ apps, mapping, report, hoặc export-config. Bỏ qua để liệt kê các tài nguyên có sẵn ở bước hiện tại.

adapty migrations run

Chạy một hành động từ adapty migrations status.

adapty migrations run <action-id>
Đối sốMô tả
action-idID hành động từ next_actions hoặc available_actions trong adapty migrations status
CờBắt buộcMô tả
--inputKhôngĐầu vào của action dưới dạng JSON object khớp với input_schema của action đó. Nếu không có input, CLI sẽ gửi {}.
--input-fileKhôngĐường dẫn đến file chứa đầu vào của action, hoặc - để đọc từ stdin. Không thể kết hợp với --input.
-y, --yesVới các action có văn bản confirmXác nhận action sau khi đọc văn bản confirm của nó. Không có prompt tương tác.
--openKhôngMở link của action ngay cả khi dùng pipe hoặc --json
--no-browserKhôngIn link của action mà không mở trình duyệt

Hành động có ba loại:

  • Hành động đầu vào (Input actions) gửi dữ liệu của bạn lên Adapty, ví dụ như các ứng dụng RevenueCat cần migrate hoặc các quyết định mapping của bạn.
  • Hành động bên ngoài (External actions) mở một trang trong Adapty Dashboard, ví dụ để dán RevenueCat secret API key. Hoàn thành trang đó, sau đó kiểm tra status.
  • Hành động agent (Agent actions), ví dụ migrate_code, là việc dành cho coding agent của bạn. Chạy chúng từ git repository của ứng dụng: CLI lưu dữ liệu migration vào .git/adapty/<migration-id>/ và in ra hướng dẫn cho agent. Agent báo cáo kết quả bằng cách chạy lại hành động đó với --input.

adapty migrations close

Kết thúc hoặc hủy một migration. Bạn không thể mở lại sau đó.

adapty migrations close --outcome finish --yes
FlagRequiredDescription
--outcomeYesfinish đánh dấu migration là đã hoàn thành; cancel hủy bỏ nó
-y, --yesYesXác nhận việc đóng

Skills

adapty skills install

Cài đặt các Adapty skill vào các coding agent trên máy này.

adapty skills install
FlagRequiredDescription
--agentNoAgent to install into: claude-code, codex, or gemini-cli. Repeat the flag for several agents.
-y, --yesNoInstall into every agent found without asking. Required when the CLI finds several agents and can’t ask, for example with --json.

The CLI looks for Claude Code, Codex, and Gemini CLI on PATH. If it finds none, it asks whether to run npx skills@1.7.0 add adaptyteam/adapty-skills --all --global, which covers other agents. Restart the agent to load the skills.

Xác thực

LệnhMô tả
adapty auth loginXác thực qua trình duyệt bằng device flow
adapty auth logoutXóa thông tin đăng nhập đã lưu và migration đã lưu cục bộ
adapty auth whoamiXác minh token với máy chủ và hiển thị thông tin người dùng
adapty auth statusHiển thị trạng thái xác thực cục bộ mà không gọi lên máy chủ
adapty auth revokeThu hồi token phía máy chủ, sau đó xóa token và migration đã lưu cục bộ

Xem Xác thực để biết thêm chi tiết về từng lệnh.