POST /v1/messages/send-bulk-template envia um template aprovado do WhatsApp para uma lista de
contatos de uma vez. Por serem templates, os envios valem fora da janela de 24 horas — é o
caminho para iniciar conversa com quem não falou com você recentemente.
Escopo: messages:create.
O template precisa estar aprovado na Meta antes. Esta chamada dispara um template existente;
ela não cria nem submete templates para aprovação.
Campos da requisição
phone precisa do código do país, sem símbolos: 5511999999999. name não pode ser vazio.
Enviar para uma lista de contatos
cURL
multipart/form-data com o CSV ou XLSX no
campo file e os demais campos no formulário. O arquivo precisa das colunas name e phone:
Combinar arquivo com
components de parâmetros dinâmicos é um caso que vale testar com
poucos contatos antes de usar em produção — se os parâmetros não forem aplicados como você espera,
fale com o suporte.Parâmetros do template
Um template aprovado tem lacunas ({{1}}, {{2}}) e blocos: cabeçalho, corpo e botões. Você
preenche isso em components, e o número e o tipo de parâmetros precisam casar exatamente com o
template aprovado — caso contrário a Meta recusa o envio.
Tipos de parâmetro:
Exemplos por tipo de template
Cabeçalho com imagem
Cabeçalho com imagem
Template: cabeçalho de imagem +
Olá {{1}}! Confira nossa promoção de {{2}}.Botão com URL dinâmica
Botão com URL dinâmica
Template:
Seu pedido #{{1}} foi confirmado. + botão que aponta para .../track/{{1}}.O index do botão é uma string e começa em "0":Documento no cabeçalho
Documento no cabeçalho
Template: cabeçalho de documento +
Olá {{1}}, segue seu boleto.Valor monetário e data
Valor monetário e data
Template: A formatação final (
Sua fatura de {{1}} no valor de {{2}} vence em {{3}}.R$ 150,50, 31/01/2026) é feita pelo WhatsApp, conforme o idioma do
aparelho de quem recebe.A resposta é parcial
O processamento é síncrono e um contato com erro não interrompe os demais. A resposta traz o resultado consolidado:Limites que valem conhecer
- Tier da conta no WhatsApp — a Meta limita o número de conversas únicas iniciadas por dia (1.000, 10.000 ou 100.000, conforme o tier da sua conta). O disparo respeita esse teto: acima dele, os envios passam a falhar.
- Tamanho de mídia — imagem até 5 MB (JPG, PNG), vídeo até 16 MB (MP4, 3GPP), documento até 100 MB (PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, TXT), áudio até 16 MB.
- Links de mídia — precisam ser URLs HTTPS públicas, acessíveis pela Meta. URL atrás de login ou de rede interna falha.
- Tamanho do lote — envie em blocos de até 1.000 contatos por requisição.
Boas práticas
1
Teste com um contato só
Dispare primeiro para o seu próprio número e confira o resultado no aparelho — parâmetro fora
de ordem só aparece na mensagem final.
2
Normalize os telefones antes
Use o formato internacional sem símbolos (
5511999999999). Número inválido vira linha em
errors, não exceção.3
Guarde os conversationId
sentContacts devolve a conversa criada para cada contato — é por ela que você acompanha a
resposta, via webhooks ou GET /v1/messages/conversation/{id}.4
Trate os erros como fila de reprocessamento
Reenvie apenas as linhas de
errors, depois de corrigir o motivo.Próximos passos
Webhooks
Receba as respostas de quem foi impactado pelo disparo.
Referência da API
Contrato completo do endpoint e dos demais envios.