Opt-out keyword handling

Updated

People can opt out of SMS messages by sending an opt-out keyword to your sender number—like STOP or UNSUBSCRIBE. In Customer.io, we respect your audience’s preferences and show you which senders people have opted out of, so you can see whether or not they’re eligible to receive your messages.

How it works

While Customer.io doesn’t handle SMS replies as a conversation, we capture opt-in and opt-out information so that we respect your audience’s preferences and show you which numbers people have opted out of.

Opt-out keyword handling works the same no matter which provider delivers your messages—Twilio, Sinch, Infobip, or Vonage. When someone texts an opt-out keyword like STOP to one of your senders, we mark them as opted out and stop sending them SMS from every provider you’ve connected, not just the one they replied to. If they later text an opt-in keyword like START, we opt them back in.

We show a list of opt-outs in the SMS Opt-outs section of any profile. This list updates in near real-time as people opt out or back into SMS messaging for a given phone number.

 Opt-outs affect all profiles with the same phone number

People can share the same phone number in Customer.io. When someone sends an inbound SMS to opt out of messages from an SMS sender identity, any profiles in the workspace that share the same phone numbers are also opted out of SMS messaging.
The SMS opt-outs section
The SMS opt-outs section

This list only shows explicit opt-outs for a given phone number. While it updates if someone opts out or into SMS messaging for a given phone number, it doesn’t show the numbers people have opted into.

flowchart LR a{Has user opted into
sender in the past?} a-->|Yes|b{Has user sent an opt-out
keyword to this sender?} b-->|Yes|c(Number is on the
opt-outs list) a-..->|No: user won't get SMS
from this number|d(Number doesn't appear
on the opt-outs list) b-.->|No: user can still get
SMS from this number|d

 This feature does not handle other opt-out or opt-in methods

This feature only reflects opt-out keywords people text to your senders. It doesn’t handle other opt-out methods—for example, if you change someone’s opt-in status manually in your provider’s console (like the Twilio console). Learn more

To capture opt-out keywords in the first place, Customer.io needs to receive your inbound SMS replies. If we manage SMS for you, this is already set up. If you bring your own provider account, copy the Inbound URL from your connection’s page and set it as the inbound webhook in your provider’s console—see Set up inbound message handling.

Opt-out and opt-in keywords

Carriers and Customer.io process these reserved keywords automatically as a matter of compliance, no matter which provider you send through. People don’t have to match the exact keyword—we normalize the supported terms below.

KeywordSupported termsWhat it does
STOPSTOP, CANCEL, UNSUBSCRIBE, OPTOUT, END, QUIT, REVOKE, STOPALLOpts the person out of SMS messages
STARTSTART, UNSTOPOpts the person back into SMS messages
HELPHELP, INFOTriggers a help or information response

Because we process these keywords automatically—outside of automation workflows—you shouldn’t use them as automation triggers or branch conditions. Instead, base your automation logic on the downstream effect (a change to opt-out status) rather than the keyword itself. See Respond to inbound keywords for more.

 Twilio also replies to STOP on its own

This is unique to Twilio. When someone texts a STOP keyword, Twilio sends its own confirmation reply telling the person they’ve been opted out. That reply doesn’t go through Customer.io and isn’t logged by us—Customer.io still logs the inbound message and reflects the opt-out. You can customize Twilio’s response with its Advanced Opt-Out feature.

Override an opt-out

You might want to remove someone from the list if they were mistakenly marked as opted out, or if you changed their opt-in status manually with your provider.

Removing an opt-out entry only removes the opt-out from the person in Customer.io; it doesn’t change their opt-out status with your provider. If a person is still opted out with your provider and you try to send them a message, the provider (or the carrier) can block the message and the opt-out will re-appear in Customer.io. For example, Twilio blocks messages to a recipient who texted STOP, regardless of what Customer.io sends.

To override an opt-out:

  1. Go to the People page.
  2. Select the person whose opt-out you want to override.
  3. Scroll to the SMS Opt-outs section and click Manage.
  4. Click Remove next to the number you want to override.
Remove an opt-out
Remove an opt-out

Segment users by SMS opt-out status

