Pular para o conteúdo

Códigos de erro

Toda resposta de erro traz o código no campo error. Faça a sua lógica pelo código, que é estável; textos de apoio podem mudar. Alguns erros trazem campos extras, como required_scope, details ou o cabeçalho Retry-After.

{
"error": "insufficient_scope",
"required_scope": "messages:send"
}

Cada página de endpoint lista os erros daquela rota. Esta página reúne todos num lugar só.

400: requisição inválida

StatusCódigoO que significa e o que fazer
400invalid_jsonO corpo não é um JSON válido. Confira a sintaxe e o Content-Type: application/json.
400invalid_requestA requisição tem um caractere nulo (%00 na URL ou \u0000 no corpo), que nunca é válido. Remova-o do valor enviado.
400invalid_phone_numberO telefone não é válido. Envie com código do país, como +5511988887777.
400invalid_recipientNão foi possível encontrar o destinatário informado em to.
400contact_not_foundO contact_id informado em to não pertence à conta.
400contacts_not_enabledO envio por contact_id está indisponível no momento. Tente de novo mais tarde.
400groups_not_enabledO recurso de grupos está indisponível no momento. Tente de novo mais tarde.
400not_group_memberO número não participa mais do grupo informado.
400invalid_message_idO identificador da mensagem não está no formato msg_….
400invalid_contact_idO identificador do contato não está no formato ct_….
400invalid_group_idO identificador do grupo não está no formato grp_….
400invalid_event_idO identificador do evento não está no formato evt_….
400invalid_request_idO identificador da requisição não está no formato req_….
400invalid_organization_idO identificador da organização não está no formato org_….
400invalid_idempotency_keyO cabeçalho Idempotency-Key está vazio ou passa de 255 caracteres. Veja Envio sem duplicar.
400invalid_cursorO cursor de paginação é inválido. Use o valor devolvido pela página anterior, com os mesmos filtros.
400invalid_number_idO identificador do número começa com num_, mas não está no formato num_ seguido de 32 caracteres.
400invalid_aliasO alias não é válido. Ele começa com uma letra e tem até 50 caracteres.
400reserved_aliasO alias main, e qualquer alias que comece com num_, são reservados.
400no_changesA atualização não muda nada. Envie ao menos um campo com valor novo.
400not_pending_deletionO número não tem remoção agendada para cancelar.
400message_not_editableA mensagem não pode mais ser editada, ou o corpo não combina com ela. Só podem ser editados textos, eventos de calendário e a legenda de uma imagem, vídeo ou documento. Veja Editar e apagar.
400edit_window_expiredUm texto ou uma legenda só pode ser alterado até 15 minutos depois do envio. Envie uma mensagem nova. Veja Editar e apagar.
400message_not_calendarA mensagem não é um evento de calendário, então não tem respostas para listar. Veja Consultar respostas de um evento.
400message_not_deletableA mensagem não pode mais ser apagada.
400no_payment_methodA conta não tem forma de pagamento cadastrada. Cadastre uma no dashboard.

401: não autenticado

StatusCódigoO que significa e o que fazer
401not_authenticatedA chave está ausente, mal formatada, desconhecida, revogada ou expirada. Confira o cabeçalho Authorization: Bearer SUA_CHAVE e veja Chave de API. Repetir com a mesma chave não resolve. No servidor MCP, o mesmo código também responde a uma conexão de streaming aberta sem chave. Envie o cabeçalho Authorization na conexão ou, se o cliente tiver login, entre com a sua conta.

402: plano, cota ou pagamento

StatusCódigoO que significa e o que fazer
402feature_not_availableO plano atual não inclui o recurso (por exemplo, números extras ou envio para grupos). Veja Cota e uso.
402subscription_inactiveA assinatura não está ativa (details.status diz por quê). Regularize em Cobrança, no dashboard.
402contact_quota_exceededA cota de contatos do ciclo do número acabou. Ela reinicia na virada do ciclo.
402extra_numbers_limit_reachedA conta chegou ao máximo de números extras do plano (details.limit).
402payment_declinedO cartão recusou a cobrança. Nada foi criado, ou o cancelamento da exclusão agendada de um número, que continua agendada. Atualize a forma de pagamento.
402payment_requires_authenticationO cartão exige autenticação adicional e não pode ser cobrado automaticamente. Nada foi criado, ou o cancelamento da exclusão agendada de um número, que continua agendada.

