FlashConnect Documentação Falar no WhatsApp

Códigos de erro da API do WhatsApp

Todo erro da API da FlashConnect é um JSON com erro (mensagem legível) e, quase sempre, codigo (estável, para o seu sistema tratar). Recusas da Meta voltam com HTTP 502, um código nosso e o codigo_meta original: 131047 vira JANELA_EXPIRADA, 131026 vira NUMERO_NAO_WHATSAPP. Abaixo estão todos os códigos, a causa e o que fazer.

Atualizado em

Qual é o formato de um erro da API?

HTTP/1.1 409 Conflict
content-type: application/json

{ "erro": "janela de 24h expirada — use um template aprovado", "codigo": "JANELA_EXPIRADA" }
  • erro é uma mensagem em português para pessoas; pode mudar de texto. codigo é estável: trate pelo código.
  • Erros de validação de campo (400) muitas vezes vêm só com erro, dizendo qual campo está errado.
  • Quando a Meta recusa, a resposta é 502 com o nosso codigo e o codigo_meta original.
  • A API nunca devolve detalhes internos (stack trace). Em 500, a resposta é só { "erro": "falha interna" }.

Erros de autenticação e permissão (401, 403)

HTTPCódigoCausaO que fazer
401NAO_AUTENTICADOSem header Authorization: Bearer …Envie a chave no header
401CHAVE_INVALIDAChave inexistente, digitada errada ou com prefixo diferente de ck_live_Confira a chave; se perdeu, gere outra
401CHAVE_REVOGADAA chave foi revogada no painelGere uma nova chave
401TOKEN_INVALIDOLogin do painel (JWT) inválido ou expiradoEntre de novo
401APENAS_USUARIOA operação exige usuário logado, não chave de APIFaça pelo painel
403ESCOPO_INSUFICIENTEA chave não tem o escopo da rota ou ferramenta MCPGere uma chave com o escopo (veja a tabela de escopos)
403PERMISSAO_INSUFICIENTEO papel do usuário não permite (ex.: atendente conectando o MCP por login ou criando chave)Peça ao dono ou a um admin
403SEM_TENANTUsuário logado sem empresa vinculadaConclua o cadastro ou aceite o convite da equipe

Erros de assinatura e cartão (402)

CódigoQuando apareceO que fazer
ASSINATURA_PAUSADAEnvio por chave de API com a assinatura pausada ou canceladaRegularize o pagamento no painel
ASSINATURA_PENDENTEEnvio por chave de API com a conta aguardando o cadastro do cartãoCadastre o cartão no painel
CARTAO_NECESSARIOEnvio pelo login, criação de chave, e as ferramentas MCP criar_template, criar_webhook e alterar_webhook (ao reativar ou trocar URL) sem cartão cadastradoCadastre o cartão em Configurações. Veja planos e preços
ASSINATURA_CANCELADAMesmas operações, com a assinatura canceladaCadastre um cartão para voltar a usar

Com a assinatura pausada, cancelada ou aguardando cartão, os webhooks de saída também ficam retidos na fila (sem perder eventos) até a regularização.

Erros de validação e recurso não encontrado (400, 404)

HTTPCódigoCausaO que fazer
400sem códigoJSON inválido ou campo fora do formato; erro diz qualCorrija o campo indicado
400ESCOPO_INVALIDOEscopo desconhecido ao criar chaveUse um dos 14 escopos
400CONVERSA_DE_OUTRO_CONTATOcontato e conversation_id enviados juntos não combinamEnvie só um, ou o par certo
400MIDIA_CAMINHO_INVALIDOmidia_caminho não é um arquivo da sua contaUse o caminho devolvido pela FlashConnect, ou midia_url
404NUMERO_NAO_ENCONTRADOphone_number_id não é de um número da contaConfira com listar_numeros no MCP
404CONVERSA_NAO_ENCONTRADAConversa inexistente ou de outra contaUse o conversation.id do evento
404CONTATO_NAO_ENCONTRADOTelefone ou contact_id sem contato na contaO contato precisa ter conversado ou recebido template antes
404MENSAGEM_NAO_ENCONTRADAmessage_id do media-download não existe na contaUse message.id do evento, não o wa_message_id
404MIDIA_NAO_ENCONTRADAArquivo de midia_caminho não existe maisSuba o arquivo de novo ou use midia_url
404AGENTE_NAO_CONFIGURADOA conta não tem agente para o número nem agente padrãoCrie um agente no painel ou com salvar_agente
404AGENTE_NAO_ENCONTRADO · EQUIPE_NAO_ENCONTRADA · USUARIO_NAO_ENCONTRADOId de agente, equipe ou atendente que não é da contaConfira os ids (o agent-config lista as equipes)
404AGENDA_NAO_ENCONTRADA · AGENDAMENTO_NAO_ENCONTRADO · PRODUTO_NAO_ENCONTRADOId de agenda, agendamento ou produto que não é da contaListe com GET /agenda?acao=agendas ou acao=agendamentos
404TAREFA_NAO_ENCONTRADA · COLUNA_NAO_ENCONTRADAId de tarefa ou coluna que não é da contaListe com GET /tarefas
404SEM_COLUNAO quadro de tarefas não tem coluna inicial ou de conclusãoCrie as colunas no quadro do painel
405sem códigoMétodo HTTP errado (ex.: GET em /whatsapp-send)Veja o método na referência da API

