Referencia de comandos del CLI de desarrollador de Adapty
Este artículo lista los comandos de la CLI de Adapty para configurar tu cuenta — apps, niveles de acceso, productos, paywalls, flows, placements y segmentos — con sus argumentos, flags y valores aceptados. Para campañas de Apple Ads, consulta Comandos de Ads Manager.
Para la configuración de autenticación y gestión de tokens, consulta Autenticación.
Flags globales
Estos flags están disponibles en todos los comandos.
| Flag | Descripción |
|---|---|
--json | Mostrar la salida en JSON en lugar de texto formateado |
--help | Mostrar la ayuda del comando |
Todos los comandos list también aceptan flags de paginación:
| Flag | Por defecto | Descripción |
|---|---|---|
--page | 1 | Número de página |
--page-size | 20 | Elementos por página (máx.: 100) |
Apps
Gestiona las apps de tu cuenta de Adapty. Para la configuración desde el dashboard, consulta App settings.
adapty apps list
Lista todas las apps de tu cuenta de Adapty.
adapty apps list
Acepta flags de paginación.
adapty apps get
Obtén los detalles de una app específica.
adapty apps get <app-id>
| Argumento | Descripción |
|---|---|
app-id | ID de la app (UUID) |
adapty apps create
Crea una nueva app.
adapty apps create --title "My App" --platform ios --apple-bundle-id com.example.app
| Flag | Requerido | Descripción |
|---|---|---|
--title | Sí | Título de la app |
--platform | Sí | Plataforma: ios o android. Repite para ambas: --platform ios --platform android |
--apple-bundle-id | Requerido con --platform ios | Bundle ID de Apple |
--google-bundle-id | Requerido con --platform android | Bundle ID de Google |
adapty apps update
Actualiza una app existente.
adapty apps update <app-id> --title "New Name"
| Argumento | Descripción |
|---|---|
app-id | ID de la app (UUID) |
| Flag | Descripción |
|---|---|
--title | Nuevo título de la app |
--apple-bundle-id | Nuevo bundle ID de Apple |
--google-bundle-id | Nuevo bundle ID de Google |
Se requiere al menos un flag. --platform no se puede cambiar después de la creación.
Niveles de acceso
adapty access-levels list
Lista todos los niveles de acceso de una app.
adapty access-levels list --app <app-id>
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
Acepta flags de paginación.
adapty access-levels get
Obtén los detalles de un nivel de acceso específico.
adapty access-levels get --app <app-id> <access-level-id>
| Argumento | Descripción |
|---|---|
access-level-id | ID del nivel de acceso (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
adapty access-levels create
Crea un nuevo nivel de acceso.
adapty access-levels create --app <app-id> --sdk-id "pro" --title "Pro"
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--sdk-id | Sí | Identificador utilizado en el código de la app para comprobar el acceso (por ejemplo, "pro" o "premium") |
--title | Sí | Etiqueta de visualización en el Adapty Dashboard |
adapty access-levels update
Actualiza un nivel de acceso existente.
adapty access-levels update --app <app-id> <access-level-id> --title "Pro Access"
| Argumento | Descripción |
|---|---|
access-level-id | ID del nivel de acceso (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--title | Sí | Nueva etiqueta de visualización |
--sdk-id no se puede cambiar después de la creación.
Productos
adapty products list
Lista todos los productos de una app.
adapty products list --app <app-id>
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
Acepta flags de paginación.
adapty products get
Obtén los detalles de un producto específico.
adapty products get --app <app-id> <product-id>
| Argumento | Descripción |
|---|---|
product-id | ID del producto (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
adapty products create
Crea un nuevo producto.
Los IDs del producto de la store y del precio no se pueden cambiar una vez creados. Para usar IDs de store diferentes, crea un nuevo producto.
adapty products create --app <app-id> --title "Monthly" --access-level-id <access-level-id> --period monthly --ios-product-id com.example.monthly
| Indicador | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--title | Sí | Título del producto |
--access-level-id | Sí | ID (UUID) del nivel de acceso que desbloquea este producto |
--period | Sí | Período de suscripción: weekly, monthly, two_months, trimonthly, semiannual, annual, lifetime |
--ios-product-id | Al menos un store requerido | ID del producto en App Store Connect |
--android-product-id | Al menos un store requerido | ID del producto en Google Play Console |
--android-base-plan-id | Requerido con --android-product-id salvo que se use --period lifetime | ID del plan base en Google Play Console |
--stripe-product-id | Al menos un store requerido | ID del producto en Stripe |
--stripe-price-id | Requerido con --stripe-product-id | ID de precio en Stripe |
--paddle-product-id | Al menos un store requerido | ID del producto en Paddle |
--paddle-price-id | Requerido con --paddle-product-id | ID de precio en Paddle |
Cada producto necesita al menos un store: --ios-product-id, --android-product-id, --stripe-product-id o --paddle-product-id. Un mismo producto puede tener IDs para varios stores a la vez.
Para vender un producto en la web mediante Stripe o Paddle, primero conecta el proveedor de pago a Adapty: consulta Stripe y Paddle. Para cada uno de estos stores, pasa el ID del producto y el ID del precio juntos. El comando falla si solo pasas uno de los dos.
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
Un producto exclusivo de web es válido: puedes crear un producto con IDs de Stripe o Paddle sin necesidad de IDs de App Store o Google Play.
adapty products update
Actualiza un producto existente.
Los IDs de producto de la store y de precio no se pueden cambiar tras la creación y no están disponibles en este comando. Para usar IDs de store diferentes, crea un nuevo producto.
adapty products update --app <app-id> <product-id> --title "Monthly" --access-level-id <access-level-id>
| Argumento | Descripción |
|---|---|
product-id | ID del producto (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--title | No | Título del producto |
--access-level-id | No | ID (UUID) del nivel de acceso que desbloquea este producto |
Paywalls
adapty paywalls list
Lista todos los paywalls de una app.
adapty paywalls list --app <app-id>
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
Acepta flags de paginación.
adapty paywalls get
Obtén los detalles de un paywall específico.
adapty paywalls get --app <app-id> <paywall-id>
| Argumento | Descripción |
|---|---|
paywall-id | ID del paywall (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
adapty paywalls create
Crea un nuevo paywall.
adapty paywalls create --app <app-id> --title "Default Paywall" --product-id <product-id>
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--title | Sí | Título del paywall |
--product-id | Sí | ID (UUID) del producto. Repite para varios productos: --product-id <id1> --product-id <id2> |
adapty paywalls update
Reemplaza todos los campos de un paywall existente.
Una vez que un paywall está vinculado a un placement, sus productos no se pueden cambiar. Para usar productos distintos en un paywall en producción, crea un nuevo paywall y actualiza el placement para que apunte a él.
adapty paywalls update --app <app-id> <paywall-id> --title "Default Paywall" --product-id <product-id>
Este comando reemplaza todos los campos del paywall, incluida la lista completa de productos.
| Argumento | Descripción |
|---|---|
paywall-id | ID del paywall (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--title | Sí | Título del paywall |
--product-id | Sí | ID (UUID) del producto. Repite para varios productos: --product-id <id1> --product-id <id2> |
adapty paywalls placements
Lista todos los placements que actualmente usan un paywall determinado.
adapty paywalls placements --app <app-id> <paywall-id>
| Argumento | Descripción |
|---|---|
paywall-id | ID del paywall (UUID) |
| Flag | Obligatorio | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
Usa este comando antes de cambiar un paywall para ver qué placements se verían afectados.
Los elementos de esta lista no contienen el campo is_active. Para consultar el estado de activación de un placement, usa placements list o placements get.
Flows
Los flows son los paywalls y onboardings que construyes en el Flow & Paywall Builder. El CLI gestiona el registro del flow, su configuración del builder y la publicación. La configuración del builder es un documento JSON extenso que normalmente genera el Flow & Paywall Builder; el CLI no genera uno. Para crear o editar una configuración desde el terminal, usa el skill flow-generator, que ejecuta estos comandos por ti. Antes de publicar, el skill flow-audit verifica si el flow está listo para producción. Los comandos se incluyen aquí como referencia.
Lista de flows de Adapty
Lista todos los flows de una aplicación.
adapty flows list --app <app-id>
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
Acepta flags de paginación.
adapty flows get
Obtén los detalles de un flow específico.
adapty flows get --app <app-id> <flow-id>
| Argument | Description |
|---|---|
flow-id | Flow ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
La respuesta contiene id, name, status y updated_at. El estado es uno de:
| Estado | Significado |
|---|---|
draft | El flow nunca ha sido publicado |
published | La versión actual está activa |
dirty | El flow fue publicado anteriormente y la versión actual tiene cambios sin publicar. Los usuarios siguen viendo la última versión publicada |
publishing | La publicación está en curso |
publication_failed | La última publicación falló. Corrige la configuración y vuelve a publicar |
archived | El flow está archivado |
adapty flows create
Crea un flow. El nuevo flow tiene un nombre y sin configuración. Para añadir una configuración, usa flows config update.
adapty flows create --app <app-id> --name "Onboarding"
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--name | Sí | Nombre del flow |
adapty flows update
Renombra un flow.
adapty flows update --app <app-id> <flow-id> --name "Onboarding v2"
| Argumento | Descripción |
|---|---|
flow-id | ID del flow (UUID) |
| Flag | Obligatorio | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--name | Sí | Nuevo nombre del flow |
adapty flows publish
Publica la versión actual de un flow para tus usuarios.
adapty flows publish --app <app-id> <flow-id>
| Argumento | Descripción |
|---|---|
flow-id | ID del flow (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--yes, -y | No | Publica sin pedir confirmación. Requerido cuando la salida se redirige por tubería o se usa --json |
Dado que publicar cambia lo que ven tus usuarios, el comando muestra el nombre del flow y pide confirmación. Cualquier respuesta distinta de y cancela el comando con código de salida 1. Con --json o en una tubería, el comando rechaza la operación con código de salida 2 en lugar de esperar una respuesta, así que usa --yes en scripts y sesiones de agente.
La publicación es asíncrona: la respuesta devuelve status: publishing y el flow aún no está activo. Consulta flows get periódicamente hasta que el estado pase a published o publication_failed. Si el estado es publication_failed, flows config get indica el motivo.
La publicación falla con HTTP 400 cuando el flow no tiene configuración, cuando la configuración no es publicable o cuando la versión actual ya está activa. Para validar una configuración antes de publicarla, usa flows config validate.
adapty flows config get
Lee la configuración del builder de un flow.
adapty flows config get --app <app-id> <flow-id>
| Argument | Description |
|---|---|
flow-id | Flow ID (UUID) |
| Flag | Required | Description |
|---|---|---|
--app | Yes | App ID (UUID) |
La respuesta contiene config, remote_configs, status y updated_at. updated_at es una marca de tiempo en milisegundos del último cambio de configuración. Pásala a flows config update como --expected-updated-at para evitar sobrescribir una edición concurrente. Un flow cuya configuración nunca se ha escrito devuelve 404.
Tras un intento de publicación, la respuesta también incluye tres campos que describen cómo fue. Léelos cuando flows get indique publication_failed:
| Campo | Descripción |
|---|---|
publication_status | El progreso de publicación de esta versión del flow: transforming, transformed, uploading, uploaded, published o failed |
transform_error | El error de transformación sin procesar: un payload JSON con los problemas o una cadena resumen |
publication_error | Un mensaje legible para una publicación fallida |
adapty flows config update
Escribe la configuración del builder de un flow.
adapty flows config update --app <app-id> <flow-id> --config-file config.json
| Argument | Description |
|---|---|
flow-id | ID del flow (UUID) |
| Flag | Obligatorio | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--config | Uno de los dos | Configuración del Builder como cadena JSON |
--config-file | Uno de los dos | Ruta a un archivo JSON con la configuración del Builder, o - para leer desde stdin |
--remote-configs | No | Array JSON de entradas {locale, data}, donde data es el Remote Config como cadena |
--expected-updated-at | No | El valor updated_at de un flows config get anterior. Si la configuración cambió después de esa lectura, el comando falla en lugar de sobrescribir el cambio. Omítelo para sobrescribir sin condiciones |
Escribir la configuración guarda un borrador sin publicarlo. En un flow publicado, la escritura crea una nueva versión: el estado del flow pasa a dirty, y los usuarios siguen viendo la versión publicada hasta que ejecutes flows publish.
adapty flows config validate
Comprueba si una configuración del builder es publicable, sin guardarla.
adapty flows config validate --app <app-id> <flow-id> --config-file config.json
| Argumento | Descripción |
|---|---|
flow-id | ID del flow (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--config | Uno de los dos | Configuración del builder como cadena JSON |
--config-file | Uno de los dos | Ruta a un archivo JSON con la configuración del builder, o - para leer desde stdin |
La respuesta contiene valid y una lista de issues. Cuando la configuración no es publicable, el comando sale con código 1, para que los scripts puedan usarlo como condición.
adapty flows config preview
Renderiza un archivo de configuración local en el navegador. Este comando no realiza ninguna llamada a la API y no acepta el flag --app.
adapty flows config preview ./config.json --screen <screen-id> --device iphone-14 --orientation portrait
| Argumento | Descripción |
|---|---|
config-file | Ruta a un archivo JSON de configuración del builder local |
| Flag | Por defecto | Descripción |
|---|---|---|
--screen | La primera pantalla del flow | ID de pantalla a renderizar |
--device | iphone-14 | Marco de dispositivo en el que renderizar |
--orientation | portrait | portrait o landscape |
En un terminal, el comando abre la vista previa en el navegador. Si se usa con una tubería o con --json, imprime la URL en su lugar. La URL contiene toda la configuración y es larga: pásala a una herramienta de capturas de pantalla en lugar de imprimirla. Las configuraciones de más de aproximadamente 32 KB se renderizan lentamente.
adapty flows media upload
Sube una imagen para usarla en la configuración de un flow.
adapty flows media upload --app <app-id> ./hero.png
| Argumento | Descripción |
|---|---|
file | Ruta al archivo de imagen |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
Formatos aceptados: GIF, HEIC, JPEG, PNG, SVG y WebP. La respuesta contiene el id, el name y la url de CDN de la imagen para referenciarla desde la configuración.
Placements
Los placements son los puntos donde tus flows, paywalls y onboardings llegan a los usuarios. El tipo de contenido de un placement se fija en el momento de su creación, por lo que migrar una app de paywalls a flows implica crear nuevos placements en lugar de actualizar los existentes — la skill migrate-placements gestiona estos comandos para hacerlo en bloque.
adapty placements list
Lista todos los placements de una app.
adapty placements list --app <app-id>
| Flag | Obligatorio | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
Acepta flags de paginación.
Cada elemento contiene id, developer_id, title e is_active. is_active es true para un placement activo y false para uno inactivo.
adapty placements get
Obtén los detalles de un placement específico.
adapty placements get --app <app-id> <placement-id>
| Argumento | Descripción |
|---|---|
placement-id | ID del placement (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
La respuesta contiene id, developer_id, title, is_active y un array audiences. is_active es true para un placement activo y false para uno inactivo. Cada entrada de audiencia incluye content_type (paywall o flow), segment_ids, priority y paywall_id o flow_id. La audiencia por defecto tiene segment_ids: [] y el valor de prioridad más alto (la última en evaluarse). Consulta Forma del objeto audiences.
adapty placements create
Crea un nuevo placement.
adapty placements create --app <app-id> --title "Main" --developer-id "main" --audiences '[{"content_type":"paywall","segment_ids":[],"paywall_id":"<paywall-id>","priority":0}]'
| Flag | Obligatorio | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--title | Sí | Título del placement |
--developer-id | Sí | Identificador de cadena utilizado en el código de la app para solicitar este placement |
--audiences | Uno de los dos | Array JSON de entradas de audiencia, cada una con un content_type explícito. Ver Formato de audiencias |
--paywall-id | Uno de los dos | Obsoleto. ID del paywall (UUID). Se envuelve en el lado del cliente en una única audiencia predeterminada |
Pasa exactamente uno de --audiences o --paywall-id. Si se pasan ambos o ninguno, se producirá un error.
--paywall-id está obsoleto y se eliminará. Al usarlo, la CLI muestra una advertencia en stderr y convierte el valor en una audiencia por defecto. Para nuevas automatizaciones, usa --audiences.
adapty placements update
Reemplaza todos los campos de un placement existente.
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}]'
Este comando reemplaza todos los campos del placement, incluida la lista completa de audiencias.
| Argumento | Descripción |
|---|---|
placement-id | ID del placement (UUID) |
| Flag | Obligatorio | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
--title | Sí | Título del placement |
--developer-id | Sí | Identificador de cadena usado en el código de la app para solicitar este placement |
--audiences | Uno de los dos | Array JSON de entradas de audiencia, cada una con un content_type explícito. Ver Formato de audiencias |
--paywall-id | Uno de los dos | Obsoleto. ID del paywall (UUID). Reemplaza todas las audiencias con una única audiencia predeterminada |
Al usar --paywall-id se sobreescriben todas las audiencias del placement. Las audiencias específicas de segmento se eliminan. Para conservarlas, usa --audiences e incluye todas las entradas que quieras mantener.
Forma de las audiencias
El flag --audiences acepta un array JSON. Cada entrada tiene:
| Campo | Tipo | Descripción |
|---|---|---|
content_type | string | "paywall" o "flow". Obligatorio en cada entrada. Todas las entradas de un placement deben tener el mismo valor |
segment_ids | string[] | IDs de segmento objetivo de esta audiencia. Longitud 0 o 1. Un array vacío indica la audiencia predeterminada — el fallback para usuarios que no coinciden con ningún otro segmento |
paywall_id | string | ID (UUID) del paywall que se muestra a los usuarios de esta audiencia. Obligatorio cuando content_type es "paywall" |
flow_id | string | ID (UUID) del flow que se muestra a los usuarios de esta audiencia. Obligatorio cuando content_type es "flow" |
priority | number | Basado en 0, único dentro del placement. Las audiencias se evalúan de menor a mayor; la audiencia predeterminada debe tener el valor más alto |
Un placement debe tener exactamente una audiencia predeterminada.
El tipo de contenido de un placement se fija al crearlo, por lo que placements update no puede cambiar un placement de paywall a flow ni al revés. Sirve el flow desde un placement propio; consulta Crear un nuevo placement para tu flow.
El CLI valida cada entrada antes de enviar la solicitud. Si una entrada tiene un content_type ausente o desconocido, o le falta el ID que requiere su content_type, el comando termina con el código 2 y no se envía nada.
Un flow solo puede adjuntarse una vez que ha sido publicado. Un flow en estado draft, o cuya primera publicación aún está en curso, es rechazado por el servidor; el CLI reconoce ese rechazo y finaliza con el código 2, imprimiendo el comando flows publish para ese flow. Para publicar un flow, usa flows publish o el Flow & Paywall Builder, y espera a que su estado llegue a published.
Ejemplo con una audiencia específica y una por defecto:
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}]'
Ejemplo de un placement que sirve un flow publicado a todos los usuarios:
adapty placements create --app <app-id> --title "Onboarding" --developer-id "onboarding" \
--audiences '[{"content_type":"flow","segment_ids":[],"flow_id":"<flow-id>","priority":0}]'
Para intercambiar un paywall en varios placements sin perder el enrutamiento por segmento:
-
Encuentra los placements afectados:
adapty paywalls placements --app <app-id> <old-paywall-id> -
Para cada uno, lee el array completo de
audiences:adapty placements get --app <app-id> <placement-id> --json -
Reemplaza los valores
paywall_idcoincidentes en el cliente. -
Escribe el payload modificado de vuelta:
adapty placements update --app <app-id> <placement-id> --title "<title>" --developer-id "<developer-id>" --audiences '<modified-payload>'
Segmentos
Los segmentos son de solo lectura a través de la CLI. Créalos y edítalos en el Adapty dashboard. Usa estos comandos para buscar los IDs de segmento al componer audiencias de placements.
adapty segments list
Lista todos los segmentos de una app.
adapty segments list --app <app-id>
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
Acepta flags de paginación.
adapty segments get
Obtén los detalles de un segmento específico.
adapty segments get --app <app-id> <segment-id>
| Argumento | Descripción |
|---|---|
segment-id | ID del segmento (UUID) |
| Flag | Requerido | Descripción |
|---|---|---|
--app | Sí | ID de la app (UUID) |
La respuesta contiene id, title y description. Las reglas de filtro no están expuestas a través de esta API.
Auth
| Comando | Descripción |
|---|---|
adapty auth login | Autenticarse mediante el navegador usando el flujo de dispositivo |
adapty auth logout | Borrar las credenciales almacenadas localmente |
adapty auth whoami | Verificar el token con el servidor y mostrar información del usuario |
adapty auth status | Mostrar el estado de autenticación local sin hacer una llamada al servidor |
adapty auth revoke | Revocar el token en el servidor y borrarlo localmente |
Consulta Autenticación para ver todos los detalles de cada comando.