# Crear Publicación

> Crea Publicaciones en la Store Enterprise de Applivery usando la Integrations API o la Workspace API. Controla la distribución y el acceso a la app.

Source: https://docs.applivery.com/es/app-distribution/api/publications/create-publication/  •  Last updated: 2026-06-08

**Answers:** ¿Qué es una publicación de Applivery? · ¿Cuáles son los parámetros obligatorios para crear una publicación en Applivery? · ¿Qué métodos de autenticación puedo usar para crear una publicación? · ¿Cuándo debo usar la Integrations API para crear una publicación? · ¿Cuáles son los valores permitidos para el parámetro security de una publicación? · ¿Cuáles son los valores permitidos para el parámetro visibility de una publicación? · ¿Para qué sirve el parámetro slug al crear una publicación? · ¿Qué estrategias de selección de Build están disponibles al crear una publicación?

---

**TL;DR:** Crea y gestiona publicaciones del App Store de Applivery de forma programática usando la API de Integraciones o la API de Workspace.

Crea una nueva Publicación en la Store Enterprise de Applivery. Una Publicación es la configuración de distribución que controla cómo y a quién se pone a disposición una Build específico (o conjunto de Builds) de una App — incluyendo su slug de URL, modo de seguridad, visibilidad, filtros de acceso y sobreescrituras de branding.