Erros de regra de negócio (409)

CódigoCausaO que fazer
JANELA_EXPIRADATexto, mídia ou interativa fora da janela de 24 h, ou sem conversa com o contatoEnvie um template aprovado
OPT_OUTO contato pediu para não receber; template bloqueadoNão envie. Para liberar, opt_out: false no contato-update, só se o contato pedir
NUMERO_NAO_REGISTRADOO número ainda não terminou o registro na Cloud APIConclua a conexão do número no painel
SEM_CREDENCIALA conexão com a Meta está sem token válidoReconecte o WhatsApp no painel
HORARIO_INDISPONIVELO horário não está entre os livres ou foi ocupado entre a consulta e a gravaçãoConsulte acao=horarios de novo e ofereça outro
AGENDA_INATIVAA agenda foi desativadaUse outra agenda ou reative no painel

Quais erros da Meta a API traduz (502)?

Quando a Cloud API da Meta recusa um envio, a resposta é 502 com um código nosso e o original em codigo_meta:

{ "erro": "Este número não está no WhatsApp ou bloqueou o remetente.", "codigo": "NUMERO_NAO_WHATSAPP", "codigo_meta": 131026 }
Códigocodigo_metaCausaO que fazer
JANELA_EXPIRADA131047Mais de 24 h desde a última mensagem do contatoEnvie template
NUMERO_NAO_WHATSAPP131026O destino não tem WhatsApp ou não pode receberMarque o contato; não tente de novo
LIMITE_QUALIDADE131049A Meta limitou o envio por qualidade ou spamPause envios ativos; não tente de novo agora
DESTINATARIO_NAO_PERMITIDO131030Número em modo de teste e destino fora da lista permitidaAdicione o destino na lista de teste da Meta ou conclua a conexão
RATE_LIMIT130429, 80007Limite de envio ou de chamadas da MetaTente de novo com espera crescente
TEMPLATE_INVALIDO132000, 132001, 132012Parâmetros diferentes do aprovado, template inexistente nesse idioma ou formato de parâmetro erradoRevise nome, idioma e parâmetros
PARAMETRO_INVALIDO100Payload recusado pela MetaRevise o corpo (ex.: objeto interativo)
TOKEN_INVALIDO190Token da conexão expirado ou revogadoReconecte o WhatsApp no painel
CONTA_BLOQUEADA368Conta bloqueada temporariamente pela Meta por violação de políticaVeja o aviso no Gerenciador do WhatsApp da Meta
META_RECUSOUoutrosQualquer outro erro da MetaLeia codigo_meta na tabela oficial de erros da Meta

Os códigos 133005 e 133010 (número já registrado) são tratados na conexão do número e não chegam às rotas da API. Falhas que a Meta informa depois do envio (mensagem aceita e não entregue) chegam pelo evento message.status com status: "failed" e o código da Meta em erro.codigo.

Erros do download de mídia (410, 503)

O POST /media-download separa falha definitiva de passageira:

HTTPCódigosCausaO que fazer
410SEM_MIDIA, MIDIA_INDISPONIVEL, META, STORAGE, SEM_NUMEROMensagem sem mídia, mídia expirada na Meta antes de ser salva, arquivo acima do limite de armazenamento, ou tentativas esgotadasNão tente de novo
503FALHA, META, DOWNLOAD, STORAGE, SEM_CREDENCIALFalha passageira ao baixar da Meta ou salvarTente de novo em alguns segundos

Erros do servidor MCP

No MCP, erro de negócio volta como resultado da ferramenta com isError: true e o mesmo { erro, codigo } das rotas REST, para a IA explicar ao usuário. Além dos códigos acima, as ferramentas de configuração usam:

