← Blog

·

Erros 132000 e 132012 na API do WhatsApp: parâmetros do template não batem

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ódigoO que a Meta dizCausa mais comum na prática
132000O número de parâmetros enviados não corresponde ao número de variáveis do templateFaltou ou sobrou um item em parameters, ou o componente certo (header, body, botão) ficou de fora
132001O template não existe no idioma pedido ou não foi aprovadoNome digitado errado, language.code diferente do aprovado (pt_BR x pt) ou template ainda em análise
132005O texto traduzido ficou longo demaisTradução do template incompleta ou longa demais no idioma enviado
132007O conteúdo do template viola uma política do WhatsAppTemplate reprovado ou conteúdo enviado que fere a política
132012Os valores dos parâmetros estão no formato erradoTipo de parâmetro diferente do definido (texto onde é imagem, por exemplo) ou nome de parâmetro que não existe
132015Template pausado por baixa qualidadeMuitos bloqueios ou denúncias dos destinatários
132016Template desativado de vez depois de pausas repetidasÉ preciso criar outro template
132018Erro de validação do templateAlgum 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_BR e en_US de 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:

  1. O nome exato. Nomes de template usam só minúsculas, números e sublinhado. Pedido_em_rota e pedido_em_rota são templates diferentes.
  2. O código do idioma. O language.code precisa ser exatamente o que foi aprovado. Português do Brasil é pt_BR; pt_PT é português de Portugal.
  3. O status. Template PENDING, REJECTED ou 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_update avisa 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_v2 e 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.