GLOSSARY

What is an Opt-In?

An opt-in is a recorded, affirmative act by which a person agrees to receive messages from a named business on a specific channel. On the WhatsApp Business Platform it is a policy requirement before any business-initiated message, it can be collected anywhere, and the business is responsible for keeping the evidence.

Free forever plan · No credit card required · Cancel anytime

Quick definition

An opt-in is a recorded, affirmative act by which a person agrees to receive messages from a named business on a specific channel. On the WhatsApp Business Platform it is a policy requirement before any business-initiated message, it can be collected anywhere, and the business is responsible for keeping the evidence.

In a single sentence: nobody checks it up front, and everybody checks it after something goes wrong.

What it means

An opt-in is the moment a person says yes. On WhatsApp it is the precondition for every business-initiated message, which in practice means every message template you ever send. Replying inside an open 24-hour customer service window does not need one, because the customer started that conversation. Reaching out does.

Meta's policy has three substantive requirements, and they are short enough to memorise:

  1. The person must take an action. Not a pre-ticked box, not silence, not an inference from a purchase.
  2. They must be told they will receive messages on WhatsApp specifically. Consent to email or SMS is not consent to this channel.
  3. They must be told which business will send them. A parent company's name on a form does not authorise a subsidiary brand nobody has heard of.

What is deliberately open is where you collect it. Meta once prescribed particular channels and formats and has since relaxed that, so a web form, a checkout step, an in-store tablet, an IVR prompt, a QR code and a conversation on another platform are all acceptable places. The substance carried the requirement; the venue never did.

Nobody validates it, and that is the trap

There is no API to submit opt-ins to. There is no field on a contact that Meta inspects. You can import a list of fifty thousand numbers you have never spoken to and the first template send will succeed.

Enforcement happens on the other side. The people you message block you and report you. Those actions drive quality rating down. A sustained red rating costs a messaging tier, and a pattern of reports invites a policy review of the whole WABA. The report reason that does the most damage is the one that says the recipient never signed up, because it is simultaneously a quality signal and a policy allegation.

So the honest framing is this: consent is not a compliance form standing between you and sending. It is the variable that determines whether your channel still exists in three months.

Scope: the distinction that saves your rating

The single highest-leverage improvement most teams can make is to stop treating consent as a boolean. A person who agreed to delivery notifications has consented to utility messages. They have not consented to weekly promotions, and sending those anyway is the most common cause of an avoidable block.

Store scope alongside the consent, at minimum splitting transactional from marketing, and build campaign audiences from scope rather than from the existence of a phone number. It costs an afternoon of schema work and it removes the exact behaviour that produces the worst report reason on the platform.

Recency deserves the same treatment. Consent given three years ago by someone who has not interacted since is technically on file and practically forgotten. Most privacy regimes take a dim view of it, and so does the recipient's thumb.

Opt-out is part of opt-in

Every consent system needs a withdrawal path, and on WhatsApp the withdrawal path is a commercial instrument rather than a legal formality.

The mechanics are simple. Put a stop instruction in the footer of marketing templates, since footers are static text and cannot carry variables anyway, or attach a quick-reply button that comes back to your webhook as a clean payload. Process it automatically. Confirm it once. Never require a human to action it, and never make the person ask twice.

The reason to invest here is arithmetic. An annoyed recipient will either unsubscribe or block. An unsubscribe costs you one contact. A block damages the rating that governs your reach to everyone else. Making the exit easy converts the expensive outcome into the cheap one, every single time.

One implementation note that catches teams out: an opt-out is almost never just one word. Handle the obvious keyword, handle the local-language equivalents for every market you operate in, handle the button payload, and treat an unambiguous sentence such as "please stop messaging me" as a withdrawal even though it matches no keyword. An automation that answers that sentence with a product FAQ is how a block gets earned.

Platform policy is not the law

Meta's rules decide whether your account survives. Privacy law decides whether you get fined, and the two overlap without being identical.

  • Europe. GDPR and the ePrivacy rules require a lawful basis, freely given and specific consent for direct marketing, evidence you can produce, and a withdrawal that is as easy as the original agreement.
  • Turkey. KVKK governs the personal data, and commercial electronic messages additionally sit under a national registry regime with its own consent and opt-out obligations. Satisfying Meta does not satisfy either.
  • Elsewhere. Most markets now have a comparable regime. The practical strategy is to build the record that satisfies the strictest jurisdiction you operate in and use it everywhere.

