# Solicitar por lotes URL de subida prefirmadas

Reserva registros de Cloud Storage y obtén URL de subida prefirmadas.
- **Requisitos previos**: el equipo debe tener un registro de Cloud Storage y no puede estar caducado. Cada nombre base de archivo se limita a 60 caracteres y debe ser único tanto dentro de la petición como frente a todos los archivos existentes del equipo — **la comparación es sobre el nombre sin su extensión**, así que `a.png` choca con un `a.mp4` existente.
- **Límites**: como máximo 100 subidas pueden estar sin confirmar a la vez en todo el equipo.
- **Efecto**: inserta un registro por nombre con estado de subida en curso y tamaño cero, y devuelve `{id, fileName, presignedUrl}` para cada uno.
- **Cuota**: **aquí no se comprueba el espacio.** Se cobra al confirmar la subida, así que init puede tener éxito y complete fallar de todos modos por falta de espacio.
- **Finalización**: sincrónica. **Cada URL prefirmada es válida durante una hora**; envía los bytes con `PUT` y después llama a `/cloudstorage/upload/complete`.

Errores de negocio documentados: `39001`, `39037`, `39044`, `39045`, `39047`, `39050`, `39051`. Consulte [Error Codes](../Getting%20Started/error-codes.md) para el significado de cada código. Cualquier operación puede devolver además los códigos comunes.

Endpoint: POST /api/cloudstorage/upload/init
Version: 2026-09-05

## Request fields (application/json):

  - `fileNames` (array, required)
    Lista de nombres de archivo que se subirán (con extensión), por ejemplo photo.jpg, video.mp4.
    Example: ["photo.jpg","video.mp4"]

## Response 200 fields (application/json):

  - `code` (integer, required)
    Código de resultado. `0` significa correcto; otros códigos indican excepciones.
    Example: 0

  - `msg` (string | null, required)
    Mensaje de error.
    Example: null

  - `requestId` (string)
    ID de la petición de la operación. Este campo puede estar presente cuando la petición pasa por la puerta de enlace de la API.
    Example: 1d4f3ea968664593860b94b35d4ebf5e

  - `data` (array, required)

  - `data.id` (string)
    ID del archivo de almacenamiento en la nube.
    Example: 1800000000000001

  - `data.fileName` (string)
    Nombre del archivo (con extensión).
    Example: photo.jpg

  - `data.presignedUrl` (string)
    URL prefirmada de S3 para subir. Usa HTTPS PUT para subir el contenido del archivo.
    Example: https://example.com/presigned-upload-url

