Actualiza la configuración de una Publicación existente. Todos los campos actualizables del endpoint POST – Crear una Publicación están soportados aquí, incluyendo el modo de seguridad, el filtro de Build, el control de acceso, la visibilidad, las sobreescrituras de branding y los términos legales.
Esta es una sustitución completa (PUT), no una actualización parcial (PATCH). Cualquier campo no incluido en el cuerpo de la petición se reseteará a su valor por defecto. Recupera siempre el estado actual de la Publicación primero e incluye todos los campos que quieras conservar.
Applivery proporciona dos APIs independientes para actualizar Publicaciones, cada una con una credencial de autenticación diferente.
Cómo elegir la API correcta
| Integrations API | Workspace API | |
|---|---|---|
| Diseñada para | Pipelines de CI/CD por app | Automatización a nivel de Workspace en varias Apps |
| Autenticación | App API Token (por app) | token de una cuenta de servicio (a nivel de Workspace) |
| Contexto de app | Implícito — el token ya está vinculado a una App | Explícito — se requieren organizationId y storeId en la ruta |
| Usuarios típicos | Scripts que actualizan el filtro de Build de una Publicación tras una nueva subida | Platform engineers que gestionan Publicaciones de varias Apps |
El acceso a las distintas APIs puede no estar disponible en tu plan actual. Consulta la disponibilidad en nuestra página de precios.
Integrations API
Usa este endpoint para actualizar Publicaciones dentro del ámbito de una sola app. La autenticación usa un App API Token, vinculado a la App específica.
Para crear un App API Token, consulta Autenticación de la API de Apps.
Endpoint
PUT https://api.applivery.io/v1/integrations/distributions/{publishedApplicationId}
Autenticación
Authorization: Bearer <your_app_token>
Formato de la petición
application/json
Parámetros de ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
publishedApplicationId |
String | Sí | El identificador único de la Publicación a actualizar. P. ej. 552ae3cfcb5abfc58d733b81. Devuelto por POST – Crear una Publicación y GET – Lista de Publicaciones. |
Parámetros
Identidad y visibilidad
| Parámetro | Tipo | Descripción |
|---|---|---|
slug |
String | El identificador amigable para URL de esta Publicación. Debe ser único en el Workspace. Cambiar el slug cambia la URL de la Publicación — los enlaces existentes dejarán de funcionar. |
visibility |
String | Visibilidad de la Publicación. Valores permitidos: active, inactive, unlisted. |
Seguridad y control de acceso
| Parámetro | Tipo | Descripción |
|---|---|---|
security |
String | Modo de autenticación. Valores permitidos: public, password, logged. |
password |
String | Obligatorio cuando security es password. La contraseña que deben introducir los usuarios para acceder a la Publicación. |
groups |
Array | Restringe el acceso a Grupos de usuarios específicos. Soporta lógica AND/OR. Cada array interno es una cláusula AND; cada elemento externo es una cláusula OR. P. ej. [["group1","group2"],["group3"]]. Solo aplica cuando security es logged. |
activateUserAudiences |
Boolean | Si se habilita el acceso basado en audiencias para esta Publicación. |
userAudienceMap |
Array | Array de asignaciones de audiencias para esta Publicación. |
userAudienceMap[].id |
String | ID de la audiencia a asignar. |
userAudienceMap[].notifyNewBuildsProcessed |
Boolean | Si los usuarios de esta audiencia deben recibir notificaciones cuando se procesa un nuevo Build. |
allowedCountries |
Array | Códigos de país ISO 3166-1 alpha-2 desde los que se permite el acceso. No puede combinarse con blockedCountries. |
blockedCountries |
Array | Códigos de país ISO 3166-1 alpha-2 desde los que se bloquea el acceso. No puede combinarse con allowedCountries. |
Filtro de selección de Build
| Parámetro | Tipo | Descripción |
|---|---|---|
filter.type |
String | Estrategia de selección de Build. Valores permitidos: last, build, Builds, gitBranch, gitTag, tag. |
filter.value |
String | Obligatorio para los tipos de filtro gitBranch, gitTag y tag. El nombre de rama, git tag o build tag a coincidir. |
filter.ios |
String | ID de la Build para iOS. Usado cuando filter.type es build. |
filter.android |
String | ID de la Build para Android. Usado cuando filter.type es build. |
filter.macos |
String | ID de la Build para macOS. Usado cuando filter.type es build. |
filter.windows |
String | ID de la Build para Windows. Usado cuando filter.type es build. |
filter.Builds |
Array | Array de objetos { buildPlatform, id }. Usado cuando filter.type es Builds. Soporta plataformas personalizadas: ios, macos, android, ps4, ps5, switch, xbox-one, xbox-series. |
Opciones de visualización de Builds
| Parámetro | Tipo | Descripción |
|---|---|---|
tags |
Array | Tags para categorizar esta Publicación. |
showHistory |
Boolean | Si los usuarios pueden explorar e instalar Builds anteriores. |
showDevInfo |
Boolean | Si se muestra información técnica de la Build (metadatos de git, detalles del certificado, tags) a los usuarios. |
expirationDate |
String | Timestamp ISO 8601 a partir del cual la Publicación deja de estar disponible para descarga. Útil para distribuciones con fecha límite, programas beta o campañas promocionales. P. ej. "2025-12-31T23:59:59Z". Establece en null para eliminar una fecha de caducidad existente. |
Términos legales
| Parámetro | Tipo | Descripción |
|---|---|---|
terms.active |
Boolean | Si los usuarios deben aceptar los términos legales antes de acceder a la Publicación. |
terms.text |
String | El texto de los términos legales a mostrar. Obligatorio cuando terms.active es true. |
Sobreescrituras de branding y configuración de app
| Parámetro | Tipo | Descripción |
|---|---|---|
configuration.application.name |
String | Sobreescribe el nombre de la App mostrado en la Publicación. |
configuration.application.description |
String | Sobreescribe la descripción de la App mostrada en la Publicación. |
configuration.branding.logo |
String | Sobreescribe el logo de la store para esta Publicación. |
configuration.branding.primaryColor |
String | Sobreescribe el color de branding primario (formato hex). P. ej. #FF5733. |
configuration.branding.buttonColor |
String | Sobreescribe el color del botón (formato hex). |
Ejemplo de petición
Actualiza una Publicación para apuntar a una rama de git específica y restringe el acceso a usuarios conectados de un grupo concreto:
curl 'https://api.applivery.io/v1/integrations/distributions/552ae3cfcb5abfc58d733b81' \
-X PUT \
-H 'Authorization: Bearer YOUR_APP_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"slug": "my-app-staging",
"security": "logged",
"visibility": "active",
"filter": {
"type": "gitBranch",
"value": "develop"
},
"groups": [["qa-team"]],
"showHistory": true,
"showDevInfo": true
}'
Respuestas
{
"status": true,
"data": {
"id": "string",
"updatedAt": "string",
"createdAt": "string",
"application": "string",
"applicationInfo": {
"id": "string",
"slug": "string",
"name": "string",
"picture": "string"
},
"slug": "string",
"filter": {
"type": "last",
"value": "string",
"ios": "string",
"android": "string",
"windows": "string",
"macos": "string",
"builds": [
{
"buildPlatform": "string",
"id": "string"
}
]
},
"security": "public",
"tags": ["string"],
"groups": [["string"]],
"visibility": "active",
"showHistory": true,
"showDevInfo": true,
"distributionUrl": "string",
"terms": {
"active": true,
"text": "string"
}
}
}
El slug ya está en uso.
{
"status": false,
"error": {
"code": 5024,
"message": "Slug already used"
}
}
{
"status": false,
"error": {
"code": 4002,
"message": "No auth token"
}
}
{
"status": false,
"error": {
"code": 3001,
"message": "Entity not found"
}
}
Workspace API
Usa este endpoint para actualizar Publicaciones a nivel de Workspace usando una sola credencial en varias Apps.
La autenticación usa un token de cuenta de servicio. Para crear un token de una cuenta de servicio, consulta Cuentas de servicio.
Endpoint
PUT https://api.applivery.io/v1/organizations/{organizationId}/stores/{storeId}/pubApps/{publishedApplicationId}
Parámetros de ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
organizationId |
String | Sí | El identificador único de tu organización en Applivery. |
storeId |
String | Sí | El identificador único de la store (proyecto de app). |
publishedApplicationId |
String | Sí | El identificador único de la Publicación a actualizar. |
Autenticación
Authorization: Bearer <your_service_account_token>
Ejemplo de petición
curl 'https://api.applivery.io/v1/organizations/ORG_ID/stores/STORE_ID/pubApps/PUB_APP_ID' \
-X PUT \
-H 'Authorization: Bearer YOUR_SERVICE_ACCOUNT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"slug": "my-app-release",
"security": "public",
"visibility": "active",
"filter": {
"type": "last"
}
}'
Los parámetros del cuerpo de la petición y el esquema de respuesta son idénticos a los de la Integrations API.
Gestión de usuarios con acceso OTP
El acceso OTP (One-Time Password) es una opción de seguridad a nivel de Publicación que te permite compartir Builds de forma segura con usuarios externos — freelancers, estudios de QA, contratistas — sin que necesiten tener una cuenta de Applivery ni pasar por tu SSO. Esto es especialmente útil para organizaciones con políticas de SSO estrictas que necesitan compartir Builds externamente sin relajar su configuración global de autenticación.
El acceso OTP se configura por Publicación y no afecta a ninguna otra Publicación ni a la configuración global de autenticación de la Store Enterprise.
La configuración OTP solo puede aplicarse en modo de edición — debe configurarse después de que la Publicación ya haya sido creada. Actívala estableciendo security en "private" y habilitando OTP en el panel de Applivery, o usando el endpoint API descrito a continuación para añadir usuarios a la lista de acceso.
Los usuarios OTP tienen ámbito sobre la Publicación específica a la que accedieron. No pueden explorar ni acceder a otras Publicaciones de la Store Enterprise.
Cómo funciona
Por parte del administrador:
Crea o actualiza una Publicación con el acceso OTP habilitado (
security: "private"+ lista de acceso OTP configurada).Añade las direcciones de email de los usuarios externos autorizados a la lista de acceso OTP, y configura el ciclo de vida y la configuración de uso único de cada usuario.
Por parte del usuario:
El usuario visita la URL de la Publicación e introduce su dirección de email.
Si su email está en la lista de acceso, recibe un OTP con tiempo limitado por email (válido 5–10 minutos).
Introduce el código para verificar su identidad y obtener acceso para descargar la App.
Si el uso único está habilitado, su email se elimina automáticamente de la lista de acceso tras la primera descarga correcta.
Añadir usuarios OTP mediante API
Los usuarios OTP se gestionan de forma independiente a la configuración de la Publicación en sí, a través de un endpoint dedicado. Este endpoint se llama después de crear o actualizar una Publicación para añadir usuarios a su lista de acceso OTP.
Endpoint
POST https://api.applivery.io/v1/organizations/{organizationSlug}/stores/{storeId}/otp-users
Autenticación
Authorization: Bearer <your_service_account_token>
Parámetros de ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
organizationSlug |
String | Sí | El slug amigable para URL de tu organización en Applivery (no el ID numérico). |
storeId |
String | Sí | El identificador único de la store a la que pertenece la Publicación. |
Parámetros del cuerpo
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
email |
String | Sí | La dirección de email del usuario externo a añadir a la lista de acceso OTP. |
temporal |
Boolean | No | Si el usuario debe eliminarse automáticamente tras 30 días. Por defecto: true. Establece en false para acceso persistente. |
singleUse |
Boolean | No | Si el acceso del usuario debe invalidarse tras la primera descarga correcta. Una vez descargado, el email se elimina de la lista de acceso y el usuario debe ser añadido de nuevo para recuperar el acceso. Por defecto: false. |
Ejemplo de petición
curl 'https://api.applivery.io/v1/organizations/my-org-slug/stores/STORE_ID/otp-users' \
-X POST \
-H 'Authorization: Bearer YOUR_SERVICE_ACCOUNT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"email": "[email protected]",
"temporal": true,
"singleUse": false
}'
Respuestas
{
"status": true,
"data": {
"id": "string",
"email": "[email protected]",
"temporal": true,
"singleUse": false,
"createdAt": "string"
}
}
El email ya existe en la lista de acceso OTP para esta store.
Token de cuenta de servicio inválido o ausente.
Slug de organización o ID de store no encontrados.
Referencia de opciones de configuración OTP
| Opción | Descripción |
|---|---|
| Lista de acceso | La lista de direcciones de email autorizadas para solicitar un OTP para esta Publicación. |
| Ciclo de vida del usuario | temporal: true — los usuarios OTP se eliminan automáticamente tras 30 días. temporal: false — los usuarios OTP se conservan indefinidamente. |
| Acceso de uso único | singleUse: true — el email se elimina de la lista de acceso tras la primera descarga correcta. El usuario no puede solicitar otro OTP a menos que un administrador le añada de nuevo. |
| Caducidad del OTP | Los OTPs tienen tiempo limitado y son de uso único — válidos 5–10 minutos y no pueden reutilizarse aunque estén dentro del período de validez. |
| Notificaciones de nuevos Builds | Cuando se publica un nuevo Build, los usuarios OTP de la lista de acceso pueden recibir un email de notificación con un OTP nuevo, lo que les permite descargar sin solicitar acceso de nuevo manualmente. |
Cuándo usar el acceso OTP
| Escenario | Enfoque recomendado |
|---|---|
| Compartir una Build con un freelancer externo para una revisión puntual | OTP + singleUse: true |
| Compartir una beta con un estudio de QA externo durante un período de prueba limitado | OTP + Publicación con caducidad |
| Distribuir a una lista de testers externos sin cuentas permanentes | OTP + temporal: true (limpieza automática a los 30 días) |
| Colaboradores externos a largo plazo que necesitan acceso continuado | Publicación privada + acceso basado en audiencias en lugar de OTP |
Para un control máximo sobre el acceso externo con límite de tiempo, combina OTP con una Publicación con caducidad. Esto garantiza que el acceso esté tanto verificado por identidad (a través de la lista OTP) como limitado en el tiempo (a través de la caducidad de la Publicación) — sin necesidad de limpieza manual una vez superada la fecha límite.