Atualizado em 29/10/2026
O erro 132000 da API do WhatsApp significa que a quantidade de parâmetros enviada não bate com a quantidade de variáveis definida no template. O erro 132012 é o primo dele: a quantidade até está certa, mas o formato de algum valor não é o que o template espera. Os dois se resolvem do mesmo jeito: ler a estrutura do template aprovado e montar o payload a partir dela, não de memória.
Este guia mostra o que cada erro da família 132xxx quer dizer, exemplos de payload errado e corrigido, e uma função de validação para rodar antes de cada envio.
A família 132xxx: o que cada código significa
Os códigos 132xxx tratam de problemas com templates (modelos de mensagem). A tabela abaixo resume os que mais aparecem no envio, conforme a tabela oficial de códigos de erro da Meta:
| Código | O que a Meta diz | Causa mais comum na prática |
|---|---|---|
| 132000 | O número de parâmetros enviados não corresponde ao número de variáveis do template | Faltou ou sobrou um item em parameters, ou o componente certo (header, body, botão) ficou de fora |
| 132001 | O template não existe no idioma pedido ou não foi aprovado | Nome digitado errado, language.code diferente do aprovado (pt_BR x pt) ou template ainda em análise |
| 132005 | O texto traduzido ficou longo demais | Tradução do template incompleta ou longa demais no idioma enviado |
| 132007 | O conteúdo do template viola uma política do WhatsApp | Template reprovado ou conteúdo enviado que fere a política |
| 132012 | Os valores dos parâmetros estão no formato errado | Tipo de parâmetro diferente do definido (texto onde é imagem, por exemplo) ou nome de parâmetro que não existe |
| 132015 | Template pausado por baixa qualidade | Muitos bloqueios ou denúncias dos destinatários |
| 132016 | Template desativado de vez depois de pausas repetidas | É preciso criar outro template |
| 132018 | Erro de validação do template | Algum parâmetro com problema; o detalhe vem na resposta |
Os códigos 132015 e 132016 não têm a ver com o payload, e sim com a qualidade do template. Tratamos deles em template pausado ou desativado. Para a lista geral de códigos da API, veja erros da API do WhatsApp.
Como a resposta de erro chega
O erro pode chegar de dois jeitos. No caso mais comum, a chamada a POST /<PHONE_NUMBER_ID>/messages já volta com status HTTP de erro e um objeto error no corpo. O exemplo abaixo é ilustrativo; os campos são os do formato de erro da Graph API:
{
"error": {
"message": "(#132000) ...",
"type": "OAuthException",
"code": 132000,
"error_data": {
"messaging_product": "whatsapp",
"details": "<descrição do problema, com o componente e a contagem>"
},
"fbtrace_id": "A1b2C3d4E5f6"
}
}
O campo que resolve o problema é error_data.details. É ali que a Meta descreve o problema com mais detalhe. Registre sempre o corpo inteiro da resposta de erro no log, não só o código.
O texto exato da mensagem e do details varia; use o code para a lógica do seu sistema e o details para quem vai depurar. Em alguns casos a chamada é aceita e a falha aparece depois, no webhook de status, com status: "failed" e o mesmo código dentro de errors. O artigo sobre status de mensagem via webhook mostra esse formato.
Quer testar enquanto lê? Crie sua conta na Vectalk e envie a primeira mensagem pela API oficial. Criar conta grátis →
Erro 132000: parâmetros a mais ou a menos
Pegue um template de utilidade aprovado com este corpo:
{
"type": "BODY",
"text": "Olá {{1}}, seu pedido {{2}} saiu para entrega."
}
São duas variáveis no corpo. O payload abaixo manda só uma e recebe 132000:
{
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_em_rota",
"language": { "code": "pt_BR" },
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Maria" }
]
}
]
}
}
A versão correta tem um item para cada variável, na ordem em que elas aparecem no texto:
{
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_em_rota",
"language": { "code": "pt_BR" },
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Maria" },
{ "type": "text", "text": "#4821" }
]
}
]
}
}
As causas de 132000 que mais vemos:
- Template editado depois que o código foi escrito. Alguém acrescentou
{{3}}no texto, a Meta aprovou a nova versão e o sistema continua mandando dois valores. - Header ou botão esquecido. Se o cabeçalho tem variável (
Pedido {{1}}) ou o botão de URL tem sufixo dinâmico, cada um precisa do próprio componente no payload. O cabeçalho de texto aceita no máximo uma variável; o botão de URL também aceita uma, no fim da URL. - Valor vazio removido pelo código. Algumas rotinas filtram parâmetros com valor nulo antes de enviar. O resultado é um item a menos. Troque o vazio por um texto padrão em vez de remover o item.
- Template com o mesmo nome em outro idioma. As versões
pt_BReen_USde um template podem ter quantidades diferentes de variáveis. O payload precisa seguir a versão do idioma enviado.
Exemplo com cabeçalho e botão de URL dinâmico, todos os componentes presentes:
{
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_em_rota_rastreio",
"language": { "code": "pt_BR" },
"components": [
{
"type": "header",
"parameters": [ { "type": "text", "text": "#4821" } ]
},
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Maria" },
{ "type": "text", "text": "hoje até 18h" }
]
},
{
"type": "button",
"sub_type": "url",
"index": "0",
"parameters": [ { "type": "text", "text": "4821XYZ" } ]
}
]
}
}
No botão, index é a posição do botão no template, começando em zero. A Meta pede que valores com caracteres especiais no sufixo da URL sejam codificados (percent-encoding) antes do envio; caso contrário, a URL gerada pode falhar na validação.
Erro 132012: formato do parâmetro errado
O 132012 aparece quando o valor existe, mas não tem o formato que o template definiu. Dois casos respondem pela maioria das ocorrências.
Tipo de parâmetro diferente do componente
Se o cabeçalho do template é de imagem, o parâmetro do header precisa ser do tipo image. Mandar texto ali dá erro:
{
"type": "header",
"parameters": [ { "type": "text", "text": "https://exemplo.com/banner.jpg" } ]
}
Correto:
{
"type": "header",
"parameters": [
{ "type": "image", "image": { "link": "https://exemplo.com/banner.jpg" } }
]
}
A mesma regra vale para cabeçalhos de vídeo (video), documento (document) e localização (location).
Parâmetros nomeados x posicionais
Desde que a Meta passou a aceitar parâmetros nomeados ({{nome_cliente}} em vez de {{1}}), surgiu outra fonte de erro. O formato é definido na criação do template pelo campo parameter_format, que pode ser positional (padrão) ou named, segundo a visão geral de templates.
Num template nomeado, cada parâmetro enviado precisa do campo parameter_name igual ao nome da variável:
{
"type": "body",
"parameters": [
{ "type": "text", "parameter_name": "nome_cliente", "text": "Maria" },
{ "type": "text", "parameter_name": "numero_pedido", "text": "#4821" }
]
}
Os erros típicos aqui são mandar o template nomeado sem parameter_name, mandar um nome que não existe (nome em vez de nome_cliente) ou usar letras maiúsculas, já que a Meta exige nomes em minúsculas com sublinhado. Nos templates nomeados, a ordem dos itens não importa; nos posicionais, importa e muito.
Os vizinhos: 132001, 132005 e 132007
132001: template não existe ou não está aprovado nesse idioma
Confira três coisas, nesta ordem:
- O nome exato. Nomes de template usam só minúsculas, números e sublinhado.
Pedido_em_rotaepedido_em_rotasão templates diferentes. - O código do idioma. O
language.codeprecisa ser exatamente o que foi aprovado. Português do Brasil épt_BR;pt_PTé português de Portugal. - O status. Template
PENDING,REJECTEDou recém-criado ainda não pode ser enviado.
O motivo de reprovação e como corrigir estão em template reprovado no WhatsApp.
132005: texto traduzido longo demais
A tabela da Meta orienta conferir no WhatsApp Manager se o template foi traduzido e aponta para a página de qualidade de templates. Na prática, abra a versão do idioma que você está enviando e confira se ela existe, está completa e respeita o limite de 1.024 caracteres do corpo.
132007: conteúdo viola a política
Aqui não adianta mexer no payload. O texto do template ou o conteúdo enviado nas variáveis fere a Política de Mensagens Comerciais. Revise o template e o que está entrando nas variáveis. Usar uma variável para enfiar texto de marketing num template de utilidade é um caminho conhecido para problemas.
Validação antes do envio
A forma mais segura de evitar 132000 e 132012 é parar de montar o payload na mão. Busque a estrutura do template na API, guarde em cache e compare antes de enviar. A listagem de templates da conta de mensagens aceita filtro de campos, como mostra a documentação de gerenciamento de templates:
curl "https://graph.facebook.com/v26.0/<WABA_ID>/message_templates?fields=name,language,status,components&name=pedido_em_rota" \
-H "Authorization: Bearer <ACCESS_TOKEN>"
Com os componentes em mãos, uma função simples conta as variáveis de cada parte e compara com o que você vai mandar. Exemplo em JavaScript:
const VAR = /\{\{\s*([a-z0-9_]+)\s*\}\}/g;
function expectedParams(template) {
const exp = {};
for (const c of template.components) {
const type = c.type.toLowerCase();
if (type === "header" && c.format && c.format !== "TEXT") {
exp.header = { count: 1, media: c.format.toLowerCase() };
} else if ((type === "header" || type === "body") && c.text) {
const names = [...c.text.matchAll(VAR)].map((m) => m[1]);
if (names.length) exp[type] = { count: names.length, names };
} else if (type === "buttons") {
c.buttons.forEach((b, i) => {
if (b.type === "URL" && VAR.test(b.url)) exp[`button_${i}`] = { count: 1 };
VAR.lastIndex = 0;
});
}
}
return exp;
}
function validate(template, components) {
const exp = expectedParams(template);
const named = String(template.parameter_format).toLowerCase() === "named";
const errors = [];
for (const [key, rule] of Object.entries(exp)) {
const comp = components.find((c) =>
key.startsWith("button_")
? c.type === "button" && String(c.index) === key.split("_")[1]
: c.type === key
);
const params = comp?.parameters ?? [];
if (params.length !== rule.count) {
errors.push(`${key}: esperado ${rule.count}, enviado ${params.length}`);
}
if (rule.media && params[0]?.type !== rule.media) {
errors.push(`${key}: esperado parâmetro do tipo ${rule.media}`);
}
if (named && rule.names) {
for (const p of params) {
if (!rule.names.includes(p.parameter_name)) {
errors.push(`${key}: parameter_name inválido "${p.parameter_name}"`);
}
}
}
for (const p of params) {
if (p.type === "text" && !String(p.text ?? "").trim()) {
errors.push(`${key}: valor de texto vazio`);
}
}
}
return errors;
}
Se validate devolver qualquer erro, não envie: registre e avise quem cuida do template. Três hábitos completam a proteção:
- Atualize o cache quando o template muda. O webhook
message_template_status_updateavisa mudanças de status; use o evento para recarregar a estrutura. - Versione pelo nome. Em vez de editar um template em produção, crie
pedido_em_rota_v2e troque o código e o template juntos. - Teste com um número interno a cada template novo, antes de ligar o envio automático.
Para montar payloads com mídia, botões e carrossel do zero, veja como enviar template pela API com JSON completo. Para criar e editar templates por código, veja criar template via API.
Como fazer com a Vectalk
A Vectalk é um proxy da API oficial do WhatsApp: o payload de template é o mesmo da Meta, e os códigos de erro também. Você envia para POST https://apis.vectalk.com.br/api/messages e, com um token de instância, o phone_number_id é resolvido sozinho. Para validar antes do envio, a listagem GET https://apis.vectalk.com.br/api/templates?name=pedido_em_rota devolve os componentes do template, e a mesma função acima funciona sobre essa resposta.
No painel, a área de templates mostra o texto aprovado de cada modelo, e os logs mostram a resposta de erro completa de cada envio, o que ajuda a achar o details sem abrir o código. A referência está em docs.vectalk.com.br, e o cadastro em apps.vectalk.com.br/register.
Perguntas frequentes
Mensagem com erro 132000 é cobrada?
A Meta cobra por mensagem entregue. Uma mensagem recusada com 132000 não chega ao destinatário, então não gera cobrança de template.
O 132000 pode aparecer de repente, sem eu mudar o código?
Sim. O caso clássico é alguém editar o template no WhatsApp Manager e acrescentar uma variável. Depois que a nova versão é aprovada, o payload antigo passa a ter parâmetros de menos. Por isso vale buscar a estrutura do template pela API em vez de fixá-la no código.
Qual a diferença entre 132000 e 132012?
O 132000 é sobre quantidade: o número de parâmetros enviados é diferente do número de variáveis. O 132012 é sobre formato: a quantidade bate, mas algum valor não está no formato definido no template, como texto num cabeçalho de imagem ou um parameter_name que não existe.
Posso mandar um texto vazio numa variável?
Evite. Um valor vazio costuma ser removido por bibliotecas ou recusado pela API, e acaba virando 132000 ou outro erro de validação. Use um texto padrão, como “cliente”, quando o dado não existir.
O erro 132001 aparece mesmo com o template aprovado. Por quê?
Quase sempre é o idioma. O template pode estar aprovado em pt_BR e o payload pedir pt_PT ou en_US. Também vale conferir se o template pertence à mesma conta de mensagens do número que está enviando.
Fontes oficiais consultadas em 29/10/2026: Códigos de erro (Meta), Template fundamentals: parâmetros (Meta), Componentes de template (Meta), Gerenciamento de templates (Meta), Política de Mensagens Comerciais, Vectalk: enviar template, Vectalk: listar templates.
Teste a API oficial do WhatsApp hoje
Crie sua conta, gere o token e envie a primeira mensagem seguindo o guia da documentação. Mesmos payloads e webhooks da Cloud API da Meta.
