Descargar un archivo adjunto de una Build de forma programática sigue el mismo proceso de dos pasos que descargar el binario de una Build: generar un token de descarga de corta duración y luego usarlo para resolver la URL de descarga real. La diferencia clave es que debes incluir el parámetro de consulta fileId para especificar el adjunto que quieres descargar.
Este endpoint solo está disponible a través de la Workspace API y requiere un token de una cuenta de servicio o un token de sesión de usuario obtenido al iniciar sesión. La Integrations API (App API Token) no admite este endpoint.
Para crear un token de una cuenta de servicio, consulta Cuenta de servicio.
Resumen: flujo de descarga
Paso 1: Genera un token de descarga para el archivo adjunto
GET /v1/organizations/{organizationId}/apps/{applicationId}/builds/{buildId}/downloadToken?fileId={fileId}&type=auto
→ devuelve { token, expiresAt }
Paso 2: Resuelve la URL de descarga
GET https://download-api.applivery.io/v1/download/{token}
→ redirección HTTP 302 a la URL real del archivo
Antes de empezar: obtén el fileId
El fileId es el id de la entrada del adjunto en el array files de la Build, donde type es igual a attachment. Puedes obtenerlo del endpoint de Detalles de la Build.
En la respuesta, busca las entradas del array files con "type": "attachment":
{
"files": [
{
"id": "2SWkDbddHBNUaVImZINcZzVN",
"type": "attachment",
"file": {
"originalName": "screenshot.png",
"mimetype": "image/png",
"size": 538300,
"location": "https://storage.cloud.google.com/...",
"checksum": "b531c0eb..."
},
"createdAt": "2024-11-11T11:27:35.446Z",
"updatedAt": "2024-11-11T11:27:35.446Z"
}
]
}
El campo id (2SWkDbddHBNUaVImZINcZzVN en este ejemplo) es el fileId que necesitas para el paso 1.
Otras entradas del array files (con type: "package", type: "icon" o type: "original") son archivos internos de la Build, no adjuntos subidos por el usuario. Solo las entradas con type: "attachment" son archivos que adjuntaste mediante el endpoint POST – Archivos adjuntos de una Build.
Genera un token de corta duración y uso único que autoriza la descarga de un archivo adjunto concreto.
Endpoint
GET https://api.applivery.io/v1/organizations/{organizationId}/apps/{applicationId}/builds/{buildId}/downloadToken
Autenticación
Authorization: Bearer <your_service_account_token>
Parámetros de ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
organizationId |
String | Sí | El identificador único (o slug) 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 que contiene el adjunto. |
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
fileId |
String | Sí | El id de la entrada del adjunto en el array files de la Build (donde type es attachment). |
type |
String | Sí | Establece en auto para descargas de archivos adjuntos. |
Ejemplo de petición
curl 'https://api.applivery.io/v1/organizations/ORG_ID/apps/APP_ID/builds/BUILD_ID/downloadToken?fileId=FILE_ID&type=auto' \
-X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_SERVICE_ACCOUNT_TOKEN'
Respuestas
{
"status": true,
"data": {
"token": "string",
"expiresAt": "string"
}
}
Build aún no procesada. La Build existe pero aún no ha terminado de procesarse. Solo las Builds con status: processed pueden generar tokens de descarga.
{
"status": false,
"error": {
"code": 5014,
"message": "Build Not Processed"
}
}
{
"status": false,
"error": {
"code": 4002,
"message": "No auth token"
}
}
{
"status": false,
"error": {
"code": 3001,
"message": "Entity not found"
}
}
| Campo | Descripción |
|---|---|
token |
La cadena del token de descarga. Pásalo como parámetro de ruta en el paso 2 para resolver la URL de descarga. |
expiresAt |
Timestamp ISO 8601 que indica cuándo caduca el token. Los tokens son de corta duración — úsalos pronto tras generarlos. |
Usa el token obtenido en el paso 1 para obtener la URL de descarga real del archivo. La API responde con una redirección HTTP 302 Found al almacenamiento del archivo.
No se requiere autenticación. Este endpoint es público — el propio token actúa como credencial. Cualquier persona con el token puede descargar el archivo, así que trátalo como información sensible y no lo compartas más allá del destinatario previsto.
Endpoint
GET https://download-api.applivery.io/v1/download/{token}
Parámetros de ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
token |
String | Sí | El token de descarga devuelto en el paso 1. |
Ejemplo de petición
curl -L 'https://download-api.applivery.io/v1/download/YOUR_DOWNLOAD_TOKEN' \
-o downloaded_file.png
El flag -L indica a curl que siga la redirección 302 automáticamente. Sin él, recibirás la respuesta de redirección con la cabecera Location que contiene la URL real del archivo, pero el archivo no se descargará.
Respuestas
Redirección a la URL del archivo.
La respuesta no tiene cuerpo. La URL de descarga real está en la cabecera de respuesta Location. Sigue la redirección para descargar el archivo.
Token caducado. Los tokens de descarga son de corta duración. Si ha caducado, genera uno nuevo desde el paso 1.
{
"status": false,
"error": {
"code": 4005,
"message": "Token Expired"
}
}
{
"status": false,
"error": {
"code": 3001,
"message": "Entity not found"
}
}
Ejemplo completo: descargar un archivo adjunto
# Paso 1: Genera el token de descarga para el archivo adjunto
TOKEN=$(curl -s \
'https://api.applivery.io/v1/organizations/ORG_ID/apps/APP_ID/builds/BUILD_ID/downloadToken?fileId=FILE_ID&type=auto' \
-H 'Authorization: Bearer YOUR_SERVICE_ACCOUNT_TOKEN' \
| jq -r '.data.token')
# Paso 2: Descarga el archivo siguiendo la redirección
curl -L \
"https://download-api.applivery.io/v1/download/$TOKEN" \
-o downloaded_file