CódigoCausa
PARAMETRO_INVALIDOArgumento fora do formato (id que não é uuid, filtro desconhecido, nada para alterar)
NUMERO_JA_TEM_AGENTEOutro agente já está ligado a esse número
ITEM_NAO_ENCONTRADO · WEBHOOK_NAO_ENCONTRADOProduto, conhecimento ou webhook que não é da conta
URL_INVALIDA · EVENTOS_INVALIDOSWebhook com URL que não é https:// pública, ou evento desconhecido
SEM_CONEXAOCriar template sem WhatsApp conectado
NOME_INVALIDO · IDIOMA_INVALIDO · CATEGORIA_INVALIDATemplate com nome fora de minúsculas/números/_, idioma ou categoria inválidos
COMPONENTES_INVALIDOS · BOTOES_INVALIDOSTemplate sem BODY, com texto acima do limite, HEADER não textual ou botões fora das regras
VARIAVEL_NAO_SEQUENCIAL · EXEMPLO_OBRIGATORIOVariáveis fora de {{1}}, {{2}}… em sequência, ou sem exemplo
TEMPLATE_DUPLICADOJá existe template com esse nome e idioma

Erros de protocolo vêm como erro JSON-RPC: -32700 (JSON inválido), -32600 (pedido inválido ou lote), -32601 (método não suportado), -32602 (ferramenta, recurso ou prompt inexistente, ou ferramenta não liberada no plano) e -32603 (falha interna). Sem credencial, o MCP responde 401 com o header WWW-Authenticate que inicia o login OAuth.

Erros na entrega de webhooks

Não são respostas da API, mas aparecem no painel (Integrações, lista de entregas) e em listar_webhooks no MCP:

  • HTTP 4xx/5xx: o seu servidor respondeu erro. Conta como falha e entra no retry.
  • HTTP 3xx: redirecionamento não é seguido: cadastre a URL final.
  • destino não permitido: URL sem https, ou que aponta para endereço interno ou privado.
  • TimeoutError: o seu servidor não respondeu em 10 segundos. Responda 200 antes de processar.

Detalhes de retry e assinatura em webhooks.

E os erros 500?

500 { "erro": "falha interna" } é falha do nosso lado. Pode tentar de novo com espera. Exceção: no envio, se a Meta já aceitou a mensagem e a gravação falhou, repetir mandaria a mensagem duas vezes; antes de reenviar, confira o histórico com GET /messages-list. Se persistir, fale com o suporte informando a rota e o horário.

Perguntas frequentes

O que significa JANELA_EXPIRADA na API do WhatsApp?

Que já se passaram mais de 24 horas desde a última mensagem do contato (ou que ele nunca escreveu). Nessa situação a Meta só aceita template aprovado. A FlashConnect barra o envio antes de chamar a Meta e responde 409; se a Meta recusar pelo mesmo motivo, a resposta é 502 com codigo_meta 131047. Envie um template.

Por que recebo 404 se o recurso existe?

Porque ele pertence a outra conta, ou a chave usada é de outra conta. A API responde 404 em vez de 403 para não revelar que o recurso existe. Confira se a chave e o id são da mesma empresa.

Qual a diferença entre CHAVE_INVALIDA e ESCOPO_INSUFICIENTE?

CHAVE_INVALIDA (401) quer dizer que a chave não existe ou foi digitada errada. ESCOPO_INSUFICIENTE (403) quer dizer que a chave é válida, mas não tem a permissão daquela rota ou ferramenta. Gere uma nova chave com o escopo necessário.

Quando vale a pena tentar de novo?

Em 500 (falha nossa), no 503 do media-download e no RATE_LIMIT da Meta, com espera crescente entre as tentativas. Não repita um 4xx sem mudar o pedido, nem os 502 NUMERO_NAO_WHATSAPP, LIMITE_QUALIDADE, TEMPLATE_INVALIDO ou CONTA_BLOQUEADA.

O que fazer com TOKEN_INVALIDO no envio?

Se veio com HTTP 502 e codigo_meta 190, o token da conexão com a Meta expirou ou foi revogado: o dono da conta precisa reconectar o WhatsApp no painel. Se veio com HTTP 401, é o login do painel (JWT) que expirou: entre de novo.

Quer usar a FlashConnect?

O acesso está sendo liberado por convite. Fale com a gente no WhatsApp.

Pedir convite no WhatsApp