None of this is legal advice, and a lawyer in your market is worth an hour of their fee here. But the engineering conclusion is stable across regimes: store what was shown, when, by whom, for what purpose, and every withdrawal after it.

Real-world examples

  1. The checkout tick that works. An unticked box at checkout reading "Send my order updates on WhatsApp from Acme Ltd" with a separate box for offers. Two consents, two scopes, both stored with the exact wording and the timestamp.
  2. The event list that does not. A conference hands over its attendee list. The attendees consented to the conference, not to the sponsor, and the sponsor's number turns red the same afternoon.
  3. The QR code on the table. A restaurant's code opens WhatsApp with a pre-filled message. The customer sends it, which is both an opt-in and an open service window, and the whole first conversation is free-form.
  4. The migration that lost the opt-outs. A CRM switch imported contacts and dropped the suppression list. Three hundred people who had unsubscribed were messaged again, and the block rate was catastrophic because they had already said no once.

Common mistakes

  • Treating consent as a boolean. Utility and marketing are different permissions.
  • Storing a flag instead of evidence. A true value in a column proves nothing. Store the wording, the source and the time.
  • Assuming email consent covers WhatsApp. It does not, in policy or in law.
  • Buying or borrowing lists. The single fastest route to a red rating and a lost tier.
  • Hiding the opt-out. Converts unsubscribes into blocks, which is the expensive direction.
  • Keyword-only opt-out handling. Real people write sentences, and they write them in their own language.
  • Letting suppression lists die in a migration. The withdrawal record is the half you cannot rebuild.

Related concepts

How Pinlyx handles it

Pinlyx stores consent as a record rather than a flag: the wording shown, the source, the timestamp, the scope and every later change, all on the contact timeline. Campaign audiences are built from scope, so a marketing send cannot silently include people who only agreed to delivery updates. Opt-out replies are matched across keywords, local-language variants and quick-reply payloads, suppression is applied instantly and survives imports and merges, and the same suppression list covers WhatsApp, Telegram, email and SMS so a person who says stop once is not reached on a second channel. See WhatsApp CRM.

Cheat sheet · what a consent record contains

A boolean is not evidence.

Six fields, and the sixth is the one that saves you.

FieldExampleWhy it matters
Timestamp2026-03-14T09:12:44ZConsent has an age. A regulator and a Meta reviewer both want to know when it was given, and a five-year-old tick is not persuasive.
Sourcecheckout_form_v3Tells you which experience produced the consent, so you can retire the one that generates complaints.
Exact wording shownSend my order updates on WhatsApp from Acme Ltd.What the person agreed to defines what you may send. Store the string, not a reference to a page that will be redesigned.
Scopeutility + marketingAgreeing to delivery updates is not agreeing to promotions. Two scopes, two consents, two audiences.
Identifier used905551112233Consent attaches to a phone number. If the number changes owner, the consent does not travel with it.
Opt-out eventsstopped_marketing 2026-06-02The withdrawal record is the half that protects you. It has to survive imports, merges and CRM migrations.
Opt-out on the wire

A template button gives you a payload, not a guess.

Quick-reply buttons on templates arrive as type: "button", which is a different shape from an interactive reply. Handle both.

# Inbound: the customer tapped the "Stop promotions" button on a template
{
  "field": "messages",
  "value": {
    "metadata": { "phone_number_id": "106540352242922" },
    "messages": [{
      "from": "905551112233",
      "id": "wamid.HBgLOTA1NTUxMTEyMjMz...",
      "type": "button",
      "button": { "payload": "STOP_MARKETING", "text": "Stop promotions" },
      "context": { "id": "wamid.HBgLOTA1NTUwMDAwMDAw..." }
    }]
  }
}

// Withdrawal handling. Keywords alone are not enough.
const STOP_PAYLOADS = new Set(['STOP_MARKETING', 'UNSUBSCRIBE']);
const STOP_WORDS = [
  /^\s*stop\s*$/i, /^\s*unsubscribe\s*$/i,
  /^\s*dur\s*$/i,  /^\s*iptal\s*$/i,      // tr
  /^\s*parar\s*$/i,                        // es / pt
];

