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

# Baixar o arquivo da mídia

> Retorna o arquivo da mídia recebida pelo webhook, em bytes, em vez de uma URL.

Este endpoint entrega o **arquivo em si**, em bytes, em vez de uma URL. Use quando o seu sistema vai guardar a mídia no seu próprio storage, anexar a um atendimento ou processar o conteúdo — sem precisar de um segundo download.

É a alternativa a [Baixar mídia recebida](https://developers.datafyapi.com.br/api-reference/whatsapp/datafy/baixar-midia.md), que devolve um link. As duas partem do mesmo `id` que chega no [webhook](https://developers.datafyapi.com.br/api-reference/whatsapp/webhooks/eventos/mensagens.md).

```bash theme={null}
curl https://cloud.datafyapi.com.br/media/1234567890123456/download \
  -H 'Authorization: Bearer sk_live_xxx' \
  -o arquivo.jpg
```

A resposta traz o `Content-Type` do arquivo e um `Content-Disposition` com o nome sugerido, como `1234567890123456.jpg`.

## Qual dos dois usar

| Endpoint | O que devolve | Quando usar |
| - | - | - |
| `GET /media/{id}` | URL válida por 30 dias | Exibir a mídia numa tela, enviar o link para outro sistema |
| `GET /media/{id}/download` | O arquivo, em bytes | Guardar no seu storage ou processar o conteúdo |

> [!NOTE]
>
> A [URL retornada pela Meta](https://developers.datafyapi.com.br/api-reference/whatsapp/recursos/midia/obter-url-da-midia.md) não pode ser acessada diretamente: exige o token da Meta no cabeçalho e expira em 5 minutos. O download é feito pela Datafy, com o token da sua conta.

## Chamadas repetidas

A primeira chamada busca o arquivo na Meta e o guarda. As seguintes entregam a cópia guardada, sem consumir o limite de requisições da Meta. O cabeçalho `x-datafy-cache` mostra o que aconteceu: `MISS` na primeira, `HIT` nas repetições.

> [!NOTE]
>
> A Meta mantém as mídias recebidas por até 30 dias. Depois disso, ou com um ID inválido, a resposta é **404**.


## OpenAPI

````yaml api-reference/whatsapp/openapi.json GET /media/{id}/download
openapi: 3.1.0
info:
  title: Datafy API — WhatsApp
  version: 1.0.0
  description: Espelho da Meta Cloud API e endpoints próprios da Datafy.
servers:
  - url: https://cloud.datafyapi.com.br
    description: Produção
security:
  - bearerAuth: []
tags:
  - name: Templates
  - name: Mídia
  - name: Datafy
paths:
  /media/{id}/download:
    get:
      tags:
        - Datafy
      summary: Baixar o arquivo da mídia
      description: >-
        Retorna o arquivo da mídia recebida pelo webhook, em bytes, em vez de
        uma URL.
      operationId: baixarArquivoMidia
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: ID da mídia recebido no webhook, como `image.id` ou `document.id`.
      responses:
        '200':
          description: O arquivo da mídia.
          headers:
            Content-Type:
              description: Tipo MIME do arquivo, como `image/jpeg`.
              schema:
                type: string
            Content-Disposition:
              description: >-
                Nome sugerido para o arquivo, como `attachment;
                filename="1234567890123456.jpg"`.
              schema:
                type: string
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '400':
          description: Falha ao baixar a mídia da Meta.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatafyError'
              example:
                statusCode: 400
                message: Falha ao baixar a mídia da Meta (403)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '404':
          description: Mídia não encontrada ou expirada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatafyError'
              example:
                statusCode: 404
                message: >-
                  Mídia não encontrada ou expirada (ID inválido ou mais de 30
                  dias)
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    DatafyError:
      type: object
      properties:
        statusCode:
          type: integer
        message:
          type: string
  responses:
    Unauthorized:
      description: Token ausente ou inválido.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DatafyError'
          example:
            statusCode: 401
            message: Token inválido ou não encontrado.
    PaymentRequired:
      description: Assinatura da Datafy inativa.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DatafyError'
          example:
            statusCode: 402
            message: >-
              Assinatura inativa. Ative sua assinatura no painel para voltar a
              usar a API.
    TooManyRequests:
      description: Limite de requisições excedido.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DatafyError'
          example:
            statusCode: 429
            message: Rate limit excedido (60 req/min). Tente novamente em 12s.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Token gerado no painel da Datafy ao criar o canal. Formato:
        `sk_live_xxx`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.