# Confirmar finalización de la subida

Confirma un archivo de Cloud Storage ya subido.
- **Requisitos previos**: el registro del archivo debe pertenecer a tu equipo y el objeto debe estar ya en el almacenamiento: el servicio lee su ETag y su longitud para verificarlo. El tamaño debe ser mayor que 0 y menor de 2 GB.
- **Efecto**: cobra la cuota de almacenamiento del equipo de forma atómica, y después marca el registro como subido y guarda el tamaño real. Hasta que esto no tiene éxito el archivo **no aparece en `/cloudstorage/file/page`** y sigue ocupando una de las 100 plazas pendientes.
- **Si falla, el objeto subido se elimina.** Llamarlo demasiado pronto, por encima del límite de tamaño o sin espacio libre borra los bytes del almacenamiento y deja el registro sin confirmar. La recuperación es un `/cloudstorage/upload/init` nuevo y volver a subir, no reintentar esta llamada.
- **Finalización**: sincrónica e idempotente una vez que ha tenido éxito: una segunda llamada devuelve el mismo archivo sin volver a cobrar cuota.
- **Nota**: un registro que nunca se confirma se limpia automáticamente al cabo de 24 horas.

Errores de negocio documentados: `39001`, `39011`, `39014`, `39041`, `39046`, `39047`. 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/complete
Version: 2026-09-05

## Request fields (application/json):

  - `id` (string, required)
    ID del archivo de Cloud Storage devuelto por la API de URL prefirmada de subida.
    Example: 1800000000000001

## 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` (object, required)

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

  - `data.fileName` (string)
    Nombre del archivo (sin extensión).
    Example: example

  - `data.fileExt` (string)
    Extensión del archivo.
    Example: jpg

  - `data.fileSize` (string)
    Tamaño del archivo en bytes.
    Example: 204800

  - `data.fileType` (integer)
    Tipo de archivo: 0 = imagen, 1 = vídeo, 2 = aplicación, 3 = audio, 4 = documento, 5 = otro.
    Example: 0

  - `data.tagInfo` (array)
    Detalles de las etiquetas asociadas al archivo.

  - `data.tagInfo.id` (string)
    ID de la etiqueta.
    Example: 1800000000000101

  - `data.tagInfo.tagSource` (string)
    Origen de la etiqueta, por ejemplo ENV, PROXY.
    Example: ENV

  - `data.tagInfo.tagName` (string)
    Nombre de la etiqueta.
    Example: Invoice

  - `data.tagInfo.tagType` (string)
    Tipo de etiqueta: TAG o GROUP.
    Example: TAG

  - `data.tagInfo.tagIcon` (string)
    Icono de la etiqueta.

  - `data.createDate` (string)
    Fecha de subida.

  - `data.updateDate` (string)
    Fecha de actualización.

