> ## Documentation Index
> Fetch the complete documentation index at: https://knowledge.flowella.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Opt-out not honoured

> Why a WhatsApp contact who opted out is still receiving messages from Flowella, and how to fix the cause without breaking the rest of your sends.

Flowella blocks outbound sends to opted-out contacts automatically — but the block is **per channel**. If a contact tells you they're still hearing from you after opting out, work through the checks below.

For how the opt-out list works in general, see [Opt-outs](/app/opt-outs). For multi-channel context, see [Multi-channel](/essentials/multi-channel).

## 1. Confirm the opt-out actually registered

Open **Contacts → Opt-outs** and search for the contact's phone number.

* **Listed, active**: Flowella will block sends from the channel where they opted out.
* **Listed, revoked**: A teammate cleared the opt-out, manually or via the API. Re-add it.
* **Not listed**: The opt-out never registered. See section 2.

## 2. The opt-out keyword wasn't recognised

By default, Flowella treats common keywords as opt-out triggers (for example `STOP`, `UNSUBSCRIBE`). The match is case-insensitive but typo-sensitive. If the contact wrote `please stop messaging me` rather than just `STOP`, no automatic opt-out fires.

You can:

* Manually add the contact to the opt-out list from the inbox or **Contacts → Opt-outs**.
* Add a quick-reply button to your templates that explicitly says "Unsubscribe" and routes to your opt-out handling.

## 3. The contact opted out on a different channel

Opt-outs are recorded **per WhatsApp channel** because consent is given to a specific business sender. If the same contact is messaged from two channels in your org and only opted out on Channel A, sends from Channel B continue.

Decide which model you want and apply consistently:

<Tabs>
  <Tab title="Strict — replicate across all channels">
    Replicate the opt-out across every channel using the API. Repeat for each channel. See the [opt-outs endpoint](/api-reference/openapi.json).

    <CodeGroup>
      ```bash cURL theme={null}
      curl -X POST https://api.flowella.io/v1/opt-outs \
        -H "Authorization: Bearer flo_…" \
        -H "Content-Type: application/json" \
        -d '{"action":"set","whatsappChannelId":"<id>","phone":"+44…"}'
      ```

      ```js Node.js theme={null}
      await fetch("https://api.flowella.io/v1/opt-outs", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.FLOWELLA_API_KEY}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          action: "set",
          whatsappChannelId: "<id>",
          phone: "+44…",
        }),
      });
      ```

      ```python Python theme={null}
      import os, requests

      requests.post(
          "https://api.flowella.io/v1/opt-outs",
          headers={
              "Authorization": f"Bearer {os.environ['FLOWELLA_API_KEY']}",
              "Content-Type": "application/json",
          },
          json={
              "action": "set",
              "whatsappChannelId": "<id>",
              "phone": "+44…",
          },
      )
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Per-brand — keep separate">
    Keep opt-outs separate per channel. Make sure your privacy notice tells contacts that opting out of Brand A does not opt them out of Brand B.
  </Tab>
</Tabs>

## 4. A workflow re-enrols opted-out contacts

If a HubSpot workflow keeps trying to message the same opted-out person, the action will fail at the Flowella side (returning `Contact opted out`) — but the contact may still see the workflow attempt.

Add a HubSpot enrolment criterion that excludes contacts whose `WhatsApp opt-out` property is true. Update that property whenever Flowella records an opt-out using a webhook subscriber or a periodic sync.

Alternatively, subscribe to the [`optout.created` webhook](/api-reference/webhooks) and write back to HubSpot in real time.

## 5. The contact never opted in cleanly to begin with

This is a policy issue rather than a bug, but worth flagging: WhatsApp requires **explicit, unambiguous opt-in** before any business-initiated message. If the contact says "I never agreed to this", investigate how they ended up on your list. Add the opt-out, apologise, and review your collection process.

## 6. The block is working, but they still receive a final message in flight

Outbound sends are queued before the recipient list is finalised. A message that's already in Meta's send queue may still deliver in the seconds after an opt-out is recorded. This is rare and self-corrects within a minute.

## Still seeing messages reach an opted-out contact?

<Note>
  Capture the following before contacting [support](https://flowella.io/support):

  * The contact's phone number
  * The channel ID and name
  * The exact send time

  We can audit the send path end-to-end.
</Note>
