> ## Documentation Index
> Fetch the complete documentation index at: https://developers.nuvia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Fazer upload de attachment (anexo)

> 
**UPLOAD DE ANEXO PARA MENSAGENS**

Faz upload de um arquivo e cria um registro de attachment no banco de dados.
Este attachment pode ser usado posteriormente para enviar mensagens com mídia (imagens, áudios, vídeos, documentos).

---

### 📋 **Como Usar**

1. Faça o upload do arquivo usando este endpoint
2. Guarde o `_id` retornado
3. Use este `_id` nos endpoints de envio de mensagens (`send-image`, `send-audio`, `send-video`, `send-document`)

---

### 📁 **Tipos de Arquivo Suportados**

- **IMAGE**: Imagens (JPG, PNG, GIF, WEBP)
- **AUDIO**: Áudios (MP3, OGG, AAC, AMR)
- **VIDEO**: Vídeos (MP4, 3GP)
- **DOCUMENT**: Documentos (PDF, DOC, DOCX, XLS, XLSX, PPT, TXT)
- **STICKER**: Stickers do WhatsApp (WEBP)

---

### 🔄 **Fluxo Completo de Envio de Mídia**

```
1. POST /resource/upload-attachment (com file e fileType)
   → Retorna: { _id: "65f1a2b3c4d5...", external_url: "https://...", ... }

2. POST /messages/send-image (com conversationId e attachment)
   → Envia a imagem para o contato
```

---

### 📝 **Exemplo de Uso**

**Requisição:**
```http
POST /resource/upload-attachment
Content-Type: multipart/form-data

{
  "file": [arquivo binário],
  "fileType": "IMAGE"
}
```

**Resposta:**
```json
{
  "_id": "65f1a2b3c4d5e6f7g8h9i0j1",
  "extension": "png",
  "external_url": "https://s3.amazonaws.com/bucket/file.png",
  "file_type": "IMAGE",
  "meta": {
    "mimeType": "image/png",
    "size": 102400,
    "fileName": "foto.png",
    "resourceUrl": "https://s3.amazonaws.com/bucket/file.png"
  },
  "company": "65f...",
  "createdAt": "2024-01-15T10:30:00.000Z"
}
```

**Depois, enviar a imagem:**
```json
POST /messages/send-image

{
  "conversationId": "65f...",
  "message": {
    "content": "Confira esta imagem!",
    "contentType": "IMAGE",
    "attachment": "65f1a2b3c4d5e6f7g8h9i0j1"
  }
}
```

---

### ⚠️ **Observações Importantes**

1. **Tamanho Máximo**: Varia conforme o tipo de arquivo e canal (WhatsApp tem limites específicos)
2. **Formatos Aceitos**: Apenas formatos suportados pelo WhatsApp
3. **Armazenamento**: Arquivos são armazenados no S3 da AWS
4. **URL Pública**: A URL retornada é pública e acessível diretamente
5. **Reutilização**: O mesmo attachment pode ser usado em múltiplas mensagens
6. **Persistência**: Attachments ficam salvos permanentemente no banco de dados
    



## OpenAPI

````yaml https://api.nuvia.ai/api/docs/user-json post /v1/resource/upload-attachment
openapi: 3.0.0
info:
  title: Nuvia API - Empresa
  description: Documentação da API para empresas
  version: '1.0'
  contact: {}
servers:
  - url: https://api.nuvia.ai
security: []
tags:
  - name: messages
    x-group: Mensagens
  - name: contacts
    x-group: Contatos
  - name: campaigns
    x-group: Campanhas
  - name: tables
    x-group: Tabelas e Listas
  - name: agents
    x-group: Agentes
  - name: conversations
    x-group: Conversas
  - name: inboxes
    x-group: Caixas de Entrada
  - name: knowledge
    x-group: Base de Conhecimento
  - name: Webhooks
    x-group: Webhooks
  - name: campaign-enrollments
    x-group: Inscrições em Campanha
  - name: custom-fields
    x-group: Campos Customizados
  - name: resources
    x-group: Arquivos e Anexos
