Enable Double Opt-In

Turn on native confirmation so new subscribers must click a link before they receive campaigns.

Double opt-in keeps people off your marketing list until they prove they own the inbox. The signup is the first opt-in. The confirmation click is the second.

Enable it before you collect subscribers in a market that expects consent evidence (France, the EEA, and most public capture pages). Lumail's native flow is the supported one — do not invent a custom confirmation state machine with the transactional API.

What it does

With Enable Double Opt-In on:

  1. A new subscriber is created as PENDING_CONFIRMATION.
  2. Lumail sends your confirmation email from the organization's default sender.
  3. The subscriber clicks {{confirmUrl}}.
  4. Their status becomes SUBSCRIBED. Lumail stores confirmedAt and confirmationIp, writes a subscribed timeline event, and starts tag-triggered workflows.

Until that click, they do not receive campaigns or workflow marketing emails. Filter Subscribers → Pending Confirmation to see who is waiting.

How the confirmation works

Signup (form, API, capture page, integration)
        ↓
PENDING_CONFIRMATION  +  confirmation email (24h token)
        ↓
Click {{confirmUrl}}  →  /confirm?token=…
        ↓
SUBSCRIBED  +  confirmedAt / confirmationIp  +  workflows

The confirmation link is a single-use token URL. A second subscribe POST for the same pending address does not send a second email or rotate the token. If they never click, they stay pending — turning the setting off later does not subscribe them for you.

Existing SUBSCRIBED contacts are left alone when you enable the setting. Only new subscribers go pending.

Enable it

  1. Open Settings → Configuration. The URL is /orgs/[your-org]/settings/configuration.
  2. Find the Double Opt-In card.
  3. Turn Enable Double Opt-In on.
  4. Click Save.

Double Opt-In card on Settings → Configuration

The first card on Configuration. The switch is organization-wide.

ControlWhat it does
Enable Double Opt-InNew subscribers are PENDING_CONFIRMATION and get a confirmation email
Change email templateOpens the confirmation email editor (only after the switch is on)
SavePersists the switch. The email template is saved separately inside the editor

The card below it — Add transactional recipients to the marketing list — is a different path. Turning that on creates receipt/OTP recipients as SUBSCRIBED. Double opt-in does not apply there.

Customize the confirmation email

With the switch on, click Change email template.

Confirmation email editor with subject, preview, and {confirmUrl} button

Subject, preview, and body. The blue button must point at {{confirmUrl}}.

Data pointDetail
Subject / PreviewInbox subject and preview text. Defaults are Confirm your email address
{{confirmUrl}}Required. Type @ and pick Confirmation URL, or /confirm to insert the confirmation button
{{name}} / fieldsSame subscriber variables as campaigns. @ opens the menu
SnippetsType / to insert an organization snippet
Default senderConfirmation emails always send from the organization's default sender
Save emailWrites the template. Missing {{confirmUrl}} falls back to the default template

The recipient confirmation page (You're all set) follows Settings → Language, not the email body language. Translate the email yourself.

After they confirm

The subscriber timeline shows that they confirmed their email via the double opt-in link and subscribed to the list. The confirmation-link click is labeled as such, not as a generic URL click.

Workflows that start on subscriber created or tag added wait until confirmation. Tags attached at signup are replayed after the click so tag-triggered workflows enroll a real SUBSCRIBED contact.

Campaigns only target SUBSCRIBED. Pending contacts never enter a send.

What uses double opt-in

SourceNew subscriberConfirmation email
Capture pagePENDING_CONFIRMATIONSent
Subscribers API / SDK (POST /api/v1/subscribers or /api/v2/subscribers)PENDING_CONFIRMATIONSent (unless triggerWorkflows: false)
API / SDK with skipDoubleOptIn: trueSUBSCRIBEDNot sent — no confirmation token
ClickFunnels / Systeme.ioPENDING_CONFIRMATIONSent
Dashboard Add SubscriberPENDING_CONFIRMATIONSent only if Trigger workflows is on
Dashboard Add Subscriber with Skip double opt-inSUBSCRIBEDNot sent
CSV importSUBSCRIBED by defaultNot sent — import writes status directly
Transactional API / SMTP / lumail.emails.sendTRANSACTIONAL or SUBSCRIBEDIgnored. Not a custom double-opt-in mechanism
Resubscribe of UNSUBSCRIBED / TRANSACTIONALSUBSCRIBEDSkipped

skipDoubleOptIn defaults to false. New organizations have double opt-in on; existing organizations keep whatever they already stored. Trusted backends (checkout, server-side sync) should pass skipDoubleOptIn: true so those contacts stay SUBSCRIBED and tag-triggered workflows can enroll. Public forms must omit the flag.

triggerWorkflows: false still creates the pending subscriber when DOI is on. It skips the confirmation email. It is not a substitute for skipDoubleOptIn. Use skipDoubleOptIn for trusted sources; do not use either flag on a public form.

For the legal and evidence limits of confirmedAt / confirmationIp, see GDPR in Lumail.