Pular para o conteúdo

Erros

Todo erro da API tem o mesmo formato JSON, com um codigo fixo que o seu código pode testar. Use o codigo (ele não muda); a mensagem é só ajuda e pode mudar. detalhe diz o campo inválido, o escopo que faltou etc. Mande o requisicao_id (também no cabeçalho X-Request-Id) ao suporte.

Como tratar#

  • 4xx (menos 429): o pedido está errado. Corrija antes de repetir; a mesma chamada vai falhar igual.
  • 429: espere os segundos de Retry-After e repita (veja Limites de uso).
  • 5xx: repita com espera crescente. No envio de mensagem, com a mesma Idempotency-Key.
resposta 422
{
  "erro": {
    "codigo": "janela_fechada",
    "mensagem": "A janela de 24 horas desta conversa está fechada. Na API oficial do WhatsApp, só um modelo aprovado reabre a conversa.",
    "requisicao_id": "5d2f0c3e-8b1a-4c6e-9f7d-1a2b3c4d5e6f"
  }
}

Conta restrita pela Meta (conta_restrita)#

Enquanto a Meta restringe o número por spam e a trava de spam da organização está ligada (Configurações > API), o envio barrado volta 422 conta_restrita na hora, sem enviar nada. O erro traz os campos do objeto RestricaoMeta (os mesmos de caixas[].conexoes[].restricao_meta no GET /me): ate e desde (ISO-8601 UTC), ate_fonte (meta ou padrao), escopo (iniciadas = só modelos; tudo = nada sai), motivo (meta_131031, meta_368, meta_131048, account_restriction, account_disabled, outro), motivo_texto, caixa_id e retry_after_s. O cabeçalho Retry-After repete retry_after_s: mostre ate ao usuário e tente de novo depois desse tempo. Com a trava desligada, nada é barrado e a restrição só aparece no GET /me.

resposta 422 conta_restrita
{
  "erro": {
    "codigo": "conta_restrita",
    "mensagem": "A Meta restringiu esta conta por spam até 25/10/2026 às 11:00 (horário de Brasília): mensagens que abrem conversa (modelos) estão barradas; respostas dentro da janela de 24 h saem.",
    "ate": "2026-10-25T14:00:00Z",
    "desde": "2026-10-24T14:00:00Z",
    "ate_fonte": "padrao",
    "escopo": "iniciadas",
    "motivo": "meta_131031",
    "motivo_texto": "A Meta travou a conta do WhatsApp (131031).",
    "caixa_id": "0b6f5a52-3c1d-4e8f-9a7b-2c4d6e8f0a1b",
    "retry_after_s": 86400,
    "api_recusa": true,
    "requisicao_id": "5d2f0c3e-8b1a-4c6e-9f7d-1a2b3c4d5e6f"
  }
}

Status HTTP#

StatusQuando
400JSON inválido ou cabeçalho mal formado.
401Chave ausente, inválida, revogada, vencida ou fora dos IPs permitidos. A resposta é sempre a mesma, de propósito.
403Sem permissão: escopo que falta, plano sem API (ou sem o módulo), assinatura suspensa, chamada pelo navegador ou sem https.
404Não existe, ou é de outra organização (para a API, é a mesma coisa).
409Conflito: registro repetido, horário ocupado, Idempotency-Key reaproveitada com outro corpo.
413Corpo acima de 64 KB.
415Corpo que não é JSON.
422Dados inválidos ou regra de negócio (ex.: janela de 24 h fechada). Veja codigo e detalhe.
429Passou do limite. Espere os segundos de Retry-After.
500 / 503Erro do nosso lado ou relatório que demorou demais. Pode tentar de novo (no envio, com a mesma Idempotency-Key).

Perguntas frequentes#

O que mando ao suporte?#

O requisicao_id da resposta (também no cabeçalho X-Request-Id), a hora e a rota chamada. Nunca mande a chave.

Por que recebo 404 num id que existe?#

Porque ele é de outra organização ou foi apagado. A chave enxerga só a organização dela e, para a API, as duas coisas são iguais.

A mensagem do erro pode mudar?#

