# Adjuntar Archivos a la Build

> Adjunta archivos complementarios (dSYMs, informes de pruebas, notas de versión) a Builds de Applivery usando la Integrations API o la Workspace API.

Source: https://docs.applivery.com/es/app-distribution/api/builds/attached-files/  •  Last updated: 2026-06-08

**Answers:** ¿Qué tipos de archivo puedo adjuntar a una Build de Applivery? · ¿Cuándo puedo adjuntar archivos a una Build en Applivery? · ¿Cuál es la diferencia entre la Integrations API y la Workspace API para adjuntar archivos? · ¿Cómo me autentico con la Integrations API para adjuntar archivos? · ¿Qué parámetros requiere la Integrations API para adjuntar un archivo? · ¿Cómo me autentico con la Workspace API para adjuntar archivos? · ¿Qué parámetros requiere la Workspace API para adjuntar un archivo? · ¿Qué información devuelve la API tras adjuntar un archivo correctamente?

---

**TL;DR:** Adjunta archivos adicionales a las builds de Applivery usando la API de Integraciones (por app) o la API de Workspace (multi-app), autenticándote con un App API Token o una Cuenta de servicio.

Adjunta uno o más archivos complementarios a una Build existente. Resulta útil para asociar recursos adicionales a una Build — como documentos de notas de versión, informes de pruebas, archivos dSYM para simbolización de crashes, archivos de mapping, capturas de pantalla o cualquier otro archivo que quieras tener disponible junto a la Build en Applivery.

Los archivos adjuntos son independientes del binario de la Build y no afectan a su instalación ni procesamiento. Se muestran en la vista de detalles de la Build en el panel de Applivery y son accesibles mediante la API.

:::info
La Build debe tener el estado `processed` antes de poder adjuntar archivos. Intentar adjuntar archivos a una Build que aún está en estado `pending` o `in_progress` devolverá un error `400`.
:::

Applivery proporciona dos APIs independientes para adjuntar archivos, 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 que adjuntan artefactos 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) |
| **URL base** | `https://upload.applivery.io` | `https://upload.applivery.io` |
| **Contexto de app** | Implícito — el token ya está vinculado a una App | Explícito — se requieren `organizationId` y `applicationId` en la ruta |
| **Usuarios típicos** | Scripts de CI que adjuntan informes de pruebas o dSYMs tras una Build | Platform engineers que gestionan artefactos de builds en 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 adjuntar archivos 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://upload.applivery.io/v1/integrations/builds/{buildId}/files
```

### Autenticación

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

### Formato de la petición

`multipart/form-data`

### Parámetros de ruta

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `buildId` | String | Sí | El identificador único de la Build al que adjuntar el archivo. P. ej. `552ae3cfcb5abfc58d733b81`. Devuelto por [POST – Subir una Build](https://docs.applivery.com/en/app-distribution/api/builds/upload-build/) y [GET – Lista de Builds](https://docs.applivery.com/en/app-distribution/api/builds/list-builds/). |

### Parámetros de cuerpo

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `file` | File | Sí | El archivo a adjuntar a la Build. Se acepta cualquier tipo de archivo. |
| `description` | String | No | Descripción legible del archivo adjunto. P. ej. `Archivo dSYM para simbolización`, `Informe QA`, `PDF de notas de versión`. |

### Ejemplo de petición

```bash
curl 'https://upload.applivery.io/v1/integrations/builds/552ae3cfcb5abfc58d733b81/files' \
  -X POST \
  -H 'Authorization: Bearer YOUR_APP_TOKEN' \
  -F 'file=@/path/to/report.zip' \
  -F 'description=Automated test report'
```

### Respuestas

**✓ 200 OK**

Archivo adjuntado correctamente. La respuesta devuelve el objeto completo de la Build actualizada, incluyendo el array `files` con el archivo recién adjuntado.

```json
{
  "status": true,
  "data": {
    "id": "string",
    "status": "processed",
    "tags": ["string"],
    "versionName": "string",
    "application": "string",
    "applicationInfo": {
      "id": "string",
      "name": "string",
      "slug": "string",
      "picture": "string"
    },
    "changelog": "string",
    "info": {},
    "size": 0,
    "processTime": 0,
    "queuedTime": 0,
    "versionCode": "string",
    "error": "string",
    "errorCode": "string",
    "os": "ios",
    "buildPlatform": "string",
    "deployer": {},
    "uploadedBy": {},
    "originalExtension": "string",
    "storageProvider": {},
    "files": [
      {
        "id": "string",
        "type": "string",
        "description": "string",
        "file": {
          "originalName": "string",
          "mimetype": "string",
          "size": 0,
          "bucket": "string",
          "key": "string",
          "location": "string",
          "region": "string",
          "storageProviderId": "string",
          "checksum": "string",
          "updatedAt": "string",
          "createdAt": "string"
        }
      }
    ],
    "hasEmmJson": true,
    "updatedAt": "string",
    "createdAt": "string"
  }
}
```

**✗ 400 Bad Request**

Build aún no procesada. Los archivos solo pueden adjuntarse a Builds con `status: processed`. Reintenta cuando la Build haya terminado de procesarse.

```json
{
  "status": false,
  "error": {
    "code": 5014,
    "message": "Build Not Processed"
  }
}
```

**✗ 401 Unauthorized**

```json
{
  "status": false,
  "error": {
    "code": 3002,
    "message": "Token Expired"
  }
}
```

**✗ 404 Not Found**

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

### Campos principales del array `files`

| Campo | Descripción |
|---|---|
| `id` | Identificador único del registro del archivo adjunto. |
| `description` | La descripción proporcionada en el momento de la subida. |
| `file.originalName` | El nombre original del archivo subido. |
| `file.mimetype` | El tipo MIME detectado del archivo. |
| `file.size` | Tamaño del archivo en bytes. |
| `file.location` | La URL de almacenamiento donde está alojado el archivo. |
| `file.checksum` | Checksum para verificación de integridad. |

---

## Workspace API

Usa este endpoint para adjuntar archivos a nivel de Workspace — por ejemplo, en pipelines de automatización que operan en varias Apps usando una sola credencial.

La autenticación usa un token de una **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://upload.applivery.io/v1/organizations/{organizationId}/apps/{applicationId}/builds/{buildId}/files
```

### Parámetros de ruta

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `organizationId` | String | Sí | El identificador único de tu organización en Applivery. |
| `applicationId` | String | Sí | El identificador único de la App a la que pertenece la Build. |
| `buildId` | String | Sí | El identificador único de la Build al que adjuntar el archivo. |

### Autenticación

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

### Ejemplo de petición

```bash
curl 'https://upload.applivery.io/v1/organizations/ORG_ID/apps/APP_ID/builds/BUILD_ID/files' \
  -X POST \
  -H 'Authorization: Bearer YOUR_SERVICE_ACCOUNT_TOKEN' \
  -F 'file=@/path/to/mapping.txt' \
  -F 'description=ProGuard mapping file'
```

El esquema de la respuesta es idéntico al de la Integrations API.

---

## Casos de uso habituales

| Tipo de archivo | Ejemplo de `description` |
|---|---|
| Archivo dSYM de iOS | `dSYM file for crash symbolication` |
| Archivo de mapping ProGuard de Android | `ProGuard mapping file` |
| Informe de pruebas automatizadas | `XCTest results — regression suite` |
| Documento de aprobación QA | `QA approval — v2.4.0` |
| PDF de notas de versión | `Release notes for stakeholders` |
| Conjunto de capturas de pantalla | `Enterprise Store screenshots — en-US` |
