> For the complete documentation index, see [llms.txt](https://messagebird.gitbook.io/applications/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://messagebird.gitbook.io/applications/audience/contacts/concepts/consent-and-subscriptions/subscription-and-suppression-contact-pathways.md).

# Subscription and Suppression Contact Pathways

## SMS, Email & WhatsApp

### Subscription & Suppression Pathways

A reference guide to how Bird decides whether a marketing, transactional, or test message reaches a contact — and which dashboard settings change that outcome.

This guide covers only settings and behavior available today in the Bird dashboard. It does not cover internal engineering configuration.

## 1. Two separate decisions

Whether a contact receives a message is the result of two separate decisions, made at two different times. Understanding the difference is the key to explaining most delivery questions.

{% stepper %}
{% step %}

### Who is included (audience selection)

When a campaign or broadcast is built, Bird resolves the list of recipients from the lists, segments, and filters chosen in the campaign builder. This happens once, before sending starts.
{% endstep %}

{% step %}

### What is actually sent (the send-time check)

Immediately before each individual message goes out, Bird runs it through a set of automated checks described in Section 2. This happens separately for every message, regardless of how the recipient was selected.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
These two steps are independent. A contact can be included in a campaign's recipient list and still not receive the message, because the send-time check blocks it. This is the most common source of “why didn't this contact get my message” questions.
{% endhint %}

## 2. The send-time check

On SMS, Email, WhatsApp, and RCS, before Bird sends a message it runs up to three checks, in order. As soon as one check blocks the message, the remaining checks are not evaluated and the message does not go out.

### 2.1 Compliance check — always runs

Looks for a permanent, legally significant block on the destination: a bounced or invalid email address, a spam complaint, or a contact who has legally opted out (for example, replying STOP to an SMS, or clicking unsubscribe). This check runs on every message, including transactional messages and one-time passcodes.

### 2.2 Suppression list check — skipped only for test sends and time-sensitive messages

Looks at whether the contact has been placed on a suppression list for that category of message (marketing or transactional) — either because the contact asked to stop receiving that category, or because someone at your company suppressed them manually or through a contact import. This check is skipped only for message previews (test sends) and safety- or time-critical automated messages such as one-time passcodes and emergency notices.

### 2.3 Subscription status check — only runs for marketing messages

Looks at the contact's Subscribed to SMS / Subscribed to Email / Subscribed to WhatsApp attribute. This check only runs when the message is classified as Marketing (see Section 3).

* Unsubscribed → the message is blocked.
* Blank / never set → the message is allowed. A contact with no recorded preference is treated as reachable for marketing.
* Subscribed → the message is allowed.

## 3. Why the message type matters

Every message is classified before Bird decides which checks from Section 2 to run. The classification usually comes from how the sending channel is configured, or from the type of send.

* **Marketing** — a campaign, or a channel/number configured for promotional content. All three checks apply.
* **Transactional** — a channel configured as Transactional or Conversational, or a message explicitly sent as transactional (for example, an order confirmation or a one-time passcode). The Compliance and Suppression list checks apply; the Subscription status check does not.
* **Test send, one-time passcode (2FA), or emergency notice** — only the Compliance check applies.

{% hint style="info" %}
This is why a contact who has unsubscribed from marketing can still receive an order confirmation, a delivery update, or a login verification code — those are transactional, and the subscription status check does not apply to them. A legal STOP request or a bounce still blocks every message type, including transactional ones.
{% endhint %}

**Table 1.** Which checks apply, by message type

| **Message type**                      | **Compliance check** | **Suppression list check** | **Subscription status check** |
| ------------------------------------- | -------------------- | -------------------------- | ----------------------------- |
| Marketing / campaign                  | **Applies**          | **Applies**                | **Applies**                   |
| Transactional (order updates, alerts) | **Applies**          | **Applies**                | **Skipped**                   |
| One-time passcode (2FA) / emergency   | **Applies**          | **Skipped**                | **Skipped**                   |
| Test send (preview)                   | **Applies**          | **Skipped**                | **Skipped**                   |

*“Applies” means the check can block the message; “Skipped” means that check is never evaluated for this message type.*

## 4. Channel settings that change this behavior

Under Settings › Connectivity › Channels › \[your number or domain] › gear icon, two toggles are available on some channels. Both are switched off by default.

### 4.1 Manage Suppressions

*“Allow sending marketing messages to contacts with any suppression status.”*

When turned on, Bird skips all three checks described in Section 2 for every message sent from that channel — not only marketing messages. This includes bypassing legally required opt-outs (STOP requests) and bounce or complaint suppression.

{% hint style="warning" %}
Because this removes the Compliance check as well, turning this on removes Bird's entire automated safety net for that channel. It should be treated as an exception for a specific, understood use case — not a routine setting.
{% endhint %}

**Available on: SMS, Email, and WhatsApp channels.**

### 4.2 Manage Exclusions

*“Allow sending marketing messages to contacts with blank Subscription status.”*

This setting only changes which contacts are pulled into a campaign's recipient list at Step 1 (Section 1). It does not change the send-time check in Section 2 — a blank subscription status already passes that check by default. It never overrides a contact whose status is explicitly Unsubscribed; those contacts stay out of the audience either way.

**Available on: Email and WhatsApp channels, and on Push and App Inbox applications.**

{% hint style="info" %}
This setting does not appear on SMS channels. SMS channel settings only offer Manage Suppressions.
{% endhint %}

**Table 2.** Where each toggle is available

| **Channel**                                                            | **Manage Suppressions** | **Manage Exclusions** |
| ---------------------------------------------------------------------- | ----------------------- | --------------------- |
| SMS                                                                    | **Available**           | Not available         |
| Email                                                                  | **Available**           | **Available**         |
| WhatsApp                                                               | **Available**           | **Available**         |
| Push (application)                                                     | Not applicable          | **Available**         |
| App Inbox (application)                                                | Not applicable          | **Available**         |
| RCS                                                                    | Not currently available | Not available         |
| Voice, Messenger, Instagram, Telegram, LINE, Viber, and other channels | Not available           | Not available         |

### 4.3 Which channels the send-time check applies to at all

The automated three-part check in Section 2 currently runs on SMS, Email, and WhatsApp, and RCS. Other channels do not currently receive this automated protection, so subscription and suppression status have no automatic effect on those channels.

## 5. Scenario reference tables

Use these tables to explain a specific delivery outcome to a customer.

**Table 3.** Manage Suppressions — effect on a marketing message

| **Contact status**                                       | **Manage Suppressions OFF (default)** | **Manage Suppressions ON** |
| -------------------------------------------------------- | ------------------------------------- | -------------------------- |
| Subscribed                                               | **Delivered**                         | **Delivered**              |
| Blank / never set                                        | **Delivered**                         | **Delivered**              |
| Unsubscribed (marketing)                                 | **Blocked**                           | **Delivered**              |
| On suppression list — legal opt-out / bounce / complaint | **Blocked**                           | **Delivered**              |
| On suppression list — added manually or via import       | **Blocked**                           | **Delivered**              |

{% hint style="warning" %}
Outcomes shown in amber under “ON” are exactly the deliveries this setting exists to enable — and exactly the ones to double-check before turning it on for a channel.
{% endhint %}

**Table 4.** Manage Exclusions — effect on a campaign's recipient list

| **Contact subscription status** | **Manage Exclusions OFF (default)** | **Manage Exclusions ON** |
| ------------------------------- | ----------------------------------- | ------------------------ |
| Subscribed                      | **Included**                        | **Included**             |
| Blank / never set               | **Excluded from audience**          | **Included in audience** |
| Unsubscribed                    | **Excluded**                        | **Excluded**             |

*Unsubscribed contacts are excluded either way — this setting only ever affects contacts with a blank status.*

**Table 5.** Putting it together — a marketing SMS/Email/WhatsApp send, default settings

| **Contact status**                            | **In campaign audience?**                                | **Passes send-time check?** | **Result**                          |
| --------------------------------------------- | -------------------------------------------------------- | --------------------------- | ----------------------------------- |
| Subscribed                                    | **Yes**                                                  | **Yes**                     | **Delivered**                       |
| Blank / never set                             | **No (unless Manage Exclusions is on for that channel)** | **Yes**                     | **Not sent — excluded before send** |
| Unsubscribed                                  | **No**                                                   | **No**                      | **Not sent**                        |
| Legally opted out (STOP / bounce / complaint) | **Usually no**                                           | **No**                      | **Not sent**                        |

## 6. Other places a contact's status can change

Outside of the channel settings above, a contact's suppression or subscription status can also change through:

* **Manual suppression management** — adding or removing a contact from the Suppressions list directly in the dashboard.
* **Contact opt-in / opt-out actions** — a contact's subscription attribute updates automatically when they use an unsubscribe link, reply STOP, or opt back in.
* **Contact imports and data connectors** — an import or sync can be configured to overwrite a contact's existing subscription status. This is a setting on the import or data flow itself, separate from the channel settings covered in Section 4, and is worth checking if a contact's status changed unexpectedly after a sync.

## 7. Quick reference

* Legal opt-out, bounce, or spam complaint → blocked on every channel and every message type, unless Manage Suppressions is turned on for that specific channel.
* Unsubscribed from marketing, but no legal opt-out on file → blocked from marketing messages only; still receives transactional messages and one-time passcodes.
* Subscription status never set → receives marketing messages by default at send time, but may be left out of a campaign's audience unless Manage Exclusions is on (Email/WhatsApp only).
* Manage Suppressions removes all automatic protection on a channel, including legal opt-outs — treat it as an exception, not a default.
* Manage Exclusions only widens who is included in a campaign; it never sends to someone who explicitly unsubscribed.
* Manage Exclusions is not available on SMS — only Manage Suppressions is.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://messagebird.gitbook.io/applications/audience/contacts/concepts/consent-and-subscriptions/subscription-and-suppression-contact-pathways.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
