Migração 100% grátis + 1 mês grátis com cupom MIGRAR1MES · novos clientes em planos até R$ 200/mês Migrar agora

Enviar mensagens

Como enviar texto, imagem, áudio/voz, vídeo, documento, localização, contato, botões, lista, enquete, reação e "digitando…" pela WhatsApp API da Rollin Host.

Todo envio é uma requisição POST para a sua URL base, com o header token (sua chave) e um corpo em JSON. Os exemplos usam curl, mas valem para qualquer linguagem, n8n ou Make — muda só a forma de montar a requisição.

Campos opcionais úteis (servem em quase todos os envios)

CampoTipoO que faz
delaynúmero (ms)espera antes de enviar, mostrando “digitando…” (ex.: 2000 = 2s). Deixa mais humano.
replyidtextoresponde citando outra mensagem (use o id dela)
readchatbooleanomarca a conversa como lida ao enviar
mentionstextonúmeros a mencionar, separados por vírgula

Texto

POST /send/text

A resposta traz, entre outros campos, o id e o messageid (id da mensagem no WhatsApp) e o status (Sent, Delivered, Read…). Guarde o id se quiser depois responder ou reagir a essa mensagem.


Imagem, vídeo, áudio, voz e documento

Tudo isso usa o mesmo endpointPOST /send/media — mudando o campo type:

typeO que éDica
imageimagemJPG/PNG; legenda no campo text
videovídeoMP4; legenda no campo text
documentdocumento (PDF, DOCX, XLSX…)use docName para o nome do arquivo
audioáudio normal (toca como música)MP3 ou OGG
pttmensagem de voz (aquela “gravadinha”)OGG/MP3
stickerfigurinhaimagem

O arquivo vai no campo file, que aceita uma URL pública ou o conteúdo em base64.


Botões, lista e enquete

Mensagens interativas usam um endpoint sóPOST /send/menu — mudando o campo type (button, list ou poll). As opções vão no array choices, num formato de texto que muda conforme o tipo.

Botões

Cada item de choices é um botão. Use | para separar o texto do “valor”:

  • Resposta rápida: "Suporte|suporte" (ao tocar, devolve o id suporte)
  • Abrir site: "Nosso site|https://exemplo.com"
  • Ligar: "Falar conosco|call:+5511999999999"
  • Copiar código: "Copiar cupom|copy:DESCONTO10"
curl -X POST https://rollin.uazapi.com/send/menu \
  -H "Content-Type: application/json" \
  -H "token: SEU_TOKEN" \
  -d '{
    "number": "5511999999999",
    "type": "button",
    "text": "Como podemos ajudar?",
    "choices": [
      "Suporte Técnico|suporte",
      "Fazer Pedido|pedido",
      "Nosso Site|https://exemplo.com"
    ],
    "footerText": "Escolha uma opção"
  }'

Lista

Em lista, choices tem seções e itens:

  • "[Nome da Seção]" começa uma seção
  • "texto|id|descrição" é um item (id e descrição são opcionais)
curl -X POST https://rollin.uazapi.com/send/menu \
  -H "Content-Type: application/json" \
  -H "token: SEU_TOKEN" \
  -d '{
    "number": "5511999999999",
    "type": "list",
    "text": "Catálogo de Produtos",
    "choices": [
      "[Eletrônicos]",
      "Smartphones|phones|Últimos lançamentos",
      "Notebooks|notes|Modelos 2024",
      "[Acessórios]",
      "Fones|fones|Bluetooth e com fio"
    ],
    "listButton": "Ver Catálogo",
    "footerText": "Preços sujeitos a alteração"
  }'

Enquete (poll)

Cada item de choices é uma opção de voto. selectableCount define quantas o usuário pode marcar (1 = escolha única):

curl -X POST https://rollin.uazapi.com/send/menu \
  -H "Content-Type: application/json" \
  -H "token: SEU_TOKEN" \
  -d '{
    "number": "5511999999999",
    "type": "poll",
    "text": "Qual horário você prefere?",
    "choices": ["Manhã (8h-12h)", "Tarde (13h-17h)", "Noite (18h-22h)"],
    "selectableCount": 1
  }'

Localização

POST /send/location

curl -X POST https://rollin.uazapi.com/send/location \
  -H "Content-Type: application/json" \
  -H "token: SEU_TOKEN" \
  -d '{
    "number": "5511999999999",
    "name": "Maracanã",
    "address": "Av. Pres. Castelo Branco - Rio de Janeiro - RJ",
    "latitude": -22.912982,
    "longitude": -43.230281
  }'

latitude e longitude são obrigatórios; name e address são opcionais.


Contato (cartão de visita)

POST /send/contact

curl -X POST https://rollin.uazapi.com/send/contact \
  -H "Content-Type: application/json" \
  -H "token: SEU_TOKEN" \
  -d '{
    "number": "5511999999999",
    "fullName": "João Silva",
    "phoneNumber": "5511988887777",
    "organization": "Empresa XYZ",
    "email": "joao@empresa.com"
  }'

Para enviar vários telefones no mesmo contato, separe por vírgula em phoneNumber: "5511988887777,5511955554444".


Reagir a uma mensagem (emoji)

POST /message/react — use o id da mensagem que você quer reagir (vem nos webhooks de mensagens recebidas):

curl -X POST https://rollin.uazapi.com/message/react \
  -H "Content-Type: application/json" \
  -H "token: SEU_TOKEN" \
  -d '{
    "number": "5511999999999@s.whatsapp.net",
    "id": "3EB0538DA65A59F6D8A251",
    "text": "👍"
  }'

Para remover a reação, mande text vazio (""). Só dá pra reagir a mensagens de até 7 dias.


Mostrar “digitando…” ou “gravando áudio…”

POST /message/presence — útil pra dar aquele tempo humano antes de responder:

curl -X POST https://rollin.uazapi.com/message/presence \
  -H "Content-Type: application/json" \
  -H "token: SEU_TOKEN" \
  -d '{
    "number": "5511999999999",
    "presence": "composing",
    "delay": 3000
  }'
  • composing = digitando · recording = gravando áudio · paused = parar
  • delay em milissegundos (máx. 5 minutos). É cancelado automaticamente quando você envia a mensagem.

Verificar se um número tem WhatsApp

POST /chat/check — antes de disparar, confira se o número existe no WhatsApp (evita erro e protege a reputação):

curl -X POST https://rollin.uazapi.com/chat/check \
  -H "Content-Type: application/json" \
  -H "token: SEU_TOKEN" \
  -d '{ "numbers": ["5511999999999", "5511888887777"] }'

A resposta é uma lista; cada item traz isInWhatsapp (true/false) e o jid correto pra usar nos envios.


Erros comuns

ErroO que significaSolução
401 / não autorizadotoken errado ou incompletocopie o token de novo no painel
400 “número inválido”formato do number erradouse 5511999999999, sem +/espaços
500 com erro 463WhatsApp restringiu o número temporariamentereduza o volume; aqueça o número; use conta Business
mídia não enviaURL não é pública / arquivo grandeuse URL acessível ou base64; reduza o tamanho

Próximos passos

Última atualização: