> ## 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.

# Subir adjunto

> 
**SUBIDA DE ADJUNTO PARA MENSAJES**

Sube un archivo y crea un registro de adjunto.
El adjunto puede usarse después para enviar mensajes con medios (imágenes, audios, videos, documentos).

---

### 📋 **Cómo usar**

1. Suba el archivo por este endpoint
2. Guarde el `_id` devuelto
3. Use ese `_id` en los endpoints de envío de mensajes (`send-image`, `send-audio`, `send-video`, `send-document`)

---

### 📁 **Tipos de archivo admitidos**

- **IMAGE**: imágenes (JPG, PNG, GIF, WEBP)
- **AUDIO**: audios (MP3, OGG, AAC, AMR)
- **VIDEO**: videos (MP4, 3GP)
- **DOCUMENT**: documentos (PDF, DOC, DOCX, XLS, XLSX, PPT, TXT)
- **STICKER**: stickers de WhatsApp (WEBP)

---

### 🔄 **Flujo completo de envío de medios**

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

2. POST /messages/send-image (con conversationId y attachment)
   → Envía la imagen al contacto
```

---

### 📝 **Ejemplo de uso**

**Solicitud:**
```http
POST /resource/upload-attachment
Content-Type: multipart/form-data

{
  "file": [archivo binario],
  "fileType": "IMAGE"
}
```

**Respuesta:**
```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"
}
```

**Luego, enviar la imagen:**
```json
POST /messages/send-image

{
  "conversationId": "65f...",
  "message": {
    "content": "¡Mire esta imagen!",
    "contentType": "IMAGE",
    "attachment": "65f1a2b3c4d5e6f7g8h9i0j1"
  }
}
```

---

### ⚠️ **Observaciones importantes**

1. **Tamaño máximo**: varía según el tipo de archivo y el canal (WhatsApp tiene sus propios límites)
2. **Formatos aceptados**: solo formatos admitidos por WhatsApp
3. **Almacenamiento**: los archivos se guardan en S3 de AWS
4. **URL pública**: la URL devuelta es pública y accesible directamente
5. **Reutilización**: el mismo adjunto puede usarse en varios mensajes
6. **Persistencia**: los adjuntos se guardan de forma permanente
    



## OpenAPI

````yaml /es/openapi.json post /v1/resource/upload-attachment
openapi: 3.0.0
info:
  title: Nuvia API - Empresa
  description: Documentación de la 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: Subir adjunto
      description: >-

        **SUBIDA DE ADJUNTO PARA MENSAJES**


        Sube un archivo y crea un registro de adjunto.

        El adjunto puede usarse después para enviar mensajes con medios
        (imágenes, audios, videos, documentos).


        ---


        ### 📋 **Cómo usar**


        1. Suba el archivo por este endpoint

        2. Guarde el `_id` devuelto

        3. Use ese `_id` en los endpoints de envío de mensajes (`send-image`,
        `send-audio`, `send-video`, `send-document`)


        ---


        ### 📁 **Tipos de archivo admitidos**


        - **IMAGE**: imágenes (JPG, PNG, GIF, WEBP)

        - **AUDIO**: audios (MP3, OGG, AAC, AMR)

        - **VIDEO**: videos (MP4, 3GP)

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

        - **STICKER**: stickers de WhatsApp (WEBP)


        ---


        ### 🔄 **Flujo completo de envío de medios**


        ```

        1. POST /resource/upload-attachment (con file y fileType)
           → Devuelve: { _id: "65f1a2b3c4d5...", external_url: "https://...", ... }

        2. POST /messages/send-image (con conversationId y attachment)
           → Envía la imagen al contacto
        ```


        ---


        ### 📝 **Ejemplo de uso**


        **Solicitud:**

        ```http

        POST /resource/upload-attachment

        Content-Type: multipart/form-data


        {
          "file": [archivo binario],
          "fileType": "IMAGE"
        }

        ```


        **Respuesta:**

        ```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"
        }

        ```


        **Luego, enviar la imagen:**

        ```json

        POST /messages/send-image


        {
          "conversationId": "65f...",
          "message": {
            "content": "¡Mire esta imagen!",
            "contentType": "IMAGE",
            "attachment": "65f1a2b3c4d5e6f7g8h9i0j1"
          }
        }

        ```


        ---


        ### ⚠️ **Observaciones importantes**


        1. **Tamaño máximo**: varía según el tipo de archivo y el canal
        (WhatsApp tiene sus propios límites)

        2. **Formatos aceptados**: solo formatos admitidos por WhatsApp

        3. **Almacenamiento**: los archivos se guardan en S3 de AWS

        4. **URL pública**: la URL devuelta es pública y accesible directamente

        5. **Reutilización**: el mismo adjunto puede usarse en varios mensajes

        6. **Persistencia**: los adjuntos se guardan de forma permanente
            
      operationId: ResourceController_uploadAttachment
      parameters:
        - name: x-company-id
          in: header
          description: >-
            Identificador de la empresa objetivo. Obligatorio solo para API keys
            globales (type=global). Se ignora para API keys de empresa y
            usuarios 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: Adjunto creado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttachmentResponseDto'
        '400':
          description: Datos inválidos
        '401':
          description: Token inválido o expirado
        '403':
          description: Sin permiso para acceder a este recurso
      security:
        - JWT-auth: []
components:
  schemas:
    AttachmentResponseDto:
      type: object
      properties:
        _id:
          type: string
          description: ID del adjunto.
        s3_key:
          type: string
          description: >-
            Clave de almacenamiento del objeto, usada para derivar la URL
            firmada.
        extension:
          type: string
          description: Extensión del archivo (jpg, png, pdf, etc.).
        external_url:
          type: string
          description: >-
            URL pública del archivo. Obsoleto: prefiera derivar una URL firmada
            a partir de `s3_key`.
        file_type:
          type: string
          enum:
            - IMAGE
            - AUDIO
            - VIDEO
            - DOCUMENT
            - STICKER
          description: 'Tipo de archivo: IMAGE, AUDIO, VIDEO, DOCUMENT o STICKER.'
        meta:
          type: object
          description: >-
            Metadatos adicionales del archivo: `mimeType`, `size`, `fileName`,
            entre otros.
          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 propietaria del adjunto.
        createdAt:
          description: Fecha de creación del adjunto.
        updatedAt:
          description: Fecha de actualización del adjunto.
      required:
        - extension
        - external_url
        - file_type
        - company
  securitySchemes:
    JWT-auth:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Token JWT de autenticação

````