Novidades
Só entram aqui mudanças que afetam a sua integração. As que exigem ação da sua parte dizem o que trocar.
Outubro de 2026: avisos de falha e de armazenamento, resposta de conectar
- O
errordenumber.connect.failedé uma frase fixa: para cadareasono campo traz sempre a mesma frase em inglês, no lugar do texto livre que o campo trazia antes, e que mudava de uma versão para outra. Decida peloreasone use oerrorsó nos seus logs. A lista de frases está em Webhooks. O texto depairing_timeoutmudou de novo. storage.degradedtem listas fechadas:reasoné semprehealthcheck_failedeerror_codeé um destes:access_denied,bucket_unreachable,region_mismatch,endpoint_unreachable,endpoint_url_blocked,network_error,quota_exceeded,object_not_found,provider_unavailableouunknown_error. Cada valor tem o que significa e o que fazer em Webhooks. Trate umerror_codeque você não conhece comounknown_error.- Conectar e desconectar respondem
202comalias,statuseat, nas quatro rotas:POST /v1/numbers/{ref}/connecte/disconnectrespondiam200comatvazio, e as rotas do número principal respondiam202sem o campo. As quatro devolvem agora202 Acceptedcomalias,status(connectingoudisconnecting) eat, o instante em que o pedido foi aceito. Quem conferia200nas rotas de número extra precisa aceitar202. O status atual do número e oatdele continuam emGET /v1/numbers/{ref}. Veja Conexão de números extras.
Outubro de 2026: remoção agendada
- Remover não exige desconectar:
DELETE /v1/numbers/{ref}aceita um número conectado e não responde mais400 invalid_status_for_deletion. Quando a remoção é agendada, o número continua conectado e funcionando, com ostatusde sempre, até a data. Veja Remoção. - A data é o fim do período já pago:
scheduled_deletion_atpassa a ser o fim do período da assinatura (ou o momento do pedido, quando não há período pago), não mais um ciclo de 30 dias do número. pending_deletiondeixou de ser um status, incompatível:statusmostra só o estado real da conexão e?status=pending_deletionemGET /v1/numbersresponde422. Quem testava esse valor precisa lerscheduled_deletion_at, que agora vem em todo item deGET /v1/numbers(nullno número principal e nos extras sem remoção) e na resposta doPATCH. Veja Status.- Conectar e desconectar nunca cobram nem mexem na remoção:
POST /v1/numbers/{ref}/connectnão cancela mais uma remoção agendada nem cobra a ativação, e saíram da tabela de erros dessa rotano_payment_method,payment_declined,payment_requires_authenticationepayment_gateway_unavailable. Quem mantém o número éPOST /v1/numbers/{ref}/cancel-deletion, que só cobra o que falta do período pago quando a fatura do próximo período já saiu sem o número. cancel-deletiondevolve o estado real: a resposta trazstatus(o estado da conexão) eat(pode sernull), no lugar depending_deletion_canceled.- Servidor MCP: nenhuma ferramenta gera cobrança.
connect_numberdeixou de ser a exceção (reconectar um número com exclusão agendada cancelava a exclusão e podia cobrar) edisconnect_numbersegue sem cobrar. Cancelar uma remoção continua fora do catálogo. Veja Servidor MCP.
Outubro de 2026: pareamento por QR code
- Parear um número extra por QR code, pela API:
POST /v1/numbers/{ref}/pairaceita agoramethod: "qr", além de"pairing_code"(o padrão, quando o corpo é omitido). Outro valor responde422. Na nota do lançamento,"qr"respondia422: isso mudou. O dashboard já oferecia os dois métodos. Veja Pareamento pela API e Pareamento pelo dashboard. pairing.methodpode serqr: emGET /v1/numbers/{ref}, commethod: "qr",pairing.dataé a imagem do QR code em PNG, como data URI (data:image/png;base64,...), para usar comosrcde um<img>, nunca como texto. Se a sua tela só tratava código, confirapairing.methodantes de mostrarpairing.data.- O QR code se renova: o WhatsApp troca o QR code sozinho e o Turbo Notify mantém
pairing.dataatualizado. Consulte de novo e troque a imagem a cada consulta. Para os dois métodos,pairing.expires_até o fim da tentativa inteira. - Substituir a tentativa:
POST /v1/numbers/{ref}/pairenquanto o número está empairingsubstitui a tentativa em andamento, inclusive uma iniciada no dashboard, e pode trocar o método. - Texto neutro de timeout: o
data.errordenumber.connect.failedcomreason: "pairing_timeout"não fala mais em “Pairing code expired”. Agora diz que o pareamento não foi concluído a tempo, para código e para QR code. Os motivospairing_timeout,code_generation_failedepaired_phone_mismatchvalem para os dois métodos. Veja Status.
Outubro de 2026: edição de legendas
- Editar a legenda de uma imagem, vídeo ou documento:
POST /v1/numbers/{ref}/messages/{id}/editaceita agoracaption(1 a 1.024 caracteres, com as mesmas menções@<numero>de um envio). O arquivo continua como estava e quem recebe vê a legenda nova marcada como editada. O desfecho chega comomessage.edited(com ocontent_typedo arquivo e a legenda nova empreview) oumessage.edit.failed. Veja Editar legenda. - O que pode ser alterado depois do envio: texto, a legenda de uma imagem, vídeo ou documento e eventos de calendário podem ser editados. Localização, cartão de contato, botão de link, figurinha e áudio não podem: apagar é a única alteração. Um corpo que não combina com a mensagem responde
400 message_not_editablee um texto ou uma legenda editado mais de 15 minutos depois do envio responde400 edit_window_expired. Veja O que pode ser alterado depois do envio. - Prazo para editar texto e legenda: o WhatsApp dá 15 minutos, depois do envio, para alterar um texto ou uma legenda. Depois disso a API responde
400 edit_window_expired, em vez de aceitar uma edição que o destinatário pode nunca ver. Os 15 minutos não valem para evento de calendário, embora o WhatsApp ainda possa recusar uma edição de evento. - Corrigido: uma legenda editada no aplicativo do WhatsApp chegava ao webhook como
message.editedcompreviewvazio. Agora traz a legenda nova e ocontent_typedo arquivo. - Servidor MCP, incompatível: a ferramenta
edit_messagefoi removida. Quatro ferramentas a substituem, uma por ação:edit_text_message,edit_media_caption,edit_calendar_eventecancel_calendar_event. Cada uma recebe só os campos do próprio tipo. O servidor passa a ter 36 ferramentas. Agentes que chamavamedit_messageprecisam chamar a ferramenta do tipo da mensagem. Veja Servidor MCP.
Outubro de 2026: eventos de calendário
- Editar e cancelar um evento enviado:
POST /v1/numbers/{ref}/messages/{id}/editaceita agora, além detext, o corpo de um evento de calendário (name,start_ate os demais campos do envio) e o campocanceled. A edição substitui o evento inteiro. O desfecho chega comomessage.edited(comcontent_type: "calendar"ecanceled: truequando cancelado) oumessage.edit.failed. Antes, editar um evento respondia400 message_not_editable. Veja Editar e apagar. - Eventos editados no aplicativo do WhatsApp: quando quem criou o evento o edita ou cancela no aplicativo, você recebe
message.editedcomorigin: "native". - Respostas dos convidados: o novo evento
message.calendar_respondedtraz a resposta (going,not_goingoumaybe) e, quando há, o número de convidados extras. Veja Eventos de calendário. - Ler as respostas:
GET /v1/numbers/{ref}/messages/{message_id}/responsesdevolve a última resposta de cada convidado e os totais. Veja Consultar respostas de um evento. - Códigos novos:
message_not_calendar(consulta de respostas em uma mensagem que não é um evento) emessage_secret_unavailable(falha de edição de um evento que o número não pode mais alterar). Quando a plataforma não consegue alterar nem cancelar eventos no momento,message.edit.failedtrazcalendar_edit_unavailable: envie um novo evento. Veja Códigos de erro.
Outubro de 2026: lançamento
- API de WhatsApp: envio de texto, mídia, localização, contato, evento de agenda e botão de link; respostas, reações, edição e exclusão; recibos de entrega e leitura; contatos e grupos por número. Veja o Começo rápido.
- Eventos por webhook assinado ou por polling, com o mesmo formato.
- Servidor MCP com 36 ferramentas para agentes de IA, que você acessa entrando com a sua conta ou com uma chave. No endereço hospedado, uma chamada sem login nem chave agora recebe
401com o convite para entrar (antes recebia200com erro dentro da ferramenta), e um valor que não é nem um login nem uma chave também recebe401. Veja Construa um agente de IA. - Revenda: números extras, o filtro
statusna listagem de números e o template de chave Revenda. Cada número tem umidfixo (num_…) que vale no lugar do alias em qualquer rota/v1/numbers/..., vem nos eventos comonumber_id(e comodata.idnos eventosnumber.*) e filtra a consulta de eventos com?number_id=. Veja Revenda para seus clientes. - Listagem de mensagens com filtros:
GET /v1/numbers/{ref}/messagesaceitagroup_id,contact_idedirection, e cada item traz o mesmo envelope do evento da mensagem (inclusivenumber_id). Veja Listar mensagens. - Calendário: o evento enviado como
calendaragora aparece no WhatsApp do destinatário, em conversa e em grupo. Antes, a mensagem era entregue e não aparecia no aparelho. - Referência interativa da API, índice de códigos de erro e coleção para Insomnia.
- Erros de autenticação: chave ausente, mal formatada, desconhecida, revogada ou expirada responde
401 not_authenticated, com o cabeçalhoWWW-Authenticate: Bearer;403fica para chave válida sem permissão (insufficient_scope). Antes do lançamento, esses casos respondiam403 not_authorized: se a sua integração de testes tratava esse código, troque para o401. Veja o índice de códigos de erro. - Avisos de cota:
message.quota.warningecontact.quota.warningtrazem o limiar atingido emdata.threshold_percent(80,90ou95, em porcentagem). Antes do lançamento o campo se chamavathreshold_bps, com os mesmos valores: se a sua integração de testes lia esse nome, troque parathreshold_percent. Veja Eventos de cota de mensagem. - Novo número extra e pareamento (se a sua integração de testes usava os nomes antigos, ajuste): o corpo de
POST /v1/numbersrecebe o telefone emphone_number(o nomephonedeixou de ser aceito e responde422), e o corpo dePOST /v1/numbers/{ref}/pairsó aceitamethod: "pairing_code"(o"qr"respondia sem efeito e agora responde422). Veja Adicionar números e Pareamento pela API. - Falhas de serviços de apoio: quando a API não consegue falar com um serviço de que depende, a resposta é
503 service_unavailable; quando um serviço externo responde com erro (por exemplo, o processador de pagamento ao cadastrar um número extra), a resposta é502 integration_error. Antes, alguns casos devolviam códigos internos que não fazem parte do contrato. Veja o índice de códigos de erro. - Servidor MCP: abrir uma conexão de streaming sem login nem chave responde
401 not_authenticated, comWWW-Authenticate: Bearer, como na API (antes o código eraunauthorized). Veja Servidor MCP. - Transcrição de áudio: quando o provedor de transcrição configurado na sua conta não é suportado,
data.transcription.reasonéprovider_not_supported(antes do lançamento erano_adapter). Os demais valores dereasonnão mudaram. Veja Consultar mensagem. - Documentação em português e em inglês.