# Confirmar conclusão do upload

Confirma um arquivo do Cloud Storage já enviado.
- **Pré-requisitos**: o registro do arquivo precisa pertencer à sua equipe e o objeto precisa já estar no armazenamento — o serviço lê o ETag e o comprimento dele para verificar. O tamanho precisa ser maior que 0 e menor que 2 GB.
- **Efeito**: cobra a cota de armazenamento da equipe de forma atômica, depois marca o registro como enviado e guarda o tamanho real. Até isso ter sucesso o arquivo **não aparece em `/cloudstorage/file/page`** e continua ocupando uma das 100 vagas pendentes.
- **Em caso de falha o objeto enviado é excluído.** Chamar isso cedo demais, acima do limite de tamanho ou sem espaço livre remove os bytes do armazenamento e deixa o registro sem confirmação. A recuperação é um `/cloudstorage/upload/init` novo e reenviar, não repetir esta chamada.
- **Conclusão**: sincrônica e idempotente depois de ter tido sucesso — uma segunda chamada retorna o mesmo arquivo sem cobrar cota novamente.
- **Observação**: um registro que nunca é confirmado é limpo automaticamente após 24 horas.

Erros de negócio documentados: `39001`, `39011`, `39014`, `39041`, `39046`, `39047`. Consulte [Error Codes](../Getting%20Started/error-codes.md) para o significado de cada código. Qualquer operação também pode retornar os códigos comuns.

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

## Request fields (application/json):

  - `id` (string, required)
    ID do arquivo do Cloud Storage retornado pela API de URL pré-assinada de envio.
    Example: 1800000000000001

## Response 200 fields (application/json):

  - `code` (integer, required)
    Código de resultado. `0` significa sucesso; outros códigos indicam exceções.
    Example: 0

  - `msg` (string | null, required)
    Mensagem de erro.
    Example: null

  - `requestId` (string)
    ID da requisição da operação. Este campo pode estar presente quando a requisição passa pelo gateway da API.
    Example: 1d4f3ea968664593860b94b35d4ebf5e

  - `data` (object, required)

  - `data.id` (string)
    ID do arquivo do armazenamento em nuvem.
    Example: 1800000000001001

  - `data.fileName` (string)
    Nome do arquivo (sem extensão).
    Example: example

  - `data.fileExt` (string)
    Extensão do arquivo.
    Example: jpg

  - `data.fileSize` (string)
    Tamanho do arquivo em bytes.
    Example: 204800

  - `data.fileType` (integer)
    Tipo de arquivo: 0 = imagem, 1 = vídeo, 2 = aplicativo, 3 = áudio, 4 = documento, 5 = outro.
    Example: 0

  - `data.tagInfo` (array)
    Detalhes das etiquetas associadas ao arquivo.

  - `data.tagInfo.id` (string)
    ID da tag.
    Example: 1800000000000101

  - `data.tagInfo.tagSource` (string)
    Origem da etiqueta, por exemplo ENV, PROXY.
    Example: ENV

  - `data.tagInfo.tagName` (string)
    Nome da tag.
    Example: Invoice

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

  - `data.tagInfo.tagIcon` (string)
    Ícone da etiqueta.

  - `data.createDate` (string)
    Data de envio.

  - `data.updateDate` (string)
    Data de atualização.