403: sem permissão

A chave foi aceita, mas a operação não é permitida: falta um escopo na chave, ou a operação não vale para este número.

StatusCódigoO que significa e o que fazer
403insufficient_scopeA chave não tem o escopo da rota (required_scope diz qual).
403main_number_pair_not_allowedO número principal só é pareado pelo dashboard.
403main_number_update_not_allowedA operação vale só para números extras, não para main.
403no_device_linkO número extra ainda não foi pareado. Pareie antes de conectar.
403extra_number_not_pairedO número extra perdeu o pareamento. Pareie de novo.

404: não encontrado

StatusCódigoO que significa e o que fazer
404not_foundO recurso não existe na conta.
404number_not_foundO alias ou o id (num_…) da URL não corresponde a nenhum número da conta.
404no_main_numberO número principal ainda não foi conectado, então GET /v1/numbers/main não tem o que mostrar. Conecte-o pelo dashboard.
404message_not_foundA mensagem a que a requisição se refere (a que será citada, reagida, editada ou apagada) não foi encontrada neste número enquanto a requisição era processada. Leia a mensagem com GET e, se ela existir, tente de novo com o number_id do número dono dela.
404contact_not_foundO contato não existe neste número. Um contact_id de outro número responde assim. Veja Listar mensagens.
404group_not_foundO grupo não existe neste número. Um group_id de outro número responde assim. Veja Listar mensagens.
404organization_not_foundA organização não existe ou não é a da sua chave.
404request_not_foundO request_id informado não corresponde a uma requisição conhecida.
404contact_picture_unavailableA foto do contato não está disponível. Veja Foto de perfil.
404group_picture_unavailableA foto do grupo não está disponível. Veja Foto do grupo.

409: conflito com o estado atual

StatusCódigoO que significa e o que fazer
409number_not_connectedO número que precisa agir não está conectado ao WhatsApp. Reconecte e tente de novo.
409already_connectedO número já está conectado. Nada a fazer.
409already_connectingA conexão já está em andamento. Aguarde.
409already_disconnectedO número já está desconectado. Nada a fazer.
409already_paired_or_connectedO número já está pareado ou conectado.
409not_pairingNão há pareamento em andamento para cancelar (ou o celular acabou de concluí-lo).
409number_already_existsO alias ou o telefone já está cadastrado na conta.
409alias_already_existsOutro número da conta já usa esse alias.
409activation_already_in_progressOutro cadastro do mesmo número está sendo cobrado agora. Aguarde o resultado.

422: dados que não passam na validação

StatusCódigoO que significa e o que fazer
422validation_errorUm campo está ausente, mal formado ou fora do limite. details.errors diz qual.
422sender_not_foundO remetente informado não corresponde a nenhum número da conta.
422group_not_owned_by_numberO grupo pertence a outro número da conta, não ao alias da URL.
422message_not_replyableA mensagem citada ainda não chegou ao WhatsApp ou foi apagada.
422message_not_reactableA mensagem ainda não chegou ao WhatsApp ou foi apagada.
422no_main_number_configuredO número principal ainda não foi conectado. Conecte-o pelo dashboard.
422main_number_not_pairedO número principal perdeu o pareamento. Conecte-o de novo pelo dashboard.

429: limites de velocidade e cota de mensagens

Todos trazem o cabeçalho Retry-After quando há um tempo de espera conhecido. Espere esse tempo em vez de repetir na hora.

