Skip to main content

Promotion Tools

Promotion Tools turn your connected channels into growth assets: direct links, QR codes, ready-made promo images, HTML snippets, and printable one-pagers — each with the correct opt-in pre-filled, so a scan or a tap is all it takes for a customer to subscribe.

You'll find them in the app on the Widgets page, in the Promotion tools section below your widgets. This page explains what they generate, how the automatic opt-in works behind each asset, and the API endpoints if you want to build your own integration.

Read first

If you haven't yet, read Getting Subscribers & Opt-Ins — it explains lists, the default list, and the START/STOP keywords that all of these assets rely on.

What You Can Generate

AssetUse it for
Direct links"Message us" links for your website, email footers, social bios
Opt-in linksLinks that open the messenger with the subscribe action pre-filled
QR codesPrint, packaging, posters, table displays — PNG or SVG
Promo imagesReady-made branded cards (social post, story, banner, print) with an embedded QR code
HTML snippetsCopy-paste channel buttons, badges, and email-signature blocks
Printable one-pagerAn A4 sheet per channel with QR code and instructions for counter displays

All assets are generated per channel and per list: pick the default list (subscribers just send start) or a specific category, and every link, QR code, and image is built accordingly.

How the Opt-In Works per Channel

Each asset embeds a channel-specific deep link. What happens when a customer uses it:

ChannelThe linkWhat happens
WhatsApphttps://wa.me/<number>?text=startWhatsApp opens with "start" pre-filled; the customer taps send and is subscribed
Telegramhttps://t.me/<bot>?start=newsletter_<list_id>Telegram opens your bot; tapping "Start" delivers the list reference and subscribes them
Messengerhttps://m.me/<page>?ref=newsletter_<list_id>Messenger opens your page; the ref arrives with their first message and subscribes them
Instagramhttps://ig.me/m/<username>Instagram opens a DM thread — contact only: Instagram's policies don't allow newsletters, so Instagram assets use "Contact us" framing instead of "Subscribe"
SMSsms:<number>?&body=startThe SMS app opens with "start" pre-filled

Email is the exception: there is no keyword path — emails to your sender address are not scanned for start. For email, Promotion Tools instead point you to the newsletter signup widget (subscribers confirm via double opt-in) and to the double opt-in email template, which you can copy from the system default and customize under Reach → Email → Double opt-in templates.

For all messenger channels the subscription, the welcome message, and later STOP handling are fully automatic — no bot or flow required, and opt-in/opt-out keywords are processed before any active bot or flow, so an unsubscribe never gets swallowed by an assistant. The contact record and channel identifier are created from the customer's first message, which is exactly how the scoped-ID channels (Telegram, Messenger, Instagram) get populated at all.

Telegram and Messenger links can carry multiple lists in one payload (list references joined with _), so one tap can subscribe a customer to several categories.

Hosted, Cacheable Asset URLs

QR codes and promo images are served as stable public image URLs — generated on first request, then cached at the CDN edge. You can embed them directly in your website, emails, or CMS without downloading anything:

<img src="https://api.sendseven.com/api/v1/public/promo/card?channel=whatsapp&template=banner&title=Acme%20GmbH&...&sig=..." />

The URLs are signed (sig parameter), so they can't be tampered with — change any parameter and the URL stops working. Get signed URLs from the Promotion tools page (copy button on any asset) or via the API below.

API Reference

Get your promotion options

GET /api/v1/promo/options

Requires widgets:read. Returns your newsletter lists, your active channels with their public identifiers, and pre-built links:

{
"tenant_name": "Acme GmbH",
"asset_base_url": "https://api.sendseven.com/api/v1/public/promo",
"lists": [
{ "id": "…", "name": "Weekly Deals", "slug": "weekly-deals", "is_default": true }
],
"channels": [
{
"channel_id": "…",
"channel_type": "whatsapp",
"display_name": "Acme Support",
"identifier": "+4915123456789",
"identifier_type": "phone",
"links": {
"direct": "https://wa.me/4915123456789",
"default_list": "https://wa.me/4915123456789?text=start",
"per_list": { "<list_id>": "https://wa.me/4915123456789?text=start%20weekly-deals" }
}
}
]
}

Create a signed asset URL

POST /api/v1/promo/sign

Requires widgets:read. Pass the asset type and its parameters; get back a permanent, publicly cacheable image URL.

QR code (png or svg, 128–2048 px). Pass logo with a channel type to embed the official channel logo in the center ("art QR" — PNG only; error correction is raised automatically so the code stays scannable):

{
"asset": "qr",
"params": { "data": "https://wa.me/4915123456789?text=start", "size": 1024, "format": "png", "logo": "whatsapp" }
}

Promo card (branded image with embedded QR):

{
"asset": "card",
"params": {
"channel": "whatsapp",
"target": "https://wa.me/4915123456789?text=start",
"title": "Acme GmbH",
"subtitle": "+49 151 2345678",
"cta": "Scan & send START to subscribe",
"template": "square"
}
}

Card templates: square (1080×1080, social posts), story (1080×1920), banner (1200×628, link previews/ads), print (1480×2100, high-res for print).

Response:

{ "url": "https://api.sendseven.com/api/v1/public/promo/card?channel=whatsapp&…&sig=3f2a…" }

Good Practices

  • Set a default list first. Plain start/stop only work with a default list — and "Text START" is the strongest call to action you can print.
  • Always mention how to opt out ("Reply STOP to unsubscribe") in printed material — it's required by most anti-spam regulation and builds trust.
  • The link is not the consent. Someone scanning your QR code and sending START is a real opt-in. Adding numbers to a list because they once scanned something is not.
  • Test with your own phone before printing: scan the QR, send the message, and check that the welcome message and list subscription look right.

Next Steps