Changelog da API
Mudanças na API pública, da mais recente para a mais antiga. Só entra aqui o que muda o que você vê do lado de fora.
Nosso compromisso: o que já funciona continua funcionando. Mudança que quebra integração só acontece numa versão nova, com aviso e prazo. Campo novo numa resposta não é quebra: escreva seu código ignorando o que não conhece.
8 de setembro de 2026, à noite (4)
A rodada da adoção. Menos sobre o que a API faz, mais sobre quem consegue usar.
Novo
- API de parceiro Whitelabel.
POST /partner/clientscria o espaço do cliente,POST /partner/clients/{id}/keysgera a chave daquele espaço eGET /partner/usagelê o consumo de todos. Escopo novopartner:manage. Veja /partner. - O nó do n8n passou a cobrir a API inteira: 92 operações, no lugar das 8 que existiam. São geradas da mesma especificação, então endpoint novo aparece lá na versão seguinte. Três fluxos prontos para importar vêm junto.
- Servidor MCP
@wevichat/mcp: 93 ferramentas para o Claude, o ChatGPT ou o Cursor. ComWEVI_SOMENTE_LEITURA=1, sobram só as que não mudam nada. - Início rápido no painel. Ao criar uma chave, a tela mostra o
curljá preenchido e um botão que dispara a chamada ali mesmo, com a resposta embaixo.
8 de setembro de 2026, à noite (3)
Segurança de quem já confia na API. Nada aqui muda o que você chama; muda o que acontece se algo der errado.
Novo
- IPs permitidos por chave. Ao criar a chave, você pode informar de quais endereços ela é aceita. Em branco continua sendo "de qualquer lugar". Chamada de fora recebe
403 ip_not_allowed, com o seu endereço emdetails.your_ip. Veja autenticação. alertsnoGET /org. Uma lista do que está quebrado agora: webhook falhando há mais de uma hora, número de WhatsApp com erro de configuração, chave prestes a vencer. Antes o único aviso de webhook quebrado era um email depois de 3 dias.- Aviso no painel quando um webhook para de receber, em Minha conta → Desenvolvedores.
Mudou
- O segredo que assina os webhooks passou a ser guardado cifrado, com a mesma criptografia das chaves de IA. Ele só existe em texto puro no instante de assinar a entrega. Nada muda do seu lado.
- A validade sugerida ao criar uma chave passou a ser 1 ano, e os escopos vêm marcados só no que a maioria das integrações usa. "Sem expiração" e "marcar tudo" continuam disponíveis, como escolha explícita.
8 de setembro de 2026, à noite (2)
Nada mudou no comportamento da API. O que mudou foi o quanto ela se explica.
Melhorou
- Exemplo de requisição e de resposta nas 88 operações. Antes não havia nenhum: quem abria a referência precisava adivinhar o formato do corpo.
- Explicação em cada operação e em cada parâmetro de busca. Eram 74 operações e 47 parâmetros sem uma linha de texto.
- Códigos de erro documentados por operação, com o significado de cada um.
- Os 30 eventos de webhook entraram na especificação, com o corpo de cada um. A referência agora mostra os eventos ao lado dos endpoints.
- Exemplos de código em curl, JavaScript, Python e PHP, gerados a partir dos exemplos, então não envelhecem sozinhos.
- 73 schemas, um por recurso, no lugar dos 12 genéricos de antes.
GET /contactsePOST /contactspassaram a declarar o mesmo objetoContact. - Coleção do Postman e arquivo
.httpcom corpo preenchido, em vez de{}.
Corrigido
GET /contacts-schemanão devolviaX-Request-Idnem os cabeçalhos de limite: era o último endpoint fora do middleware.- A especificação declarava campos que o servidor não devolve, e omitia campos que ele devolve, em
/contacts-schema,/tags,/pipelines,/fields,/users,/analytics/overviewe/webhooks/event-types. Um teste automático agora compara cada resposta com o schema e reprova a mudança que voltar a divergir. GET /messagesexige um filtro e devolvia400sem que a documentação dissesse.
8 de setembro de 2026, à noite
Segunda rodada do mesmo dia, depois de medir a API de fora. Nada aqui adiciona endpoint; tudo muda o que você sente ao usar.
Mudou
- Os nove
send-*entraram no contrato. Passam a devolverX-Request-Id, os headers de rate limit e CORS completo, e a aparecer no log de requisições. O corpo de sucesso continua idêntico. O corpo de erro passou para o envelope padrão: oerrorvirou código (missing_connection_id) e a frase antiga foi paramessage. Se o seu código comparavaerrorcom a frase, compare com o código ou commessage. - Chave de teste vale em todos os envios. Antes,
wevi_test_só era respeitada emPOST /messagesesend-template; os outros oito chamavam a Meta de verdade. Agora nenhum deles chama. - Campo desconhecido no corpo devolve
400 unknown_fieldsem todo POST e PATCH, com a lista do que veio errado e do que é aceito. Antes era ignorado em silêncio. Idempotency-Keyreaproveitada com corpo diferente devolve422 idempotency_key_reusedem vez de repetir a resposta antiga.POST /contactsdevolve o objetoContactcompleto, o mesmo deGET,PATCHe da lista. Os camposok,contact_idetags_assignedcontinuam no mesmo corpo.- Rate limit por organização, somado ao por chave. Dez chaves não multiplicam o teto por dez. Os headers
X-RateLimit-*mostram o balde mais apertado. - Autorização numa ida só ao banco, com cache de 30 segundos. Uma chave revogada pode continuar válida por até esse tempo.
Corrigido
- Texto e mídia enviados com
conversation_id(porPOST /messagesouPOST /conversations/{id}/messages) não apareciam na linha do tempo do inbox. Agora aparecem, como qualquer resposta. POST /messagesaceitamedia.base64, como osend-conversation-messagejá aceitava.producteproduct_listusam ocatalog_idda conexão quando o corpo não traz um.GET /healthpassou a devolverdb_ms, o tempo até o banco.
8 de setembro de 2026
Reescrita grande. A API deixou de ser só disparo de mensagem e passou a cobrir leitura, eventos e controle do atendimento.
Novo
Leitura de tudo
GET /contactscom filtros e paginação, mais/contacts/{id},/{id}/conversationse/{id}/historyGET /conversationscom filtros, mais mensagens, eventos e transcriçãoGET /messagesporwamidou id, unificando mensagens de conversa e disparos avulsosGET /agents,/connections,/templates,/campaigns,/automationsGET /tags,/pipelines,/fields,/users,/quick-repliesGET /orge/org/usagecom plano, limites e consumo do mêsGET /analytics/overviewe/analytics/agents/{id}
Webhooks de saída
- 30 tipos de evento, de
message.receivedacontact.stage_changed - Assinatura HMAC no header
Wevi-Signature - Retentativa automática em 1 min, 5 min, 30 min, 2 h, 12 h e 24 h
- Log de entregas com reenvio, na API e no painel
GET /eventspara quem não tem URL pública
Escrita e controle
POST /messages: um endpoint para os doze tipos de mensagem- Ações de conversa: assumir, devolver para a IA, pausar a IA, encerrar, reabrir, pedir atendente, etiquetar e responder
- Contatos:
PATCH, exclusão com anonimização, fusão, opt-out, notas, exportação e lote de até 100 POST /agents/{id}/chat: o agente respondendo dentro do seu sistema- Campanhas, automações, templates e base de conhecimento pela API
Experiência de dev
- Especificação OpenAPI 3.1 em
GET /openapie referência interativa em /docs/api/referencia - Chaves de teste
wevi_test_: tudo funciona, nada sai para o WhatsApp - Escopos e expiração por chave
- Log de requisições dos últimos 7 dias no painel
X-Request-Idem toda resposta- Coleção Postman e arquivo
.httppara baixar - SDK TypeScript
Mudou
- Rate limit passou a valer de verdade. Antes o contador vivia na memória de cada instância e zerava sozinho; agora é compartilhado. Se você passava do limite publicado sem perceber, agora vai receber 429. Os headers
X-RateLimit-Limit,-Remaininge-Resetvêm em toda resposta. /send-conversation-messagedevolvia 500 quando a Meta recusava. Agora devolve 200 comstatus: "failed", igual ao/send-message. Se o seu código tratava 500 com retry automático, ele parava de reenviar sozinho: confira.- Criar chave de API agora exige papel de administrador. Antes qualquer membro conseguia, chamando a função direto.
- Ler não exige mais plano com campanhas. Qualquer plano lê pela API. Escrever e enviar exige um plano com o recurso de API.
- Expiração e escopo de chave passaram a valer em todos os endpoints. Antes só os de envio checavam.
Corrigido
- Contato criado pela API guardava o telefone como veio (
+55 (11) 99999-8888) e não casava com a conversa que o WhatsApp abria. Agora o número é normalizado na gravação, e a busca aceita os formatos antigos. POST /automation-triggernunca criava contato novo: gravava numa coluna que não existe. A execução nascia sem contato associado.
Descontinuado
| O quê | Até quando | Use no lugar |
|---|---|---|
Tokens de webhook antigos (sem prefixo wevi_) |
7 de dezembro de 2026 | Chave de API |
/contacts-meta |
7 de dezembro de 2026 | /contacts-schema |
/automation-webhook |
7 de dezembro de 2026 | /automation-trigger |
/send-* |
sem data definida, pelo menos 12 meses | POST /messages |
Respostas autenticadas por token antigo já vêm com os headers Deprecation e Sunset.