Para una visión general conceptual de las Publicaciones y su relación con las Builds, consulta [Cómo distribuir tus apps](https://docs.applivery.com/en/app-distribution/distribute/distribute-apps/).

Applivery proporciona dos APIs independientes para crear 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 publican automáticamente tras subir una Build | Platform engineers que gestionan Publicaciones de varias Apps |

:::warning
El acceso a las distintas APIs puede no estar disponible en tu plan actual. Consulta la disponibilidad en nuestra [página de precios](https://www.applivery.com/app-distribution-pricing/).
:::

* * *

## Integrations API

Usa este endpoint para crear 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](https://docs.applivery.com/en/app-distribution/api/app-api-token/).

### Endpoint

```
POST https://api.applivery.io/v1/integrations/distributions
```

### Autenticación

```
Authorization: Bearer <your_app_token>
```

### Formato de la petición

`application/json`

* * *

### Parámetros

Los parámetros están agrupados por área de configuración.

#### Parámetros obligatorios

| Parámetro | Tipo | Descripción |
|---|---|---|
| `slug` | String | El identificador amigable para URL de esta Publicación. Debe ser único en tu Workspace. Se usa para construir la URL de la Publicación: `yourworkspace.applivery.com/{slug}`. Solo se permiten letras minúsculas, números y guiones. |
| `security` | String | Modo de autenticación. Valores permitidos: `public`, `password`, `logged`. Consulta los modos de seguridad a continuación. |
| `visibility` | String | Visibilidad de la Publicación. Valores permitidos: `active`, `inactive`, `unlisted`. Consulta los modos de visibilidad a continuación. |
| `filter.type` | String | Estrategia de selección de Build. Valores permitidos: `last`, `build`, `Builds`, `gitBranch`, `gitTag`, `tag`. Consulta la configuración de filtros a continuación. |

#### Filtro de selección de Build

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `filter.type` | String | Sí | Estrategia de selección de Build. Consulta la configuración de filtros. |
| `filter.value` | String | Condicional | Obligatorio para los tipos de filtro `gitBranch`, `gitTag` y `tag`. El nombre de rama, git tag o build tag a coincidir. |
| `filter.ios` | String | Condicional | ID de la Build para iOS. Obligatorio cuando `filter.type` es `build` y la App tiene Builds de iOS. |
| `filter.android` | String | Condicional | ID de la Build para Android. Obligatorio cuando `filter.type` es `build` y la App tiene Builds de Android. |
| `filter.macos` | String | Condicional | ID de la Build para macOS. Obligatorio cuando `filter.type` es `build` y la App tiene Builds de macOS. |
| `filter.Builds` | Array | Condicional | Obligatorio cuando `filter.type` es `Builds`. Array de objetos con `buildPlatform` e `id`. |
| `filter.Builds[].buildPlatform` | String | Condicional | Identificador de plataforma. Valores admitidos: `ios`, `macos`, `android`, `ps4`, `ps5`, `switch`, `xbox-one`, `xbox-series`. |
| `filter.Builds[].id` | String | Condicional | ID de la Build para la plataforma especificada. |

#### Control de acceso

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `password` | String | Condicional | Obligatorio cuando `security` es `password`. La contraseña que deben introducir los usuarios para acceder a la Publicación. |
| `groups` | Array | No | 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. para permitir usuarios en group1 Y group2, O usuarios en group3: `[["group1","group2"],["group3"]]`. Solo aplica cuando `security` es `logged`. |
| `activateUserAudiences` | Boolean | No | Si se habilita el acceso basado en audiencias para esta Publicación. |
| `userAudienceMap` | Array | No | Array de asignaciones de audiencias. Cada elemento define una audiencia y su preferencia de notificación. |
| `userAudienceMap[].id` | String | Condicional | ID de la audiencia a asignar a esta Publicación. |
| `userAudienceMap[].notifyNewBuildsProcessed` | Boolean | No | Si los usuarios de esta audiencia deben recibir notificaciones cuando se procesa un nuevo Build. |
| `allowedCountries` | Array | No | Códigos de país ISO 3166-1 alpha-2 desde los que se **permite** el acceso. Si se configura, solo los usuarios de estos países pueden acceder a la Publicación. No puede combinarse con `blockedCountries`. |
| `blockedCountries` | Array | No | Códigos de país ISO 3166-1 alpha-2 desde los que se **bloquea** el acceso. No puede combinarse con `allowedCountries`. |

#### Opciones de visualización de Builds

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `tags` | Array | No | Tags para categorizar esta Publicación. P. ej. `["staging", "sprint-42"]`. |
| `showHistory` | Boolean | No | Si los usuarios pueden explorar e instalar Builds anteriores de la App. Por defecto: `false`. |
| `showDevInfo` | Boolean | No | Si se muestra información técnica de la Build (metadatos de git, detalles del certificado, tags) a los usuarios. Por defecto: `false`. |
| `expirationDate` | String | No | 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"`. Una vez caducada, la Publicación se comporta como si estuviera en `inactive`. |

#### Términos legales

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `terms.active` | Boolean | No | Si los usuarios deben aceptar los términos legales antes de acceder a la Publicación. |
| `terms.text` | String | Condicional | Obligatorio cuando `terms.active` es `true`. El texto de los términos legales a mostrar. |

#### Sobreescrituras de branding y configuración de app

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `configuration.application.name` | String | No | Sobreescribe el nombre de la App mostrado en la Publicación. |
| `configuration.application.description` | String | No | Sobreescribe la descripción de la App mostrada en la Publicación. |
| `configuration.branding.logo` | String | No | Sobreescribe el logo de la store para esta Publicación. |
| `configuration.branding.primaryColor` | String | No | Sobreescribe el color de branding primario (formato hex). P. ej. `#FF5733`. |
| `configuration.branding.buttonColor` | String | No | Sobreescribe el color del botón (formato hex). |

* * *

### Modos de seguridad

| Valor | Descripción |
|---|---|
| `public` | No se requiere autenticación. Cualquier persona con la URL de la Publicación puede acceder y descargar. |
| `password` | Se requiere una contraseña (especificada en el campo `password`) para acceder a la Publicación. |
| `logged` | Los usuarios deben estar conectados con una cuenta de Applivery o tu SSO de Workspace para acceder a la Publicación. |

### Modos de visibilidad

| Valor | Descripción |
|---|---|
| `active` | La Publicación está listada en la Store Enterprise y accesible para todos los usuarios autorizados. |
| `inactive` | La Publicación no es accesible para nadie. |
| `unlisted` | La Publicación no está listada en la Store Enterprise, pero es accesible para cualquier persona que tenga la URL directa. |

### Configuración de filtros

| `filter.type` | Descripción |
|---|---|
| `last` | Sirve siempre la Build procesado más recientemente. No se necesita `filter.value` adicional. |
| `build` | Sirve una Build específico, identificado por `filter.ios`, `filter.android` o `filter.macos`. |
| `Builds` | Sirve Builds específicos por plataforma, definidos en `filter.Builds`. Soporta plataformas personalizadas. |
| `gitBranch` | Sirve el último Build que coincide con la rama git especificada en `filter.value`. P. ej. `develop`. |
| `gitTag` | Sirve la Build que coincide con el git tag especificado en `filter.value`. P. ej. `v2.4.0`. |
| `tag` | Sirve las Builds que coinciden con la Build tag de Applivery especificado en `filter.value`. |

* * *

### Ejemplos de petición

Publicación mínima — pública, sirviendo siempre el último Build:

```bash
curl 'https://api.applivery.io/v1/integrations/distributions' \
  -X POST \
  -H 'Authorization: Bearer YOUR_APP_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "slug": "my-app-staging",
    "security": "public",
    "visibility": "active",
    "filter": {
      "type": "last"
    }
  }'
```

Publicación privada con control de acceso por grupos e historial de builds:

```bash
curl 'https://api.applivery.io/v1/integrations/distributions' \
  -X POST \
  -H 'Authorization: Bearer YOUR_APP_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "slug": "my-app-internal",
    "security": "logged",
    "visibility": "active",
    "filter": {
      "type": "gitBranch",
      "value": "develop"
    },
    "groups": [["qa-team", "developers"]],
    "showHistory": true,
    "showDevInfo": true,
    "tags": ["internal", "qa"]
  }'
```

* * *

### Respuestas

**✓ 200 OK**

:::info
El campo `distributionUrl` de la respuesta contiene la URL pública completa de la Publicación creada. Comparte esta URL con tus usuarios para darles acceso a la Publicación.
:::

```json
{
  "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"
    }
  }
}
```

**✗ 400 Bad Request**

El slug ya está en uso.

```json
{
  "status": false,
  "error": {
    "code": 5024,
    "message": "Slug already used"
  }
}
```

**✗ 401 Unauthorized**

```json
{
  "status": false,
  "error": {
    "code": 4002,
    "message": "No auth token"
  }
}
```

**✗ 404 Not Found**

```json
{
  "status": false,
  "error": {
    "code": 3001,
    "message": "Entity not found"
  }
}
```

* * *

## Workspace API

Usa este endpoint para crear Publicaciones a nivel de Workspace — por ejemplo, en flujos de trabajo de platform engineering que operan en varias Apps usando una sola credencial.

La autenticación usa un token de **cuenta de servicio**, con ámbito de Workspace y no vinculado a ninguna app individual.

Para crear un token de una cuenta de servicio, consulta [Cuentas de servicio](https://docs.applivery.com/en/platform/api/service-accounts/).

### Endpoint

```
POST https://api.applivery.io/v1/organizations/{organizationId}/stores/{storeId}/pubApps
```

### 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) en la que crear la Publicación. |

### Autenticación

```
Authorization: Bearer <your_service_account_token>
```

### Ejemplo de petición

```bash
curl 'https://api.applivery.io/v1/organizations/ORG_ID/stores/STORE_ID/pubApps' \
  -X POST \
  -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.
