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

# Mensagem de Sticker

> Envie figurinhas e adesivos via WhatsApp e outros canais

# Mensagem de Sticker

O tipo `STICKER` permite enviar figurinhas (adesivos) para o destinatário. Figurinhas são imagens que aparecem em tamanho maior na conversa, sem legenda.

## Payload

```json theme={null}
{
  "channelId": "uuid-do-canal",
  "content": {
    "type": "STICKER",
    "to": {
      "type": "WHATSAPP",
      "number": "5511999999999"
    },
    "base64": "UklGRlYAAABXRUJQVlA4IE...",
    "filename": "figurinha.webp",
    "mimetype": "image/webp"
  }
}
```

## Campos

<ParamField body="content.type" type="string" required>
  Deve ser `"STICKER"`.
</ParamField>

<ParamField body="content.to" type="Address" required>
  Endereço do destinatário. Veja [formatos de endereço](/mensagens/visao-geral#enderecamento-address).
</ParamField>

<ParamField body="content.base64" type="string">
  Conteúdo da figurinha codificado em Base64. Use este campo **ou** um dos campos de URL (`downloadUrl` / `externalDownloadUrl`).
</ParamField>

<ParamField body="content.downloadUrl" type="string">
  URL pública para download da figurinha. Use este campo **ou** `base64`.
</ParamField>

<ParamField body="content.externalDownloadUrl" type="string">
  URL externa alternativa para download da figurinha. Assim como `downloadUrl`, dispensa o envio de `base64`.
</ParamField>

<ParamField body="content.mediaId" type="string">
  Identificador de uma mídia já existente no storage da plataforma. Quando informado, dispensa `base64` e as URLs de download.
</ParamField>

<ParamField body="content.downloadProviderUrl" type="string">
  URL de download no provedor de origem. Preenchido pela plataforma no recebimento; normalmente não é usado no envio.
</ParamField>

<ParamField body="content.filename" type="string" required>
  Nome do arquivo da figurinha. **Obrigatório** para mensagens de mídia -- a ausência retorna `400`.
</ParamField>

<ParamField body="content.mimetype" type="string">
  Tipo MIME da figurinha. Para WhatsApp, deve ser `image/webp`.
</ParamField>

<Warning>
  Para o WhatsApp, figurinhas **devem** estar no formato **WebP**. Imagens em outros formatos (PNG, JPEG) não serão exibidas corretamente como stickers. Além disso, as dimensões recomendadas são **512x512 pixels**.
</Warning>

## Requisitos para WhatsApp

| Requisito      | Valor                                   |
| -------------- | --------------------------------------- |
| Formato        | WebP (`.webp`)                          |
| Dimensões      | 512x512 pixels                          |
| Tamanho máximo | \~100 KB (estático), \~500 KB (animado) |
| MIME Type      | `image/webp`                            |
| Fundo          | Transparente recomendado                |

## Exemplos

### Sticker via Base64

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api-dev.messagefy.io/api/v1/message/SendMessage \
    -H "Content-Type: application/json" \
    -H "X-API-KEY: sua-api-key-aqui" \
    -d '{
      "channelId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "content": {
        "type": "STICKER",
        "to": {
          "type": "WHATSAPP",
          "number": "5511999999999"
        },
        "base64": "UklGRlYAAABXRUJQVlA4IEoAAADQAQCdASoI...",
        "filename": "saudacao.webp",
        "mimetype": "image/webp"
      }
    }'
  ```

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

  with open("saudacao.webp", "rb") as f:
      sticker_base64 = base64.b64encode(f.read()).decode("utf-8")

  response = requests.post(
      "https://api-dev.messagefy.io/api/v1/message/SendMessage",
      headers={
          "Content-Type": "application/json",
          "X-API-KEY": "sua-api-key-aqui"
      },
      json={
          "channelId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "content": {
              "type": "STICKER",
              "to": {
                  "type": "WHATSAPP",
                  "number": "5511999999999"
              },
              "base64": sticker_base64,
              "filename": "saudacao.webp",
              "mimetype": "image/webp"
          }
      }
  )
  print(response.json())
  ```

  ```javascript Node.js theme={null}
  import { readFileSync } from "fs";

  const stickerBase64 = readFileSync("saudacao.webp").toString("base64");

  const response = await fetch(
    "https://api-dev.messagefy.io/api/v1/message/SendMessage",
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "X-API-KEY": "sua-api-key-aqui",
      },
      body: JSON.stringify({
        channelId: "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        content: {
          type: "STICKER",
          to: {
            type: "WHATSAPP",
            number: "5511999999999",
          },
          base64: stickerBase64,
          filename: "saudacao.webp",
          mimetype: "image/webp",
        },
      }),
    }
  );
  const data = await response.json();
  console.log(data);
  ```
</CodeGroup>

### Sticker via URL

```json theme={null}
{
  "channelId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "content": {
    "type": "STICKER",
    "to": {
      "type": "WHATSAPP",
      "number": "5511999999999"
    },
    "downloadUrl": "https://cdn.suaempresa.com/stickers/obrigado.webp",
    "filename": "obrigado.webp",
    "mimetype": "image/webp"
  }
}
```