function isWithdrawal(msg) {
  if (msg.type === 'button')  return STOP_PAYLOADS.has(msg.button.payload);
  if (msg.type === 'interactive' && msg.interactive.type === 'button_reply')
    return STOP_PAYLOADS.has(msg.interactive.button_reply.id);
  if (msg.type === 'text')    return STOP_WORDS.some(r => r.test(msg.text.body));
  return false;
}

// Record the withdrawal as an event, never as an overwrite of the opt-in.
await consent.append(contactId, {
  action: 'WITHDRAWN', scope: 'marketing',
  source: 'whatsapp_button', at: new Date().toISOString(),
});
Consent checklist

Seven things a defensible opt-in system does.

  • Names the business and the channel in the wording the person actually saw.
  • Requires an action. Nothing is pre-ticked and nothing is bundled into terms.
  • Separates transactional scope from marketing scope, and stores both.
  • Keeps the exact wording, source and timestamp, not a boolean column.
  • Treats every withdrawal as an appended event, so history is never overwritten.
  • Matches opt-out across keywords, local languages and button payloads.
  • Shares one suppression list across every channel the business sends on.
Watch out for

No gate at send time means a bigger gate later.

The first template you send to a list you never earned will go out perfectly. So will the thousandth. The consequence arrives days later as a quality rating in red, a messaging tier taken away, and in the worst case a policy review of the whole account. Because there is no checkpoint at send time, consent has to be enforced by your own code: audiences built from scope, suppression applied before the queue, and no path in the product that lets an operator message a contact who never agreed.

Opt-in: FAQ

The consent questions that decide whether a WhatsApp programme lasts.

Not in advance, and that is what misleads people. There is no endpoint to submit consent to and no approval step for your list. Meta enforces after the fact, through the behaviour of the people you message: blocks and reports drive your quality rating down, a red rating costs you a messaging tier, and a policy review can restrict the account. The absence of a checkpoint is not permission, it is deferred enforcement with a much higher penalty.
Anywhere the person can genuinely understand and agree: a web form, a checkout flow, an in-store tablet, a phone call your agent logs, an email confirmation, a chat on another channel, or a QR code. Meta removed the old requirement to collect consent through a specific channel. What has not changed is the substance: the person must know they will receive WhatsApp messages, must know which business will send them, and must take a deliberate action rather than fail to untick something.
No. A pre-ticked box is the classic example of consent that fails both platform policy and most privacy law, because the person did nothing. The same objection applies to burying permission in general terms and conditions, to bundling WhatsApp consent with acceptance of a privacy policy, and to treating a purchase as implicit agreement to marketing. If the person could complete the action without noticing, it is not an opt-in.
In practice yes, and it will make your programme healthier regardless of jurisdiction. Someone who ticked a box to get delivery notifications did not agree to weekly promotions, and messaging them anyway is what produces the report reason that damages you most. Store scope with the consent, then let your campaign audience be built from scope rather than from "everyone we have a number for".
Make it visible and make it instant. Put a stop instruction in the footer of marketing templates or attach a quick-reply button, and process the reply automatically rather than through a human queue. The commercial reason is blunt: an easy opt-out turns an annoyed recipient into a quiet unsubscribe, while a hidden one turns them into a block, and only one of those two damages your quality rating and your messaging limit.
No, and you have to satisfy both. Meta policy governs whether your account survives. Privacy and marketing law governs whether you get fined. GDPR and ePrivacy in Europe, national rules such as the KVKK regime and the commercial-message registry in Turkey, and equivalent regimes elsewhere all impose their own requirements on evidence, purpose limitation and withdrawal. A consent record that satisfies the strictest jurisdiction you operate in is the only one worth building.
Ready to ship

Consent you can actually prove.

Pinlyx stores the wording, source, scope and every withdrawal, then builds campaign audiences from consent instead of from a contact list.

Free forever plan · GDPR-ready · No credit card required

We value your privacy

We use cookies to improve our site, analyze traffic, and personalize ads. You can accept all, reject non-essential, or customize your choices. Read our Cookie Policy.