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

# Gerar handle de arquivo

> Recebe a URL pública de um arquivo, faz o upload na Meta e retorna o `handle` dele, exigido em recursos como o cabeçalho de mídia de um template.

Alguns recursos da Meta não aceitam a URL de um arquivo: eles exigem um **`handle`**, que é o identificador do arquivo depois de enviado para os servidores dela. Gerar esse handle na Meta é um upload em várias etapas — abrir uma sessão, enviar os bytes e ler o identificador de volta.

Com a Datafy, basta enviar a **URL pública** do arquivo:

```json theme={null}
{ "handle": "4::aW1hZ2UvanBlZw==:ARb..." }
```

## Onde o handle é usado

O caso mais comum é o **cabeçalho de mídia de um template**. Ao [criar o template](https://developers.datafyapi.com.br/api-reference/whatsapp/templates/criar-template.md), o handle vai em `example.header_handle`:

```json theme={null}
{
  "type": "HEADER",
  "format": "IMAGE",
  "example": { "header_handle": ["4::aW1hZ2UvanBlZw==:ARb..."] }
}
```

O handle não se restringe a templates. Outros recursos da Meta utilizam o mesmo identificador: a **foto de perfil** do WhatsApp Business, por exemplo, é atualizada pelo campo `profile_picture_handle`. Este endpoint gera o valor em qualquer um desses casos.

> [!NOTE]
>
> O arquivo precisa estar em uma **URL pública**, acessível sem login. O tipo é lido do próprio arquivo, então respeite os formatos e tamanhos aceitos pela Meta em cada recurso.


## OpenAPI

````yaml api-reference/whatsapp/openapi.json POST /uploads
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:
  /uploads:
    post:
      tags:
        - Datafy
      summary: Gerar handle de arquivo
      description: >-
        Recebe a URL pública de um arquivo, faz o upload na Meta e retorna o
        `handle` dele, exigido em recursos como o cabeçalho de mídia de um
        template.
      operationId: gerarHandleDeArquivo
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - url
              properties:
                url:
                  type: string
                  description: URL pública do arquivo.
            example:
              url: https://exemplo.com/oferta.jpg
      responses:
        '200':
          description: Handle gerado.
          content:
            application/json:
              schema:
                type: object
                properties:
                  handle:
                    type: string
                    description: Identificador do arquivo na Meta.
              example:
                handle: 4::aW1hZ2UvanBlZw==:ARb...
        '400':
          description: URL ausente ou arquivo inacessível.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatafyError'
              example:
                statusCode: 400
                message: Campo "url" obrigatório
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '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.