<Tip>
  Você pode converter imagens PNG/JPEG para WebP usando ferramentas como `cwebp` (do Google) ou bibliotecas como `sharp` (Node.js) e `Pillow` (Python). Exemplo com `cwebp`:
  `cwebp -resize 512 512 imagem.png -o sticker.webp`
</Tip>

## Resposta

```json theme={null}
{
  "packageId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
```

<Note>
  Stickers não suportam `caption` (legenda). Mesmo que o campo exista no payload, ele será ignorado pelo provedor WhatsApp para este tipo de mensagem.
</Note>

## Recebimento

Quando um contato envia uma figurinha para o seu canal, a plataforma entrega um webhook com `content.type` igual a `STICKER`. Veja [Recebendo Eventos](/recebendo-eventos) para os detalhes do envelope e da assinatura.

### content (STICKER recebido)

<ResponseField name="type" type="string">
  Sempre `"STICKER"`.
</ResponseField>

<ResponseField name="from" type="Address">
  Endereço de quem enviou a figurinha. Para WhatsApp: `type`, `jid`, `lid`, `number`, `name`.
</ResponseField>

<ResponseField name="to" type="Address">
  Endereço de destino (o seu canal ou o grupo/chat).
</ResponseField>

<ResponseField name="messageId" type="string">
  Identificador da mensagem no provedor.
</ResponseField>

<ResponseField name="mediaId" type="string">
  Identificador da mídia no storage da plataforma. Use-o para obter o binário da figurinha.
</ResponseField>

<ResponseField name="downloadUrl" type="string">
  URL para download da figurinha.
</ResponseField>

<ResponseField name="downloadProviderUrl" type="string">
  URL de download diretamente no provedor de origem.
</ResponseField>

<ResponseField name="externalDownloadUrl" type="string">
  URL externa para download da figurinha (ex.: link pré-assinado do storage).
</ResponseField>

<ResponseField name="filename" type="string">
  Nome do arquivo da figurinha.
</ResponseField>

<ResponseField name="mimetype" type="string">
  Tipo MIME da figurinha (normalmente `image/webp`).
</ResponseField>

<ResponseField name="isFromMe" type="boolean">
  `true` quando a figurinha foi enviada pelo próprio canal.
</ResponseField>

<ResponseField name="isGroupMessage" type="boolean">
  `true` quando a figurinha foi recebida em um grupo.
</ResponseField>

<ResponseField name="isForwarded" type="boolean">
  `true` quando a figurinha foi encaminhada.
</ResponseField>

<ResponseField name="isStatusMessage" type="boolean">
  `true` quando a figurinha faz parte de um status (story).
</ResponseField>

<ResponseField name="isHistoryMessage" type="boolean">
  `true` quando a figurinha veio da sincronização de histórico.
</ResponseField>

<ResponseField name="isBroadcast" type="boolean">
  `true` se a mensagem foi enviada para uma lista de transmissão (broadcast list).
</ResponseField>

<ResponseField name="isAnnounceGroup" type="boolean">
  `true` se a mensagem foi enviada para um grupo de avisos da comunidade.
</ResponseField>

<ResponseField name="isCommunityNotices" type="boolean">
  `true` se a mensagem foi enviada para o grupo de avisos da comunidade.
</ResponseField>

<ResponseField name="isNewsletter" type="boolean">
  `true` se a mensagem foi enviada para um canal/newsletter.
</ResponseField>

<ResponseField name="quotedMessage" type="object">
  Mensagem citada (quando a figurinha responde a outra mensagem). Contém `messageId`, `participant`, `body`, `type`, `thumbnail` e `isStatusReply`.
</ResponseField>

<ResponseField name="timestamp" type="string">
  Data e hora da mensagem no `content`.
</ResponseField>

<Warning>
  A plataforma **não** envia um campo `downloadHash`. O binário da figurinha é obtido pelos campos `mediaId`, `downloadUrl` ou `externalDownloadUrl`.
</Warning>

### Exemplo de webhook

```json theme={null}
{
  "packageId": "019a1234-5678-7abc-def0-123456789abc",
  "channelId": "019a1258-177c-7286-b060-9ee02a0800c7",
  "correlationId": null,
  "content": {
    "type": "STICKER",
    "mediaId": "b7f0d2c1-4a9e-4c3a-9f21-8d5e6a1b2c3d",
    "downloadUrl": "https://storage.messagefy.io/media/b7f0d2c1.webp",
    "externalDownloadUrl": "https://storage.messagefy.io/media/b7f0d2c1.webp?X-Amz-Signature=...",
    "filename": "sticker.webp",
    "mimetype": "image/webp",
    "from": {
      "type": "WHATSAPP",
      "jid": "5511999998888@s.whatsapp.net",
      "number": "5511999998888",
      "name": "Cliente"
    },
    "to": {
      "type": "WHATSAPP",
      "jid": "5511988887777@s.whatsapp.net",
      "number": "5511988887777",
      "name": "Minha Empresa"
    },
    "messageId": "3EB08209536937A66D8435",
    "isFromMe": false,
    "isGroupMessage": false,
    "isForwarded": false,
    "isStatusMessage": false,
    "isHistoryMessage": false,
    "quotedMessage": null,
    "timestamp": "2025-12-01T14:36:00+00:00"
  },
  "timestamp": "2025-12-01T14:36:00.100+00:00",
  "providerMetadata": null,
  "echoMessage": null
}
```