Pode. A mensagem é para pessoas e pode mudar de texto. O codigo não muda: é ele que o seu código deve testar.

Todos os códigos#

codigoO que significa
nao_autorizadoChave de API ausente, inválida, revogada, vencida ou fora dos IPs permitidos. Mande "Authorization: Bearer fcv2_live_...".
modulo_fora_do_planoA API não está liberada para esta organização: o plano não inclui a API ou a assinatura não está ativa (teste vencido, conta em modo leitura). Fale com um dono.
escopo_insuficienteEsta chave não tem permissão para esta operação.
limite_excedidoMuitas requisições. Espere o tempo de Retry-After e tente de novo.
muitas_falhasMuitas tentativas com chave errada deste endereço. Espere o tempo de Retry-After.
operacao_invalidaRota não encontrada.
recurso_inexistenteNão encontrado.
metodo_nao_permitidoMétodo não permitido nesta rota.
https_obrigatorioUse https.
origem_nao_permitidaA chave de API é secreta: chame a API do seu servidor, nunca do navegador.
corpo_grandeCorpo grande demais (máximo de 64 KB).
tipo_de_conteudoMande o corpo como JSON (Content-Type: application/json).
json_invalidoO corpo não é um JSON válido.
dados_invalidosDados inválidos. Confira o campo indicado em "detalhe".
idempotencia_invalidaIdempotency-Key deve ter de 1 a 200 caracteres visíveis, sem espaço.
idempotencia_obrigatoriaEnvie Idempotency-Key ou id_cliente para identificar a mensagem.
idempotencia_em_andamentoEste envio ainda está em andamento. Repita a consulta em instantes.
idempotencia_conflitoEsta Idempotency-Key já foi usada com outro corpo. Use uma chave nova para um pedido novo.
conflitoConflito com um registro que já existe.
erro_internoErro do nosso lado. Já ficou registrado; tente de novo em instantes.
indisponivelServiço indisponível no momento. Tente de novo em instantes.
cursor_invalidoCursor inválido. Use o valor de "proximo" da página anterior.
tipo_invalidotipo deve ser texto, imagem, video, audio, documento ou modelo.
texto_vazioMensagem de texto precisa de texto.
texto_longoTexto longo demais (máximo de 4096 caracteres).
midia_invalidaLink de mídia inválido: use https com um endereço público.
midia_indisponivelO arquivo desta mídia está indisponível.
midia_baixandoO download desta mídia está na fila. Tente novamente após Retry-After.
janela_fechadaA janela de 24 horas desta conversa está fechada. Na API oficial do WhatsApp, só um modelo aprovado reabre a conversa.
conta_restritaA Meta restringiu esta conta do WhatsApp por spam. Nada foi enviado: erro.ate diz até quando (erro.retry_after_s e o cabeçalho Retry-After, em segundos), erro.escopo o que está barrado e erro.motivo o código. Quem administra pode desligar a trava em Configurações > API.
caixa_obrigatoriaA organização tem mais de um WhatsApp conectado: informe caixa_id (veja GET /me).
caixa_sem_conexaoNenhum WhatsApp conectado nesta caixa.
canal_sem_iniciarEste canal não permite começar conversa por telefone. Use uma caixa de WhatsApp.
modelo_sem_api_oficialModelos só saem pela API oficial do WhatsApp. Conecte a API oficial nesta caixa.
modelo_inexistenteModelo não encontrado nesta caixa (veja GET /modelos).
canal_invalidocanal deve ser "auto", "oficial" ou "qr".
canal_so_whatsappcanal "oficial"/"qr" só vale em caixa de WhatsApp. Omita o campo (ou use "auto").
canal_oficial_indisponivelcanal "oficial": a API oficial do WhatsApp não está conectada nesta caixa. Nada foi enviado pelo QR.
canal_oficial_sem_grupocanal "oficial": a API oficial do WhatsApp não envia para grupo. Use "qr" ou omita o campo.
canal_oficial_tipocanal "oficial": a API oficial do WhatsApp não envia este tipo de mensagem. Nada foi enviado pelo QR.
canal_qr_indisponivelcanal "qr": o WhatsApp por QR não está conectado nesta caixa. Nada foi enviado pela API oficial.
canal_qr_sem_modelocanal "qr": modelos só saem pela API oficial do WhatsApp. Use "oficial" ou omita o campo.
canal_qr_tipocanal "qr": este tipo de mensagem só sai pela API oficial do WhatsApp. Nada foi enviado pela API oficial.
mensagem_inexistenteMensagem não encontrada.
conversa_inexistenteConversa não encontrada.
contato_inexistenteContato não encontrado.
caixa_inexistenteCaixa não encontrada (veja GET /me).
webhook_inexistenteWebhook não encontrado.
entrega_inexistenteEntrega não encontrada.
webhook_desativadoEste webhook está desativado. Reative com PATCH {"ativo": true}.
entrega_em_andamentoEsta entrega ainda está em andamento.
entrega_ja_despachadaEsta entrega já saiu uma vez e não é repetida (entrega única, sem duplicar). Só entregas que nunca saíram podem ser reenviadas.
url_invalidaURL inválida: use https://, porta 443 e um nome de domínio público.
destino_bloqueadoEsse endereço aponta para uma rede interna ou reservada. Use um endereço público.
dns_falhouNão conseguimos resolver esse domínio. Confira o endereço.
eventos_invalidosAlgum evento não existe. Veja a lista na documentação.
limite_de_webhooksLimite de 10 webhooks por organização.
nome_invalidoNome deve ter de 1 a 60 caracteres.
telefone_invalidoTelefone inválido. Mande com DDI e DDD.
telefone_repetidoJá existe um contato com esse telefone (com ou sem o 9).
graca_invalidahoras deve ser de 0 a 168.
negocio_inexistenteNegócio não encontrado.
etapa_inexistenteEtapa não encontrada (veja GET /funis).
funil_inexistenteFunil não encontrado.
nota_inexistenteNota não encontrada.
etapa_fora_do_funilEssa etapa não pertence ao funil informado.
etapa_ganha_e_perdidaUma etapa não pode ser de ganho e de perda ao mesmo tempo.
estado_invalidoestado deve ser aberto, ganho ou perdido.
valor_invalidoO valor não pode ser negativo.
limite_de_funisLimite de 20 funis por organização.
limite_de_etapasLimite de 30 etapas por funil.
limite_de_notasLimite de 500 notas por negócio.
periodo_longoEscolha um período de até 366 dias.
periodo_invalidoPeríodo inválido: de precisa ser antes de ate (AAAA-MM-DD).
granularidade_invalidagranularidade deve ser dia, semana ou mes.
caixa_invalidaCaixa não encontrada nesta organização (veja GET /me).
limite_relatoriosRelatórios têm limite próprio, mais baixo. Espere o tempo de Retry-After.
relatorio_demorouO relatório demorou demais. Escolha um período menor ou uma granularidade maior (semana ou mes).
assinatura_bloqueadaA assinatura da organização está suspensa. Fale com um dono.
horario_invalidoData e hora inválidas. Use o formato 2026-10-12T14:00:00-03:00 (sempre com o fuso), com o fim depois do início.
janela_grandeA janela de consulta passa do máximo (62 dias).
duracao_invalidaDuração inválida: de 5 a 720 minutos (compromisso de até 12 horas).
campo_longoUm dos textos passa do tamanho máximo. O campo vem em "detalhe".
campo_invalidoCampo obrigatório ou inválido. O campo vem em "detalhe".
link_invalidoO link precisa começar com https://.
contato_ambiguoInforme só um entre contato_id, conversa_id e telefone.
conversa_de_outro_contatoA conversa informada é de outro contato.
evento_canceladoO compromisso está cancelado e não pode ser alterado. Marque um novo.
evento_finalizadoO compromisso já foi encerrado (concluído ou faltou) e não pode ser alterado.
horario_ocupadoEsse horário já está ocupado nessa agenda.
horario_bloqueadoEsse horário está bloqueado (folga, almoço ou feriado).
fora_do_horarioEsse horário está fora do horário de trabalho da agenda.
antecedenciaEsse horário está mais perto do que a antecedência mínima da agenda.
compromisso_estado_invalidoestado só pode ser concluido ou faltou. Para confirmar ou cancelar, use as rotas próprias.
nada_para_atualizarMande ao menos um campo para atualizar.
fuso_invalidoFuso inválido. Use um nome IANA, como America/Sao_Paulo.
cor_invalidaCor inválida. Use slate, blue, violet, amber, emerald, green, rose, cyan ou orange.
lembretes_invalidosLembretes inválidos: até 5 itens, cada um só com antes_min (1 a 43200).
usuario_inexistenteusuario_id não é de uma pessoa desta equipe.
agenda_inexistenteAgenda não encontrada (ou inativa, para marcar compromisso).
evento_inexistenteCompromisso não encontrado.
bloqueio_inexistenteBloqueio não encontrado.
agenda_repetidaEssa pessoa já tem uma agenda.
limite_agendasLimite de 100 agendas por organização.
limite_bloqueiosLimite de 500 bloqueios por organização.
bloqueio_tipo_invalidotipo deve ser folga, almoco, feriado ou outro.
repeticao_invalidarepetir deve ser nunca, diario, semanal ou anual; repetir_ate só vale com repetição.
sem_permissaoA chave de API não pode fazer isso. Veja o motivo em "detalhe".
ja_e_membroEsse e-mail já é de alguém da equipe.
limite_de_acessosO plano chegou ao limite de acessos (pessoas + convites abertos). Remova alguém ou cancele um convite.
limite_de_convitesLimite de convites: 20 por dia por organização e 3 por dia para o mesmo e-mail. Tente amanhã.
membro_inexistentePessoa não encontrada nesta organização (veja GET /equipe/membros).
convite_inexistenteConvite não encontrado, já aceito ou vencido (veja GET /equipe/convites).
equipe_inexistenteEquipe não encontrada (veja GET /equipe/equipes).
equipe_repetidaJá existe uma equipe com esse nome.
papel_inexistentePapel de acesso não encontrado nesta organização.
modulos_do_papelCom papel de acesso, os módulos e a agenda vêm do papel. Mande papel_de_acesso_id: null para escolher à mão.
regra_inexistenteRegra de comentário não encontrada (veja GET /regras-comentario).
regra_conexao_invalidaconexao_id precisa ser uma conta do Instagram conectada por login (veja GET /instagram/contas).
regra_sem_palavrasInforme de 1 a 30 palavras, ou use qualquer_comentario: true.
regra_modo_invalidomodo deve ser contem ou igual.
regra_sem_acaoA regra precisa de uma resposta pública ou de uma resposta privada.
regra_texto_longoTexto longo demais: resposta pública até 2200 caracteres e resposta privada até 1000.
regra_variantes_demaisNo máximo 5 respostas_publicas.
regra_extra_sem_publicorespostas_publicas e ocultar_apos só valem com responder_publico preenchido.
regra_automacao_invalidaautomacao_id não é uma automação desta organização (veja GET /automacoes?gatilho=comentario).
regra_automacao_sem_privadaPara ligar uma automação, preencha resposta_privada.
regra_botao_longoCada botão tem no máximo 20 caracteres.
regra_botao_repetidoBotões repetidos. Cada botão deve ser diferente.
regra_botoes_demaisNo máximo 3 botões.
regra_botoes_invalidosbotoes deve ser uma lista de textos ou de objetos { titulo, url }.
regra_botao_url_invalidaA url do botão deve ser um link https:// válido, com até 2000 caracteres.
regra_botoes_sem_privadaPara ter botões, preencha resposta_privada.
recurso_desligadoEste recurso não está liberado para a sua organização.
seguir_invalidoAlgum campo de seguir é inválido. A mensagem diz qual: textos de 1 a 640 caracteres (os de "já segue" e "seguiu depois" podem ser vazios), botões de 1 a 20 e sem { (botão não troca variáveis), cada texto até 900 bytes (emoji e acento contam mais), sem caractere de controle ou invisível, max_tentativas de 1 a 50 e link do conteúdo em https.
limite_de_regrasLimite de 200 regras de comentário por organização. Apague alguma para criar outra.
modulo_invalidoMódulo inválido. Use conversas, contatos, automacoes, agentes, funil, agenda, followup ou relatorios.