> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wegly.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload de arquivos para lead ou negócio

> Cria um lote de arquivos pela API pública de integrações externas. - É obrigatório informar exatamente um contexto entre `crm_lead_id`, `crm_deal_id`, `lead_code` ou `deal_code`. - Os arquivos devem ser enviados em `file` ou `files`. - Os formatos suportados são `markdown (.md/.markdown)`, `pdf`, `docx`, `xls`, `xlsx` e `txt`. - O ator da operação é o usuário criador da chave. - O lote é salvo com `source = 1` (API) e reaproveita o fluxo interno de arquivos, inclusive timeline e URLs assinadas.




## OpenAPI

````yaml /openapi.json post /integrations/external/files/batches
openapi: 3.0.3
info:
  title: >-
    Integração Externa - Leads, Oportunidades, Tarefas, Arquivos, Propostas,
    Chats, Satisfação e Campos Personalizados
  version: 1.0.0
  description: >
    Documentação oficial da API externa da Wegly para campos personalizados,
    leads, oportunidades, tarefas, arquivos, propostas, chats e satisfação
    (`/integrations/external/custom-fields`, `/integrations/external/files`,
    `/integrations/external/leads`, `/integrations/external/deals`,
    `/integrations/external/tasks`, `/integrations/external/proposals`,
    `/integrations/external/chats` e `/integrations/external/satisfaction`).
    Todas as descrições estão em português e refletem as regras aplicadas pelo
    serviço.
servers:
  - url: https://api.wegly.com.br
    description: Ambiente de produção Wegly
security:
  - bearerAuth: []
tags:
  - name: Campos Personalizados
    description: >-
      Consulta dos campos personalizados disponíveis para uso nas integrações
      externas.
  - name: Arquivos
    description: >-
      Upload de arquivos públicos de integração vinculados diretamente a leads
      ou oportunidades.
  - name: Leads
    description: >-
      Operações de listagem, criação, consulta e atualização de leads via
      integração externa.
  - name: Oportunidades
    description: Operações de criação de oportunidades (deals) via integração externa.
  - name: Tarefas
    description: >-
      Operações de listagem, criação, consulta, atualização e remoção de tarefas
      vinculadas a leads, oportunidades, entregas, pessoas ou organizações.
  - name: Satisfação
    description: >-
      Geração de links públicos para formulários de satisfação via integração
      externa.
  - name: Propostas
    description: >-
      Operações de listagem, criação, consulta, atualização e remoção de
      propostas via integração externa.
  - name: Chats
    description: >-
      Operações principais de listagem, criação, consulta e resumo de não lidas
      de chats via integração externa.
paths:
  /integrations/external/files/batches:
    post:
      tags:
        - Arquivos
      summary: Upload de arquivos para lead ou negócio
      description: >
        Cria um lote de arquivos pela API pública de integrações externas. - É
        obrigatório informar exatamente um contexto entre `crm_lead_id`,
        `crm_deal_id`, `lead_code` ou `deal_code`. - Os arquivos devem ser
        enviados em `file` ou `files`. - Os formatos suportados são `markdown
        (.md/.markdown)`, `pdf`, `docx`, `xls`, `xlsx` e `txt`. - O ator da
        operação é o usuário criador da chave. - O lote é salvo com `source = 1`
        (API) e reaproveita o fluxo interno de arquivos, inclusive timeline e
        URLs assinadas.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ExternalFilesCreateBatchRequest'
      responses:
        '201':
          description: Lote criado com sucesso e já vinculado ao lead ou negócio informado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalFileBatchResponse'
        '400':
          description: >-
            Validação de dados falhou (contexto ausente/conflitante, tipo de
            arquivo inválido ou nenhum arquivo enviado).
        '401':
          description: Token de integração ausente ou inválido.
        '403':
          description: >-
            Permissão `crm/file.create` ausente ou domínio de origem não
            autorizado na chave.
        '404':
          description: >-
            Lead ou negócio não encontrado, ou fora do escopo de leitura do
            usuário criador da chave.
components:
  schemas:
    ExternalFilesCreateBatchRequest:
      type: object
      description: Payload multipart para criação de lote público de arquivos.
      properties:
        crm_lead_id:
          type: string
          format: uuid
          description: UUID do lead que receberá os arquivos.
        crm_deal_id:
          type: string
          format: uuid
          description: UUID do negócio que receberá os arquivos.
        lead_code:
          type: string
          description: Código numérico interno do lead que receberá os arquivos.
        deal_code:
          type: string
          description: Código numérico interno do negócio que receberá os arquivos.
        title:
          type: string
          maxLength: 150
          description: Título opcional do lote.
        note:
          type: string
          description: Observação opcional do lote.
        file:
          type: string
          format: binary
          description: Campo alternativo para envio de um único arquivo.
        files:
          type: array
          description: Campo principal para envio de um ou vários arquivos.
          items:
            type: string
            format: binary
    ExternalFileBatchResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
        source:
          type: integer
          enum:
            - 1
          description: Fonte do lote fixa em API.
        title:
          type: string
          nullable: true
        note:
          type: string
          nullable: true
        files_count:
          type: integer
        total_size:
          type: integer
        created_by:
          type: object
          allOf:
            - $ref: '#/components/schemas/ExternalFileBatchUserSummary'
          nullable: true
        crm_lead:
          type: object
          allOf:
            - $ref: '#/components/schemas/ExternalFileBatchTargetSummary'
          nullable: true
        crm_deal:
          type: object
          allOf:
            - $ref: '#/components/schemas/ExternalFileBatchTargetSummary'
          nullable: true
        crm_delivery:
          type: object
          nullable: true
          description: Sempre `null` nesta rota pública.
        files:
          type: array
          items:
            $ref: '#/components/schemas/ExternalFileSummary'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    ExternalFileBatchUserSummary:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        avatar:
          type: string
          nullable: true
    ExternalFileBatchTargetSummary:
      type: object
      properties:
        id:
          type: string
          format: uuid
        title:
          type: string
    ExternalFileSummary:
      type: object
      properties:
        id:
          type: string
          format: uuid
        created_by:
          type: object
          allOf:
            - $ref: '#/components/schemas/ExternalFileBatchUserSummary'
          nullable: true
        file_url:
          type: string
          nullable: true
        file_name:
          type: string
          nullable: true
        mime_type:
          type: string
          nullable: true
        size:
          type: integer
        created_at:
          type: string
          format: date-time
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Utilize o token de integração no header `Authorization: Bearer {token}`.
        O domínio de origem (Origin/Referer) deve respeitar `allowed_domain`,
        quando configurado na chave.

````