Getting Subscribers & Opt-Ins
Before you can send campaigns, you need subscribers — contacts who have explicitly agreed to receive your messages on a specific channel. This guide explains how opt-ins work in SendSeven: how lists organize your subscribers, how the automatic START/STOP keywords work on every channel, what the default list is, and how contact identifiers differ between channels.
SendSeven gives you the technical tools to collect and manage opt-ins, but you are responsible for having the actual permission of every person you message. Importing a contact and marking them as subscribed does not create consent — it records consent you have already obtained elsewhere. Messaging people without permission violates the platform policies of WhatsApp, Meta, and Telegram, anti-spam laws (GDPR, ePrivacy, TCPA, CAN-SPAM), and SendSeven's terms of service.
Lists: How Subscribers Are Organized
Subscriptions are managed through lists (Settings → Lists or the Lists API). There are three list types, but only one matters for opt-ins:
| List type | Purpose |
|---|---|
static | Manually curated contact collections |
dynamic | Rule-based segments (filters) |
newsletter | Opt-in/opt-out categories — subscribers join and leave these themselves |
A newsletter list represents one category of communication your contacts can subscribe to — for example "Product News", "Weekly Deals", or "Order Updates". Each newsletter list has:
| Field | Description |
|---|---|
slug | URL-safe short name, auto-generated from the list name (e.g. weekly-deals). Used in keywords (stop weekly-deals) and deep links. |
is_default | Marks this list as the tenant's default list (see below). Only one list can be the default. |
newsletter_config.welcome_message | Message sent when someone subscribes |
newsletter_config.goodbye_message | Message sent when someone unsubscribes |
newsletter_config.auto_subscribe_via_deeplink | Whether deep links (t.me/...?start=...) can subscribe to this list (default: on) |
A subscription is always per contact, per list, per channel. A contact can be subscribed to "Weekly Deals" on WhatsApp but not by email — those are two separate subscriptions with independent opt-in and opt-out.
The Default List
One newsletter list per workspace can be marked as the default list. The default list is what makes the simple keywords work:
- A contact who sends just
startis subscribed to the default list. - A contact who sends just
stopis unsubscribed from the default list.
No slug or category name needed. This is what you want for most promotion material: "Text START to +49 151 2345678" is a much better call to action than "Text START WEEKLY-DEALS ...".
If you have not set a default list, bare start/stop keywords are ignored — so set one before printing QR codes on your packaging.
PUT /api/v1/lists/{list_id}
{
"is_default": true
}
Setting a new default automatically unsets the previous one.
START / STOP Keywords
SendSeven automatically processes opt-in and opt-out keywords on all messaging channels — WhatsApp, Telegram, Facebook Messenger, Instagram, and SMS. No bot or flow setup is required; this works out of the box. (Email works differently — see Double Opt-In below.)
Keywords are case-insensitive (STOP, Stop, and stop all work), and they are processed before any bot or flow: even if an AI assistant or automation is active in the conversation, an opt-in/opt-out keyword is always handled — and answered — by the subscription system, never by the bot.
Opt-in keywords
| Message | Effect |
|---|---|
start or subscribe | Subscribe to the default list |
start <slug> or subscribe <slug> | Subscribe to the list with that slug (e.g. start weekly-deals) |
After subscribing, the contact receives the list's welcome message — configurable per list, with this default:
Welcome! You've successfully subscribed to our updates. Reply 'stop' to unsubscribe at any time.
Opt-out keywords
| Message | Effect |
|---|---|
stop | Unsubscribe from the default list |
stop <slug> | Unsubscribe from the list with that slug (e.g. stop weekly-deals) |
stop all | Unsubscribe from every list on that channel |
unsubscribe, cancel, stopp, abbestellen, arret / arrêt | Total opt-out — unsubscribe from every list on that channel (same as stop all) |
The multilingual total opt-out keywords (English, German, French) must be the entire message on chat channels — a message that merely contains the word cancel in a sentence is not an opt-out.
After unsubscribing, the contact receives the list's goodbye message — configurable per list, with this default:
You've been unsubscribed. Reply 'start' to subscribe again.
SMS compliance keywords
On SMS, regulatory requirements are stricter: the total opt-out keywords (STOP, UNSUBSCRIBE, CANCEL, STOPP, ABBESTELLEN, ARRET/ARRÊT) are matched as whole words anywhere in the message and unsubscribe the contact from all SMS lists at once. The contact receives a confirmation and can re-subscribe at any time by replying START.
Keyword opt-outs are processed before everything else — including bots, AI assistants, and flows — and cannot be disabled. Campaigns automatically exclude unsubscribed contacts — you don't need to filter them yourself.
Deep Links: Pre-Filled Opt-Ins
The fastest way to get subscribers is a link (or QR code) that opens the messenger with the opt-in message already filled in — the user just hits send. The Promotion tools section on the Widgets page generates these links, QR codes, and ready-made promo images for all your channels. Under the hood they work like this:
| Channel | Link format | How the list is selected |
|---|---|---|
https://wa.me/<number>?text=start | Pre-filled message text (start or start <slug>) | |
| Telegram | https://t.me/<bot>?start=newsletter_<list_id> | The start parameter is delivered with the user's first tap on "Start" |
| Messenger | https://m.me/<page_id>?ref=newsletter_<list_id> | The ref parameter arrives with the first message |
https://ig.me/m/<username> | Opens a DM thread — for direct contact, not newsletter opt-ins (see note) | |
| SMS | sms:<number>?&body=start | Pre-filled message body |
Instagram's platform policies do not allow newsletter-style bulk messaging, so there is no subscribe flow for Instagram. Use Instagram links to start conversations ("Contact us on Instagram"); opt-out keywords still work there as everywhere else.
Email has no keyword path — emails sent to your sender address are not processed for start keywords. Collect email subscribers with the newsletter signup widget instead, which puts them through double opt-in.
Telegram and Messenger deep-link parameters can carry one or more list references (list IDs or slugs separated by _), so a single tap can subscribe a contact to multiple categories. For lists you don't want joinable by link, disable auto_subscribe_via_deeplink in the list's newsletter settings.
You can also fetch a ready-made signup link and QR code for any newsletter list via the API:
GET /api/v1/lists/{list_id}/signup-options?include_qr=true
Double Opt-In (Email)
Email works differently from the messenger channels: there are no inbound keywords. Subscribers sign up through the newsletter signup widget on your website (or via the API), and SendSeven supports double opt-in: the contact receives a confirmation email with a link and only becomes subscribed after clicking it. Until then the subscription is pending and the contact receives no campaigns.
- Confirmation links are valid for 24 hours.
- The confirmation email uses a system default template that you can copy and customize per workspace under Reach → Email → Double opt-in templates.
- Double opt-in is strongly recommended for email (and legally required in some jurisdictions, e.g. Germany).
Messenger channels don't need double opt-in in the same way: the opt-in keyword is itself sent from the user's verified account (their phone number, Telegram account, or Meta profile), which makes it a verifiable, user-initiated action.
Channel Identifiers: What You Can Import
Every subscription is tied to a contact method — the identifier used to reach the contact on that channel. The identifiers differ fundamentally between channels, and that determines what you can import:
| Channel | Identifier | Importable? |
|---|---|---|
| Phone number (E.164) | ✅ Yes | |
| SMS | Phone number (E.164) | ✅ Yes |
| Email address | ✅ Yes | |
| Telegram | Chat ID (scoped to your bot) | ❌ No |
| Facebook Messenger | PSID (scoped to your page) | ❌ No |
| IG-scoped user ID (scoped to your account) | ❌ No |
Importing WhatsApp, Email, and SMS subscribers
Phone numbers and email addresses are global identifiers — they mean the same thing everywhere. If you already have opted-in contacts from another system, you can import them via Contact Import and set their list subscriptions in the same request:
POST /api/v1/contacts/import
Pass subscriptions to subscribe imported contacts to lists per channel:
[
{ "channel_type": "whatsapp", "list_id": "<list_id>" },
{ "channel_type": "email", "list_id": "<list_id>" }
]
Imports that create subscriptions require you to confirm that you have the contacts' opt-in (optin_confirmed=true). The subscription's opt-in method is recorded as import — keep your own proof of the original consent (signup form, order checkbox, etc.).
Why Telegram, Messenger, and Instagram IDs cannot be imported
These platforms don't expose phone numbers or global user IDs to businesses. Instead they use scoped IDs:
- Messenger assigns each user a page-scoped ID (PSID) — the same person has a different ID for every Facebook page they talk to.
- Instagram works the same way with IG-scoped user IDs per professional account.
- Telegram identifies users by a chat ID that only your specific bot can message.
A scoped ID from another system (or another page/bot) is meaningless for your channel — there is no way to translate it. The ID for your channel only comes into existence when the user messages you first. This is deliberate anti-spam design by Meta and Telegram: businesses cannot buy or transfer messenger audiences; every subscriber must initiate contact themselves.
That's why growing these channels is all about getting the first inbound message — deep links, QR codes, "Message us" buttons, and website widgets that open the conversation with the opt-in keyword pre-filled. As soon as the user's first message arrives, SendSeven creates the contact method automatically and processes the opt-in.
Opt-In Methods Reference
Each subscription records how consent was obtained:
opt_in_method | Meaning |
|---|---|
keyword | Contact sent a START/subscribe keyword or used a deep link |
widget | Signup via the website newsletter widget |
double_opt_in | Confirmed via double opt-in email link |
single_opt_in | Direct signup without confirmation step |
import | Imported with optin_confirmed=true — consent obtained outside SendSeven |
api | Created via the API |
manual | Added manually by a team member |
Next Steps
- Generate links, QR codes, and promo images: the Promotion tools section on the Widgets page in the app
- Send your first campaign: Messaging Campaigns · Email Campaigns
- Collect signups on your website: newsletter widget (
Widgets → Create Widget)