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

# Enviar Mídia com Upload

> Faz upload e envia um arquivo de mídia

## Visão Geral

Use este endpoint quando você tem o arquivo localmente e precisa fazer upload antes de enviar.

<Info>
  Este endpoint usa `multipart/form-data` em vez de JSON.
</Info>

## Form Fields

<ParamField body="channel_id" type="string" required>
  UUID do canal
</ParamField>

<ParamField body="remote_jid" type="string" required>
  JID do WhatsApp (ex: `5511999999999@s.whatsapp.net`)
</ParamField>

<ParamField body="file" type="file" required>
  Arquivo de mídia para upload
</ParamField>

<ParamField body="caption" type="string">
  Legenda da mídia (opcional)
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.leavo.ai/backend/messages/send-media" \
    -H "Authorization: Bearer sua_chave_aqui" \
    -F "channel_id=uuid-do-canal" \
    -F "remote_jid=5511999999999@s.whatsapp.net" \
    -F "file=@/caminho/para/imagem.jpg" \
    -F "caption=Veja esta imagem!"
  ```

  ```javascript JavaScript theme={null}
  const formData = new FormData();
  formData.append('channel_id', 'uuid-do-canal');
  formData.append('remote_jid', '5511999999999@s.whatsapp.net');
  formData.append('file', fileInput.files[0]);
  formData.append('caption', 'Veja esta imagem!');

  const response = await fetch('https://api.leavo.ai/backend/messages/send-media', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer sua_chave_aqui'
      // Não defina Content-Type - o browser define automaticamente com boundary
    },
    body: formData
  });

  const result = await response.json();
  ```

  ```python Python theme={null}
  import requests

  with open('/caminho/para/imagem.jpg', 'rb') as f:
      response = requests.post(
          'https://api.leavo.ai/backend/messages/send-media',
          headers={
              'Authorization': 'Bearer sua_chave_aqui'
          },
          files={
              'file': f
          },
          data={
              'channel_id': 'uuid-do-canal',
              'remote_jid': '5511999999999@s.whatsapp.net',
              'caption': 'Veja esta imagem!'
          }
      )
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "success": true,
    "message_id": "msg-uuid",
    "media_url": "https://storage.leavo.ai/uploads/abc123.jpg",
    "timestamp": "2024-01-15T10:30:00Z"
  }
  ```
</ResponseExample>

## Detecção Automática de Tipo

O tipo de mídia é detectado automaticamente baseado na extensão do arquivo:

| Extensões                                | Tipo Detectado |
| ---------------------------------------- | -------------- |
| `.jpg`, `.jpeg`, `.png`, `.gif`, `.webp` | `image`        |
| `.mp4`, `.3gp`, `.mov`                   | `video`        |
| `.mp3`, `.ogg`, `.m4a`, `.wav`           | `audio`        |
| `.pdf`, `.doc`, `.docx`, `.xls`, `.xlsx` | `document`     |

## Exemplo: Upload de Múltiplos Arquivos

```javascript theme={null}
async function sendMultipleFiles(channelId, remoteJid, files) {
  const results = [];

  for (const file of files) {
    const formData = new FormData();
    formData.append('channel_id', channelId);
    formData.append('remote_jid', remoteJid);
    formData.append('file', file);

    const response = await fetch(
      'https://api.leavo.ai/backend/messages/send-media',
      {
        method: 'POST',
        headers: {
          'Authorization': 'Bearer sua_chave_aqui'
        },
        body: formData
      }
    );

    const result = await response.json();
    results.push(result);

    // Pequeno delay entre envios para evitar rate limit
    await new Promise(r => setTimeout(r, 500));
  }

  return results;
}
```

## Limites

<CardGroup cols={2}>
  <Card title="Tamanho Máximo" icon="file">
    100 MB por arquivo
  </Card>

  <Card title="Timeout" icon="clock">
    60 segundos para upload
  </Card>

  <Card title="Formatos" icon="file-image">
    Apenas formatos suportados pelo WhatsApp
  </Card>

  <Card title="Rate Limit" icon="gauge">
    10 uploads por minuto
  </Card>
</CardGroup>
