Changelog
Mudanças que afetam quem integra. Novidades sem impacto em contrato não entram aqui.
Como lemos "mudança que quebra"
| Muda | É quebra? |
|---|---|
| Campo novo, opcional, na resposta | não |
| Campo novo, opcional, na requisição | não |
| Endpoint novo | não |
| Valor novo em um enum | não — trate valores desconhecidos com um caso padrão |
| Campo removido da resposta | sim |
| Campo opcional virou obrigatório | sim |
| Tipo de um campo mudou | sim |
| Código de status mudou | sim |
Quebras só acontecem em uma versão maior da API, com aviso prévio por e-mail para todas as contas ativas.
2.2.0
Tudo nesta versão é aditivo.
Agências e workspaces
GET /workspaces— o grupo de uma agência, com o consumo de cada cliente no período de cobrança. Só com a chave sem restrição da conta da agência.GET /account/metrazparent: a agência que gerencia e paga a conta, quando ela é o workspace de um cliente.- Dentro de um workspace,
/wallete/affiliaterespondem409 billed_by_parent.
2.1.0
Tudo nesta versão é aditivo: nada que já funcionava deixa de funcionar.
Endpoints novos
- Contatos e consentimento —
/contacts, campos personalizados, tags, importação em lote e/suppressions. Ver Contatos e consentimento. - Disparo de fluxos —
POST /flows/{id}/trigger, comGET /flowseGET /flows/{id}. Ver Fluxos pela API. - Campanhas e públicos —
/broadcastse/audiences. Ver Campanhas. - Inbox —
/inbox, com o stream em tempo real. Ver Inbox. GET /plans/quote,GET /audit/operator-access,GET /wallet,GET /wallet/entries,GET /affiliateeGET /affiliate/referrals.
Eventos novos
contact.created, contact.opted_in, contact.opted_out, broadcast.completed,
broadcast.paused, flow.run.completed, flow.answer.captured,
conversation.assigned e conversation.closed. Ver
Catálogo de eventos.
Campos e headers novos
POST /messagesaceitaIdempotency-Key. Ver Repetir sem duplicar.- Todo
402trazaction, com o que fazer e onde. Ver Erros. - O limite de requisições passou a ser por chave, debaixo de um teto da conta. Respostas
trazem
X-RateLimit-Scope, e o429trazerror.scope. Ver Limites de uso. GET /billingtrazsubscriptions, uma por assinatura da conta. O campo antigosubscriptioncontinua, marcado como obsoleto.- Planos ganharam
stackable,currencyPrices,rateLimitse os tetos de contatos, campanhas e inbox.
2.0.0
As rotas antigas não respondem mais. Não há alias: o caminho antigo devolve 404,
ou 405 quando ele sobrevive com outro método.
Um endpoint de envio
O que mudava entre um texto e um template era o tipo da mensagem, que é campo do
corpo — não caminho. As rotas por tipo viraram uma só, com type.
| Antes | Agora |
|---|---|
POST /messages/send/text | POST /messages com {"type":"text"} |
POST /messages/send/template | POST /messages com {"type":"template"} |
POST /messages/send/test | POST /messages com {"type":"test"} |
POST /messages/text, /template, /test | idem — os atalhos não documentados saíram |
O resto do corpo não mudou: to, from, body, name, language e components seguem
iguais. As respostas de sucesso e de erro, também.
Agendamento
O mesmo POST /messages aceita sendAt (instante ISO 8601) ou delaySeconds e
responde 202. Novos: GET /messages/scheduled, GET /messages/scheduled/{id} e
DELETE /messages/scheduled/{id}. Ver Enviar mensagens.
Paginação uniforme
Toda listagem passou a aceitar ?limit= e ?offset= e a responder
{ data, total, limit, offset }. Quem lia res.data continua funcionando; quem
contava com a ausência de total, não.
Endpoints novos
GET /account/senders, GET /account/usage, DELETE /account/wabas/{id},
GET /audit, GET /plans (público, sem credencial), GET /billing,
GET /billing/invoices, GET /billing/license e POST /templates/media.
Eventos de cobrança
billing.past_due, billing.blocked e billing.restored — os primeiros eventos que
nós originamos, em vez de repassar da Meta. Ver Catálogo de eventos.
Outras mudanças de contrato
POST /auth/logoutvirouDELETE /auth/session.- Os dois
/revokede convite viraramDELETEno próprio recurso. - Método errado num caminho existente responde
405com headerAllow, onde antes respondia404. 402passou a trazerreason, incluindo o novolicense_expired.
Saíram da documentação
Os endpoints que estavam marcados como "em breve" foram retirados da referência: eles
respondiam 404 e a referência passa a descrever só o que existe. Imagem, vídeo,
documento, botões, lista, CTA, carrossel, localização, contato, reação, figurinha,
"digitando…" e "marcar como lida" continuam disponíveis pelo espelho
POST /v1/{phone_number_id}/messages, que aceita o payload da Cloud API inteiro —
ver Os outros tipos de mensagem.
1.0.0
Primeira versão pública.
API simplificada — envio por tipo de mensagem, com o número de origem resolvido a partir do token. Listagem, criação e remoção de templates com validação prévia de variáveis e exemplos. Chaves de API com criação e revogação imediata.
Espelho /v1 — contrato da Meta Cloud API byte a byte. Basta trocar o domínio e o
token de uma integração existente.
Webhooks — entrega assinada com HMAC-SHA256 sobre "{timestamp}.{corpo}", seis
tentativas com backoff de 60s a 6h, log de entregas e reenvio manual.
Coexistência — número compartilhado entre o aplicativo WhatsApp Business e a Cloud API, com sincronização de histórico e contatos nas primeiras 24 horas.
Limites de uso — 500 envios por minuto, 60 uploads de mídia por minuto, 60 consultas
por minuto, com os headers X-RateLimit-* em toda resposta.