# Double Opt-In

Verify subscriber intent with confirmation emails.

## What is double opt-in?

Double opt-in (DOI) is a two-step subscription process. When a contact is added to a list
that has double opt-in enabled, they are not immediately treated as a confirmed member.
Instead, SendBeam sends them an automated confirmation email. Only after they click the
confirmation link do campaigns sent to that list reach them.

This is in contrast to *single opt-in*, where a contact is a full member of the list
the moment their address is collected — for example, when they submit a sign-up form.

> Double opt-in is configured **per list**. You can have some lists with it enabled and others without, depending on how you are collecting subscribers for each list. On the **Free plan** every list behaves as double opt-in, whatever the setting, and campaigns to *All Contacts* or a segment also reach only contacts who have confirmed a subscription.
> 

## Why it matters

Enabling double opt-in delivers measurable improvements across three key areas:

- **List quality** — only people who genuinely want your emails make it through.
  Typos, fake addresses, and disinterested sign-ups are filtered out before they reach your
  confirmed audience.
- **Deliverability** — engaged subscribers who confirmed their intent are far less
  likely to mark your emails as spam. A lower complaint rate protects your sender reputation
  and keeps your emails landing in the inbox rather than junk folders.
- **Compliance** — in regions covered by GDPR, CASL, and similar regulations,
  double opt-in provides a clear record of consent: the confirmation happens from the
  subscriber's own inbox.
- **Engagement rates** — open and click rates are consistently higher on double
  opt-in lists because every subscriber on the list actively chose to be there.

> If you are building a list from a public sign-up form on your website, double opt-in is strongly recommended. It is the single most effective step you can take to protect your sender reputation when growing an audience from cold traffic.
> 

## How the confirmation flow works

Here is the complete journey a subscriber takes when double opt-in is enabled:

1. **The contact is added to the list** — through a SendBeam sign-up form, from the
  list's page in the dashboard, or via the API.
2. **Unconfirmed membership** — SendBeam creates the contact record (if it does not
  already exist) and adds them to the list as **unconfirmed**. Campaigns sent to the
  list skip them while they are in this state.
3. **Confirmation email sent** — SendBeam immediately sends a confirmation email from
  your workspace's sender address with the subject "Please confirm your subscription to
  *list name*" and a single confirmation button. At most one confirmation goes to an
  address every 10 minutes, and each one counts towards the account's monthly email allowance.
4. **Contact clicks the link** — SendBeam verifies the token and marks their
  membership of the list as **confirmed**. From then on, campaigns sent to the
  list include them, and any automation with the *List Joined* trigger for this list
  starts for them now — not when they were first added.
5. **Confirmation page shown** — the subscriber sees a SendBeam-hosted
  "Subscription confirmed" page. A link that has already been used shows an "expired or
  invalid" page instead.

If the contact never clicks the confirmation link, they remain unconfirmed on that list and
campaigns sent to it will not reach them. Their contact status stays **Subscribed**,
so on paid plans campaigns sent to *All Contacts* or to a segment can still include
them — keep form-fed lists as the audience for those contacts if you want the confirmation to
gate every send. On the Free plan the confirmation gates every send: unconfirmed contacts,
including any imported from CSV or created through the API, are not mailed by any campaign.

> Adding a contact to a double opt-in list from the list's page or via the API also sends the confirmation email (and holds the *List Joined* trigger until they confirm), so avoid bulk-adding an existing audience to such a list unless you want them all to re-confirm. The API response reports this as `"membership": "pending_confirmation"`, and posting the same contact again while they are unconfirmed re-sends the link. Contacts brought in by CSV import are not added to any list.
> 

## Enabling double opt-in on a list

1. Go to **Lists** in the sidebar and open the list (or tick **Require double opt-in** in the **Create New List** form for a new one).
2. Expand **List details** at the top of the list page.
3. Tick or untick **double opt-in** and save.

The change applies to people who join from then on. Existing members are not asked to
re-confirm and keep whatever confirmation state they had. Unconfirmed members are counted at the
top of the list page ("N awaiting confirmation") and badged in the members table.

## Sending confirmations to pending members

A bulk add from the Contacts page and a CSV import with a list chosen put people on a double
opt-in list as *unconfirmed* and send nothing — importing a thousand rows must not fire a
thousand emails by accident. When you do want those people asked, click
**Send confirmation emails** next to "N awaiting confirmation" at the top of the
list page. It mails only members who have not confirmed (someone who clicks the link between
your selection and the send is never mailed again), skips anyone who was sent any transactional
email in the last 24 hours, and sends at most 500 per run — run it again later for the rest.
Each email counts against your monthly allowance, and five provider refusals in a row (plan
quota, a paused workspace, a sending-domain problem) stop the run. The result says how many
were sent, skipped and still pending.

From a script: `POST /api/v1/lists/{id}/confirmations` (key with
`lists:write`), optionally with `contact_ids` to limit the run to some
members. A single opt-in list answers `422`. No other platform ships this: most cannot
re-send a confirmation at all.

---
Source: https://sendbeam.io/docs/lists/double-optin