When you send an SMS message, we’ll automatically ignore members of your audience who’ve opted out of messages. You might segment profiles that have opted into or out of SMS messages to target the right profiles with SMS messages.

When you create a segment, you can use the Opt out condition to include or exclude people who’ve opted out of a particular sender number. Then you can use this segment as a filter for messages.

A segment condition showing users opted out of a particular sender number
A segment condition showing users opted out of a particular sender number

SMS opt-out in automations

When someone opts out of SMS messages but reaches an SMS message in an automation, we’ll skip the message. While this ensures that your automations comply with various regulatory requirements, it means you may skip parts of your automation workflow for certain users.

You can handle this situation gracefully by setting up segments containing people who’ve opted out of SMS messages and then filter people based on their opt-out status:

  • Use True/False branches to send someone alternative messages if they opt out of SMS.
    A True/False branch showing users opted out of a particular sender number
    A True/False branch showing users opted out of a particular sender number
  • Filter users out of your attribute or segment-triggered automation entirely by setting up a condition for the automation that excludes people who are in your opt-out segment.
    automation conditions that trigger an automation when someone is a paying customer but is not opted out of SMS
    automation conditions that trigger an automation when someone is a paying customer but is not opted out of SMS
  • Filter users out of your event-triggered automation entirely by setting an automation filter to exclude people who belong to your “people who opted out of SMS” segment.
    An automation filter showing users opted out of a particular sender number
    An automation filter showing users opted out of a particular sender number

Migrating opt-outs from Twilio

If you’ve used Twilio before joining Customer.io, you may have stored opt-out statuses that aren’t reflected in Customer.io. Contact Customer.io to ask us about migrating opt-outs from Twilio to Customer.io.

While this isn’t strictly necessary—any message sent from Customer.io through Twilio to a person who’s opted out of SMS will be blocked by Twilio—migrating opt-outs to Customer.io prevents you from skewing your delivery metrics as you populate opt-out information in Customer.io. It also can save you a bit of money: each message “bounced” by Twilio costs 1/10th of a message credit, which can add up as you populate opt-out information in Customer.io.

Migrate from a webhook-based opt-out solution

 If you’re new to Customer.io, you can skip this section.

If you started sending SMS messages after July 2025, you can skip this section. We’ll automatically capture opt-out status for you.

Before we supported SMS opt-out keywords in Customer.io, you might have set up a webhook to pass opt-out statuses to Customer.io and store them in an attributeA key-value pair that you associate with a person or an object—like a person’s name, the date they were created in your workspace, or a company’s billing date etc. Use attributes to target people and personalize messages.. You don’t need to do that anymore; our solution captures opt-out status automatically.

But, to bridge your old opt-out data with our newer opt-out solution, you’ll want to:

  1. Disable your opt-out webhook.
  2. Set up inbound messaging so we can capture opt-out statuses.
  3. Set up segments that capture both the old opt-out attribute and the newer opt-out per phone number. For example, to capture users who are opted-out of SMS messages from a particular sender number, your segment should allow Any of the following conditions:
    • The profile’s opt-out attribute is true.
    • The person is opted-out of SMS messages from a particular sender number.
      A segment condition showing users opted out of a particular sender number and the opt-out attribute
      A segment condition showing users opted out of a particular sender number and the opt-out attribute

FAQ

What if someone opts out without using a keyword?

Imagine someone wants to opt out of SMS, but they tell you via phone call, email, or another channel. In this case, you’ll need to manually update their status—either with your provider or in Customer.io (override the opt-out doesn’t apply here; instead add them to an opt-out segment or set your opt-out attribute).

If you change someone’s status with your provider (for example, in the Twilio console), it will not automatically update their opt-out status in Customer.io until you attempt to send them a message. That’s when we’ll check with your provider for opt-out information.

A user opted-out but I don’t see them on the opt-outs list

In general, this probably means that the opt-out wasn’t triggered by a keyword.

But we also rely on receiving your inbound messages to capture opt-outs. If someone sends an opt-out keyword but it isn’t reflected in Customer.io, it’s possible that inbound message handling isn’t fully set up for that provider, or that there was an interruption in the service we use to capture inbound messages. See Set up inbound message handling.

Copied to clipboard!