paths:
  /v1/resource/upload-attachment:
    post:
      tags:
        - resources
      summary: Fazer upload de attachment (anexo)
      description: >-

        **UPLOAD DE ANEXO PARA MENSAGENS**


        Faz upload de um arquivo e cria um registro de attachment no banco de
        dados.

        Este attachment pode ser usado posteriormente para enviar mensagens com
        mídia (imagens, áudios, vídeos, documentos).


        ---


        ### 📋 **Como Usar**


        1. Faça o upload do arquivo usando este endpoint

        2. Guarde o `_id` retornado

        3. Use este `_id` nos endpoints de envio de mensagens (`send-image`,
        `send-audio`, `send-video`, `send-document`)


        ---


        ### 📁 **Tipos de Arquivo Suportados**


        - **IMAGE**: Imagens (JPG, PNG, GIF, WEBP)

        - **AUDIO**: Áudios (MP3, OGG, AAC, AMR)

        - **VIDEO**: Vídeos (MP4, 3GP)

        - **DOCUMENT**: Documentos (PDF, DOC, DOCX, XLS, XLSX, PPT, TXT)

        - **STICKER**: Stickers do WhatsApp (WEBP)


        ---


        ### 🔄 **Fluxo Completo de Envio de Mídia**


        ```

        1. POST /resource/upload-attachment (com file e fileType)
           → Retorna: { _id: "65f1a2b3c4d5...", external_url: "https://...", ... }

        2. POST /messages/send-image (com conversationId e attachment)
           → Envia a imagem para o contato
        ```


        ---


        ### 📝 **Exemplo de Uso**


        **Requisição:**

        ```http

        POST /resource/upload-attachment

        Content-Type: multipart/form-data


        {
          "file": [arquivo binário],
          "fileType": "IMAGE"
        }

        ```


        **Resposta:**

        ```json

        {
          "_id": "65f1a2b3c4d5e6f7g8h9i0j1",
          "extension": "png",
          "external_url": "https://s3.amazonaws.com/bucket/file.png",
          "file_type": "IMAGE",
          "meta": {
            "mimeType": "image/png",
            "size": 102400,
            "fileName": "foto.png",
            "resourceUrl": "https://s3.amazonaws.com/bucket/file.png"
          },
          "company": "65f...",
          "createdAt": "2024-01-15T10:30:00.000Z"
        }

        ```


        **Depois, enviar a imagem:**

        ```json

        POST /messages/send-image


        {
          "conversationId": "65f...",
          "message": {
            "content": "Confira esta imagem!",
            "contentType": "IMAGE",
            "attachment": "65f1a2b3c4d5e6f7g8h9i0j1"
          }
        }

        ```


        ---


        ### ⚠️ **Observações Importantes**


        1. **Tamanho Máximo**: Varia conforme o tipo de arquivo e canal
        (WhatsApp tem limites específicos)

        2. **Formatos Aceitos**: Apenas formatos suportados pelo WhatsApp

        3. **Armazenamento**: Arquivos são armazenados no S3 da AWS

        4. **URL Pública**: A URL retornada é pública e acessível diretamente

        5. **Reutilização**: O mesmo attachment pode ser usado em múltiplas
        mensagens

        6. **Persistência**: Attachments ficam salvos permanentemente no banco
        de dados
            
      operationId: ResourceController_uploadAttachment
      parameters:
        - name: x-company-id
          in: header
          description: >-
            Identificador da empresa-alvo. Obrigatório apenas para API Keys
            globais (type=global). Ignorado para API Keys de empresa e usuários
            humanos.
          required: false
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
                - fileType
              properties:
                file:
                  type: string
                  format: binary
                  description: Arquivo para upload
                fileType:
                  type: string
                  enum:
                    - IMAGE
                    - AUDIO
                    - VIDEO
                    - DOCUMENT
                    - STICKER
                  description: Tipo do arquivo (IMAGE, AUDIO, VIDEO, DOCUMENT, STICKER)
      responses:
        '201':
          description: Attachment criado com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttachmentResponseDto'
        '400':
          description: Dados inválidos
        '401':
          description: Token inválido ou expirado
        '403':
          description: Sem permissão para acessar este recurso
      security:
        - JWT-auth: []
components:
  schemas:
    AttachmentResponseDto:
      type: object
      properties:
        _id:
          type: string
          description: ID do attachment
        s3_key:
          type: string
          description: Chave do objeto no S3 (fonte da verdade para URL assinada)
        extension:
          type: string
          description: Extensão do arquivo (jpg, png, pdf, etc.)
        external_url:
          type: string
          description: >-
            URL pública do arquivo (S3, CDN). Deprecated: preferir derivar a
            partir de s3_key via URL assinada.
        file_type:
          type: string
          enum:
            - IMAGE
            - AUDIO
            - VIDEO
            - DOCUMENT
            - STICKER
          description: 'Tipo do arquivo: IMAGE, AUDIO, VIDEO, DOCUMENT, STICKER'
        meta:
          type: object
          description: Metadados adicionais do arquivo (mimeType, size, fileName, etc.)
          properties:
            mimeType:
              description: Tipo MIME do arquivo
              type: string
            size:
              description: Tamanho do arquivo em bytes
              type: number
            fileName:
              description: Nome original do arquivo
              type: string
            resourceUrl:
              description: URL do recurso no S3
              type: string
        company:
          description: Empresa proprietária do attachment
        createdAt:
          description: Data de criação do attachment
        updatedAt:
          description: Data de atualização do attachment
      required:
        - extension
        - external_url
        - file_type
        - company
  securitySchemes:
    JWT-auth:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Token JWT de autenticação

````