---
title: "Lista de contatos WhatsApp: opt-in, higiene e opt-out"
description: "A lista decide o resultado do disparo antes de a primeira mensagem sair. Como registrar opt-in que serve de prova, limpar número inválido antes de enviar, processar opt-out automaticamente e medir a saúde da base."
url: "https://api-wa.me/blog/lista-contatos-optin-optout-whatsapp"
language: "pt-BR"
og:type: "article"
og:site_name: "WAME API"
---

[Início](https://api-wa.me/)/[Blog da API do WhatsApp](https://api-wa.me/blog)/Lista de contatos para WhatsApp: opt-in, higienização e opt-out automático

Raphael Serafim· Publicado em 10 de setembro de 2026· 9 min de leitura

Compartilhar

# Lista de contatos para WhatsApp: opt-in, higienização e opt-out automático

A lista decide o resultado do disparo antes de a primeira mensagem sair. Como registrar opt-in que serve de prova, limpar número inválido antes de enviar, processar opt-out automaticamente e medir a saúde da base.

Copiar para LLM[Ver como Markdown](https://api-wa.me/blog/lista-contatos-optin-optout-whatsapp.md)

**A lista decide o resultado do disparo antes de a primeira mensagem sair.** Dá para acertar o template, o ritmo e o horário e mesmo assim queimar o número — se a lista estiver errada.

Este artigo trata da lista. Sobre o disparo em si, há [as boas práticas de envio em massa](https://api-wa.me/blog/enviar-mensagens-em-massa-whatsapp); sobre a mecânica de volume, [fila, rate limit e retry](https://api-wa.me/blog/fila-rate-limit-retry-disparo-whatsapp).

## Opt-in que serve de prova

Quase todo sistema guarda opt-in assim:

```sql
aceita_whatsapp BOOLEAN DEFAULT FALSE
```

Isso não é registro de consentimento. É uma afirmação sem prova — e no dia em que alguém questionar, você não tem o que mostrar.

O registro útil guarda **circunstância**:

```sql
CREATE TABLE optin_whatsapp (
  id            BIGSERIAL PRIMARY KEY,
  contato_id    BIGINT NOT NULL,
  numero        VARCHAR(20) NOT NULL,
  aceito_em     TIMESTAMPTZ NOT NULL,
  origem        VARCHAR(50) NOT NULL,   -- checkout | formulario | atendimento
  texto_exibido TEXT NOT NULL,          -- o que a pessoa leu ao aceitar
  ip            INET,
  user_agent    TEXT,
  revogado_em   TIMESTAMPTZ             -- NULL = ativo
);
```

O campo que mais falta nos sistemas é o `texto_exibido`. Consentimento é para uma finalidade — quem aceitou "receber atualizações do meu pedido" não aceitou promoção semanal. Guardar o texto é o que permite responder _para que_ a pessoa disse sim.

`revogado_em` em vez de `DELETE`: apagar o registro apaga também a prova de que houve consentimento antes. O histórico é a defesa.

Isso conversa direto com o contrato do seu cliente, se você [entrega o sistema e ele opera a base](https://api-wa.me/blog/whatsapp-api-lgpd-contrato-cliente).

### O que não é opt-in

- Lista comprada.
- Número raspado de site, grupo ou marketplace.
- "Quem não quiser é só avisar."
- Base de cinco anos atrás sem contato desde então.
- Consentimento para e-mail reaproveitado para WhatsApp.

Todos funcionam por um tempo. Todos terminam igual: bloqueio, denúncia, qualidade do número derrubada, template pausado.

## Higienizar antes de disparar

Número inválido não é só desperdício — na API oficial, tentativa de entrega falha conta contra a reputação. Vale filtrar antes.

**Normalize primeiro.** Base brasileira tem de tudo: `(66) 99685-2025`, `+55 66 99685-2025`, `066996852025`.

```js
function normalizar(bruto) {
  let n = String(bruto).replace(/\D/g, '');

  // Tira o zero do DDD: 066... -> 66...
  if (n.length > 11 && n.startsWith('0')) n = n.slice(1);

  // Sem DDI, assume Brasil
  if (n.length === 10 || n.length === 11) n = '55' + n;

  if (!n.startsWith('55') || n.length < 12 || n.length > 13) return null;
  return n;
}
```

**Depois confira quem realmente tem WhatsApp:**

```js
async function higienizar(numeros) {
  const validos = [];
  for (const bruto of numeros) {
    const n = normalizar(bruto);
    if (!n) { await marcar(bruto, 'formato_invalido'); continue; }

    const existe = await wa.contact.checkNumber(n);
    if (!existe) { await marcar(n, 'sem_whatsapp'); continue; }

    validos.push(n);
    await esperar(200);   // a verificação também tem limite
  }
  return validos;
}
```

Rode isso **antes** da campanha, não durante. E guarde o resultado: reverificar a base inteira a cada envio é desperdício.

## Opt-out automático

Ignorar pedido de descadastro é o caminho mais rápido para a denúncia — e denúncia pesa muito mais que bloqueio.

```js
const SAIDA = /^\s*(sair|parar|cancelar|descadastrar|remover|stop|pare)\s*!?\.?\s*$/i;

async function processar(msg) {
  if (SAIDA.test(msg.text.body)) {
    await registrarOptOut(msg.from);
    await enviar(msg.from, 'Pronto, você não receberá mais nossas mensagens. ' +
                           'Se precisar de algo, é só escrever aqui.');
    return;   // não segue para o atendimento normal
  }
  await atendimentoNormal(msg);
}
```

A regex casa a mensagem **inteira**, de propósito. Buscar a palavra solta marcaria como opt-out quem escreveu "quero cancelar meu pedido" — que é um cliente pedindo atendimento, não descadastro.

**O erro que quase todo mundo comete:** checar opt-out só na hora de montar a campanha. Uma campanha de 50 mil contatos leva horas para escoar, e quem pede para sair no minuto 10 continua recebendo por horas. A checagem tem que estar **na hora de enviar cada mensagem**:

```js
// no worker, imediatamente antes do envio
if (await estaEmOptOut(job.data.to)) return;   // saiu depois de enfileirado
```

E deixe a saída visível. Um "responda SAIR para não receber mais" no rodapé do template converte denúncia em opt-out — a diferença entre perder um contato e machucar o número.

## Medir a saúde da base

Três indicadores, por campanha:

| Indicador | O que observar |
| --- | --- |
| **Taxa de entrega** | Abaixo de 95%, a base tem número morto — higienize |
| **Bloqueios** | Subindo, o conteúdo não corresponde ao que foi consentido |
| **Denúncias** | Qualquer aumento é grave; é o que mais derruba número |

Se bloqueio e denúncia sobem, **mandar mais piora**. A resposta é reduzir frequência, revisar o conteúdo e reconfirmar o opt-in dos contatos antigos. Como acompanhar esses números está em [métricas de campanha](https://api-wa.me/blog/metricas-campanha-whatsapp-api).

## Reconfirmar base antiga

Base parada há mais de um ano é praticamente uma base nova, e disparar promoção nela é pedir denúncia. O caminho seguro é uma mensagem única de utilidade, com saída explícita:

> Oi, Ana! Faz um tempo que não falamos. Quer continuar recebendo novidades da Loja Exemplo por aqui? Responda **SIM** para continuar ou **SAIR** para não receber mais.

Quem não responde não é "sim". É silêncio — e silêncio, na dúvida, se trata como saída.

## Conclusão

Lista boa é lista pequena o suficiente para você saber de onde veio cada contato. A tentação de disparar para todo mundo é forte, e o custo aparece uma campanha depois: qualidade derrubada, template pausado, número no limite.

Opt-in com prova, higienização antes do envio, opt-out checado na hora de mandar e três indicadores acompanhados. Nenhuma dessas quatro coisas é difícil — todas são chatas, e é por isso que quase ninguém faz.

### Pronto para automatizar seu WhatsApp?

Crie sua conta gratuita e comece a enviar mensagens pela API em minutos.

[Começar grátis](https://portal.api-wa.me/sign-up)

## Perguntas frequentes

O que é opt-in no WhatsApp e como registrar?+

É o consentimento da pessoa para receber suas mensagens naquele canal. Registrar significa guardar quando, onde e como ele foi dado: data e hora, origem (formulário, checkout, atendimento), o texto exibido no momento e o identificador da sessão. Uma coluna booleana 'aceitou' não é registro de opt-in — é uma afirmação sem prova.

Como saber se um número tem WhatsApp antes de enviar?+

A API tem verificação de número. Rodar essa checagem na base antes do disparo remove os inválidos, e isso importa porque tentativa de envio para número inexistente conta contra a reputação do seu número na API oficial.

Como funciona o opt-out automático?+

Você detecta no webhook as palavras de descadastro (sair, parar, cancelar, descadastrar), marca o contato como opt-out no banco antes de qualquer outro processamento e confirma para a pessoa. O ponto crítico é que a checagem de opt-out precisa acontecer na hora de enfileirar cada envio, não só na montagem da campanha.

Preciso de opt-in mesmo na API não oficial?+

Legalmente sim: a LGPD trata do tratamento de dados pessoais, não da tecnologia usada para enviar. Na prática também, porque bloqueio e denúncia de usuário derrubam qualquer número, oficial ou não. A API não oficial não fiscaliza o opt-in, o que aumenta a sua responsabilidade em vez de reduzi-la.

Quantas mensagens minha base aguenta antes de queimar?+

Não é o volume que queima, é a taxa de rejeição. Uma base de 50 mil contatos com opt-in recente e conteúdo esperado tem menos problema que uma base de 500 comprada. Acompanhe bloqueios e denúncias por campanha: quando esse número sobe, o problema é a lista ou o conteúdo, e mandar mais só acelera o dano.

## Continue lendo

[### Como criar um chatbot de IA com a API da OpenAI para responder no WhatsApp

Um webhook, uma chamada à API da OpenAI e uma resposta pela WAME API: o código completo de um chatbot de IA que atende no WhatsApp, Instagram e Messenger. Com memória por contato, controle de custo e o que fazer quando a IA não deve responder.](https://api-wa.me/blog/chatbot-ia-openai-whatsapp)[### Cobrança por Pix dentro do WhatsApp pela API: como enviar e o que muda na conversão

Mandar o código Pix no WhatsApp resolve o pior ponto da cobrança digital: o cliente não precisa sair do app. Como enviar a cobrança pela API, tratar a confirmação e evitar os erros que transformam a facilidade em suporte.](https://api-wa.me/blog/cobrar-pix-whatsapp-api)[### Erros da API do WhatsApp: o que cada um significa e como tratar

A mensagem não saiu e o log diz apenas 'erro ao enviar'. Os erros que você vai encontrar de verdade — janela fechada, número inválido, template não aprovado, limite atingido, instância caída — e o tratamento certo para cada um.](https://api-wa.me/blog/erros-api-whatsapp-como-tratar)

[Voltar ao blog](https://api-wa.me/blog)

## Structured data

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "WAME API",
  "alternateName": "API Oficial e Não Oficial de WhatsApp, Instagram e Messenger",
  "url": "https://api-wa.me",
  "inLanguage": "pt-BR",
  "publisher": {
    "@id": "https://api-wa.me/#organization",
    "@type": "Organization",
    "name": "WAME API",
    "url": "https://api-wa.me"
  }
}
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://api-wa.me/#organization",
  "name": "WAME API",
  "alternateName": [
    "WAME",
    "Wame API",
    "wame.api.br",
    "api-wa.me"
  ],
  "url": "https://api-wa.me",
  "logo": {
    "@type": "ImageObject",
    "url": "https://api-wa.me/images/web-app-manifest-512x512.png",
    "width": 512,
    "height": 512
  },
  "disambiguatingDescription": "WAME API é uma empresa brasileira de software, fundada em 2017 e parceira oficial da Meta (Meta Business Partner), que fornece APIs de WhatsApp, Instagram Direct e Messenger. Não tem relação com o wa.me, que é o encurtador de links operado pela WhatsApp LLC.",
  "identifier": {
    "@type": "PropertyValue",
    "propertyID": "INPI-BR",
    "name": "Pedido de registro de marca (INPI, classe NCL 42)",
    "value": "944724159"
  },
  "foundingDate": "2017",
  "slogan": "Parceira Oficial da Meta — WhatsApp, Instagram e Messenger numa instância só. Desde 2017.",
  "description": "Plataforma brasileira e Parceira Oficial da Meta (Meta Business Partner) para as APIs oficiais de WhatsApp (Cloud API), Instagram Direct e Messenger — os três numa única instância, com os mesmos endpoints e um único formato de webhook. Também oferece a API não oficial via QR Code, na mesma plataforma. No mercado desde 2017, com mais de 50 mil instâncias criadas, 99,9% de uptime e suporte humano 24/7 em português. SDKs oficiais para Node.js/TypeScript e PHP.",
  "knowsAbout": [
    "WhatsApp Cloud API oficial (Meta)",
    "API oficial de Instagram (Direct)",
    "API oficial de Messenger",
    "API multicanal Meta",
    "Meta Business Partner",
    "WhatsApp API",
    "API não oficial de WhatsApp",
    "automação de WhatsApp",
    "números virtuais",
    "webhooks"
  ],
  "sameAs": [
    "https://github.com/wame-api",
    "https://www.linkedin.com/company/wameapi",
    "https://www.instagram.com/wame.api/",
    "https://www.youtube.com/@wameapi"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "customer support",
    "url": "https://api-wa.me/contact",
    "availableLanguage": [
      "Portuguese"
    ]
  }
}
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Lista de contatos para WhatsApp: opt-in, higienização e opt-out automático",
  "description": "A lista decide o resultado do disparo antes de a primeira mensagem sair. Como registrar opt-in que serve de prova, limpar número inválido antes de enviar, processar opt-out automaticamente e medir a saúde da base.",
  "image": "https://api-wa.me/blog/lista-contatos-optin-optout-whatsapp/opengraph-image",
  "datePublished": "2026-09-10",
  "dateModified": "2026-09-10",
  "author": {
    "@type": "Person",
    "name": "Raphael Serafim",
    "url": "https://github.com/raphaelvserafim",
    "sameAs": [
      "https://github.com/raphaelvserafim"
    ]
  },
  "publisher": {
    "@type": "Organization",
    "name": "api-wa.me",
    "logo": {
      "@type": "ImageObject",
      "url": "https://api-wa.me/images/screenshot.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://api-wa.me/blog/lista-contatos-optin-optout-whatsapp"
  },
  "keywords": "opt-in whatsapp, opt-out whatsapp, lista de contatos whatsapp, descadastro whatsapp, higienizar lista whatsapp, lista de transmissão whatsapp api, validar número whatsapp",
  "inLanguage": "pt-BR"
}
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://api-wa.me"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog da API do WhatsApp",
      "item": "https://api-wa.me/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Lista de contatos para WhatsApp: opt-in, higienização e opt-out automático",
      "item": "https://api-wa.me/blog/lista-contatos-optin-optout-whatsapp"
    }
  ]
}
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "O que é opt-in no WhatsApp e como registrar?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "É o consentimento da pessoa para receber suas mensagens naquele canal. Registrar significa guardar quando, onde e como ele foi dado: data e hora, origem (formulário, checkout, atendimento), o texto exibido no momento e o identificador da sessão. Uma coluna booleana 'aceitou' não é registro de opt-in — é uma afirmação sem prova."
      }
    },
    {
      "@type": "Question",
      "name": "Como saber se um número tem WhatsApp antes de enviar?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A API tem verificação de número. Rodar essa checagem na base antes do disparo remove os inválidos, e isso importa porque tentativa de envio para número inexistente conta contra a reputação do seu número na API oficial."
      }
    },
    {
      "@type": "Question",
      "name": "Como funciona o opt-out automático?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Você detecta no webhook as palavras de descadastro (sair, parar, cancelar, descadastrar), marca o contato como opt-out no banco antes de qualquer outro processamento e confirma para a pessoa. O ponto crítico é que a checagem de opt-out precisa acontecer na hora de enfileirar cada envio, não só na montagem da campanha."
      }
    },
    {
      "@type": "Question",
      "name": "Preciso de opt-in mesmo na API não oficial?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Legalmente sim: a LGPD trata do tratamento de dados pessoais, não da tecnologia usada para enviar. Na prática também, porque bloqueio e denúncia de usuário derrubam qualquer número, oficial ou não. A API não oficial não fiscaliza o opt-in, o que aumenta a sua responsabilidade em vez de reduzi-la."
      }
    },
    {
      "@type": "Question",
      "name": "Quantas mensagens minha base aguenta antes de queimar?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Não é o volume que queima, é a taxa de rejeição. Uma base de 50 mil contatos com opt-in recente e conteúdo esperado tem menos problema que uma base de 500 comprada. Acompanhe bloqueios e denúncias por campanha: quando esse número sobe, o problema é a lista ou o conteúdo, e mandar mais só acelera o dano."
      }
    }
  ]
}
```