StatusCódigoO que significa e o que fazer
429rate_limit_exceededRequisições demais em pouco tempo (inclusive chamadas ao servidor MCP).
429number_creation_rate_limitedA conta cadastrou números extras mais rápido do que o permitido. Nada foi cobrado. Veja Inclusão.
429send_rate_spacingO envio veio antes do intervalo mínimo entre mensagens do número. Veja Limites.
429messages_quota_exceededA cota de mensagens do ciclo do número acabou. Ela reinicia na virada do ciclo.
429messages_per_minute_limit_exceededO número passou do limite de mensagens por minuto.
429recipients_per_day_limit_exceededO número passou do limite diário de mensagens para um mesmo destinatário.
429warmup_limit_exceededO número é novo e ainda está no período de aquecimento, com volume diário menor.
429duplicate_burst_blockedA mesma mensagem foi enviada a destinatários demais em sequência.
429reply_ratio_too_lowO número envia muito mais mensagens do que recebe respostas. Espere respostas antes de enviar mais.
429refresh_rate_limitedAtualizações de contato demais por minuto.
429pairing_rate_limitedPedidos de pareamento (código ou QR code) demais. Veja Pareamento pela API.
429too_many_streamsServidor MCP: conexões de streaming abertas demais para a chave ou o endereço de origem.

500, 502 e 503: falha do nosso lado

StatusCódigoO que significa e o que fazer
500internal_errorErro inesperado. Tente de novo; se persistir, fale com o suporte.
502integration_errorUm serviço externo de que a operação depende (por exemplo, o processador de pagamento ao cadastrar um número extra) respondeu com erro. Tente de novo em instantes; se persistir, fale com o suporte.
503payment_gateway_unavailableNão foi possível confirmar a cobrança a tempo. Nada foi criado, ou o cancelamento da exclusão agendada de um número, que continua agendada. Tente de novo.
503service_unavailableUm serviço de apoio da API está indisponível no momento, não foi possível verificar a chave de API agora ou não foi possível consultar o plano da conta. Nada foi feito e a chave não tem problema: tente de novo em instantes.

Falhas de mensagem

Uma mensagem aceita com 202 pode falhar depois, no WhatsApp. Nesse caso o status fica failed e o objeto error traz code, message e, quando houver orientação, hint. O mesmo objeto chega nos eventos message.*.failed. Veja Status da mensagem.

CódigoO que significa e o que fazer
number_not_connectedO número não estava conectado no momento do envio. Reconecte e envie de novo.
message_timeoutO WhatsApp não confirmou o envio a tempo. A mensagem pode ter saído: confira antes de reenviar.
whatsapp_send_failedO WhatsApp recusou a mensagem. Veja error.message.
media_fetch_failedNão foi possível baixar a mídia da URL. Ela precisa ser pública e acessível.
media_too_largeA mídia passa do tamanho máximo do tipo. Veja Envio de mídia.
unsupported_media_formatO formato do arquivo não é aceito para esse tipo de mídia (inclusive um arquivo que não é mídia, ou uma figurinha que não é WebP de 512×512). O hint diz o formato esperado.
invalid_cta_url_payloadA mensagem com botão de link chegou sem o endereço do botão. Inclua a URL e envie de novo.
invalid_interactive_typeSó mensagens interativas com botão de link são aceitas.
internal_errorA plataforma não conseguiu processar o envio. Envie de novo; se persistir, fale com o suporte.
reaction_lid_unavailableO WhatsApp não permitiu reagir a esse contato agora. Tente mais tarde.
reaction_send_failedO WhatsApp não aceitou a reação (evento message.react.failed). Tente de novo.
edit_failedO WhatsApp recusou a edição (evento message.edit.failed), por exemplo um evento de calendário que o WhatsApp não aceita mais alterar. Um texto ou uma legenda fora dos 15 minutos nem chega ao WhatsApp: a API responde 400 edit_window_expired.
message_secret_unavailableEste número não pode mais alterar o evento de calendário, por exemplo porque foi vinculado de novo depois do envio (evento message.edit.failed). Envie um novo evento.
calendar_edit_unavailableNo momento, a plataforma não consegue alterar nem cancelar eventos de calendário (evento message.edit.failed). A falha não depende do seu pedido nem se resolve repetindo-o. Envie um novo evento com os novos dados.
delete_failedO WhatsApp recusou apagar a mensagem (evento message.delete.failed).

Novos códigos podem surgir. Trate um código desconhecido como falha definitiva e registre o error.message.

Erros no servidor MCP

Quando uma ferramenta MCP não consegue fazer o que foi pedido, o agente recebe o código da API no próprio resultado, no formato tipo: código (por exemplo conflict: number_not_connected ou rate_limited: messages_quota_exceeded). Os códigos são os desta página. Veja Servidor MCP: Erros.